亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

javascript - 這兩段JS的代碼運行效率比較

瀏覽:78日期:2023-02-12 11:41:37

問題描述

測試環境

百度首頁谷歌瀏覽器控制臺

之所以提出這個問題,是因為webstorm的一個warnning信息。

var startTime=new Date().getTime();for(let i=0;i<10000;i++){ console.log($(’#result_logo’).text()); console.log($(’#result_logo’).html());}var endTime=new Date().getTime();var myTime=endTime-startTime;myTime;

上述的代碼在webstorm最后會報warning,warning信息如下:

Checks that jQuery selectors are used in an efficient way. It suggests to split descendant selectors which are prefaced with ID selector and warns about duplicated selectors which could be cached.

根據報錯信息,我想到的解決方法是用變量代替同樣的選擇器取到的JS對象

var startTime=new Date().getTime();for(let i=0;i<10000;i++){ var result_logo=$(’#result_logo’); console.log(result_logo.text()); console.log(result_logo.html());}var endTime=new Date().getTime();var myTime=endTime-startTime;myTime;

當然這樣就沒有warning了。由于代碼提到運行效率,我也測試了這兩段代碼的運行時間同樣的操作運行10000次,測試三次,第一段代碼的運行總時長分別是1372,1339,1423第二段代碼的運行總時長分別是1407,1277,1403.經過測試,雖然沒有warning了,但是運行效率沒有任何提升。

而且我最近一個公司實習,我看了公司的代碼,根本沒有類似我第二段代碼的寫法,重復進行選擇器操作的代碼不勝枚舉。

我的問題是:像我第二段代碼的優化根本沒什么必要。反而多出一個變量無形中增加了維護難度。

看了樓下的回答:增加以下代碼的測試

var startTime=new Date().getTime();for(let i=0;i<10000;i++){ console.log($(’#result_logo’).text()); console.log($(’#result_logo’).html());}var endTime=new Date().getTime();var myTime=endTime-startTime;myTime;

三次測試結果分別是:1338 1348 1404。還是沒有提升。

問題解答

回答1:

錯在哪里其他答案已經指出了。我說一點,效率看不到明顯提升是因為編譯器給你優化了,事實上大多數這種低級錯誤都能被優化掉,例如變量重復聲明,你聲明一億次也會被優化成一次,到了執行時就沒區別了。真正能夠影響js性能的不是這么小的點,但不是說你就可以忽略它,因為編碼思維的提高可比那一點性能提高重要多了。

回答2:

var result_logo=$(’#result_logo’)應該寫在循環體外面,在寫js代碼的時候盡量緩存不會變的jquery對象,你們項目代碼有很多重復的寫法,不代表那就是最優的寫法

回答3:

你如果像這樣:

var res = document.querySelector('#result_logo');console.log(res.innerHTML);console.log(res.outerHTml);

這是可以優化的。但你寫的變量始終是一個jquery對象,用變量和$()都是一樣的

回答4:

現代瀏覽器這些都給你優化過了,要真正測試效率,你放IE8 9 10下去試試 看看差距大不大。另外你的選擇器是id選擇器本來比較快,換成類選擇器 效率對比也就出來了。

回答5:

你每次操作打印的東西是一樣的,chrome的緩存機制優化了

回答6:

報錯的原因我覺得就在這句話:warns about duplicated selectors which could be cached.,把變量聲明寫在循環體外試試

回答7:

你把獲取標簽和聲明變量的代碼都寫在循環體里邊,肯定沒提升啊。

var startTime=new Date().getTime(), result_logo=$(’#result_logo’);for(let i=0;i<10000;i++){ console.log(result_logo.text()); console.log(result_logo.html());}var endTime=new Date().getTime(), myTime=endTime-startTime;myTime;

理論上這么寫能有點提升,但是你這個測試方法根本不科學,不能完全體現代碼的效率。除了依賴代碼效率,同時和網速也有關系,反應出來的結果并不準確。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 永久免费不卡在线观看黄网站 | 一级片免费在线 | 国产aaa级一级毛片 国产aaa免费视频国产 | 欧美成人免费全部观看在线看 | 欧美成人禁片在线观看网址 | 国产精品亚洲欧美一级久久精品 | 男女国产一级毛片 | 久久99精品久久久久久青青91 | 91精品国产爱久久久久 | 欧美亚洲精品一区二三 | 日韩色爱| 欧美午夜影院 | 在线观看国产视频 | 亚洲欧美日韩中文字幕久久 | 精品中文字幕在线观看 | 毛片在线网 | 日本不卡免费新一二三区 | 丁香六月欧美 | 国产不卡视频在线 | 香蕉超级碰碰碰97视频在线观看 | 亚洲欧美日韩在线播放 | 国产成人久久精品一区二区三区 | 手机看片在线播放 | 亚洲欧美色综合一区二区在线 | 一区二区三区在线 | 日本 | 91在线精品亚洲一区二区 | 亚洲国产婷婷综合在线精品 | 国产美女天天爽在线hd | 国产无套乱子伦精彩是白视频 | 草久免费视频 | 六月丁香激情综合成人 | 午夜精品在线免费观看 | 成年女人色费视频免费 | 精品综合久久久久久8888 | 欧美日韩国产亚洲一区二区 | 亚洲综合偷自成人网第页 | 亚洲欧洲无码一区二区三区 | 美国人妖欧美性xxxxk妖 | 999国产一区二区三区四区 | 日韩一区二区不卡中文字幕 | 一本久久精品一区二区 |