この質問が提起された理由は、ウェブストームからの警告メッセージのためです。
リーリー上記のコードはウェブストームの終了時に警告を報告します。警告情報は次のとおりです:
リーリーエラーメッセージによると、私が考えた解決策は、同じセレクターで取得したJSオブジェクトを変数を使用して置き換えることでした。 リーリー
もちろん、警告はありません。コードでは実行効率について言及しているため、これら 2 つのコードの実行時間もテストしました。
同じ操作を 10,000 回実行し、3 回テストしました。最初のコードの合計実行時間は 1372 でした。 、1339、1423コードの 2 番目の部分の合計実行時間は、それぞれ 1407、1277、および 1403 です。
テスト後、警告はありませんが、実行効率は改善されていません。
そして、私は最近ある企業でインターンをしていました。その企業のコードを見てみましたが、2 番目のコードと似たものはありませんでした。セレクター操作を繰り返し実行するコードが無数にありました。
以下の回答を読んでください:
次のコードのテストを追加します3 つのテストの結果は、1338 1348 1404 です。まだ改善はありません。
错在哪里其他答案已经指出了。
我说一点,效率看不到明显提升是因为编译器给你优化了,事实上大多数这种低级错误都能被优化掉,例如变量重复声明,你声明一亿次也会被优化成一次,到了执行时就没区别了。
真正能够影响js性能的不是这么小的点,但不是说你就可以忽略它,因为编码思维的提高可比那一点性能提高重要多了。
var result_logo=$('#result_logo')应该写在循环体外面,在写js代码的时候尽量缓存不会变的jquery对象,
你们项目代码有很多重复的写法,不代表那就是最优的写法
你如果像这样:
这是可以优化的。但你写的变量始终是一个jquery对象,用变量和$()都是一样的
现代浏览器这些都给你优化过了,要真正测试效率,你放IE8 9 10下去试试 看看差距大不大。另外你的选择器是id选择器本来比较快,换成类选择器 效率对比也就出来了。
你每次操作打印的东西是一样的,chrome的缓存机制优化了
报错的原因我觉得就在这句话:
warns about duplicated selectors which could be cached.
,把变量声明写在循环体外试试你把获取标签和声明变量的代码都写在循环体里边,肯定没提升啊。
理论上这么写能有点提升,但是你这个测试方法根本不科学,不能完全体现代码的效率。除了依赖代码效率,同时和网速也有关系,反应出来的结果并不准确。