精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

測量JavaScript函數的性能的簡單方法及與其他方式對比

開發 前端
在這篇文章中,我將解釋你如何測量你的功能的性能,以及如何處理你從它們中得到的結果。

測量執行一個函數所需的時間總是一個很好的辦法,證明某些實現比另一個實現的性能更好。這也是一個很好的方法,可以確保性能沒有在某些改變后受到影響,也可以追蹤瓶頸。

良好的性能有助于獲得良好的用戶體驗,良好的用戶體驗會讓用戶回頭客。一項研究顯示,88%的在線消費者因為性能問題,在用戶體驗不佳后用戶回來的可能性較小。

這就是為什么能夠識別代碼中的瓶頸并測量改進的原因。尤其是在為瀏覽器開發JavaScript時,要注意到你寫的每一行JavaScript都有可能阻塞DOM,因為它是一種單線程語言。

在這篇文章中,我將解釋你如何測量你的功能的性能,以及如何處理你從它們中得到的結果。

Perfomance.now

performance API通過其功能 performance.now() 提供對 DOMHighResTimeStamp 的訪問,該函數返回自頁面加載以來經過的時間(以毫秒為單位),精度最高為5µs(以分數為單位)。

所以在實踐中,你需要取兩個時間戳,保存在一個變量中,然后讓第二個時間戳減去第一個時間戳。

  1. const t0 = performance.now(); 
  2. for (let i = 0; i < array.length; i++) { 
  3.   // some code 
  4. const t1 = performance.now(); 
  5. console.log(t1 - t0, 'milliseconds'); 

Chrome輸出

  1. 0.6350000001020817 "milliseconds" 

Firefox輸出

  1. 1 milliseconds 

在這里,我們可以看到Firefox中的結果與Chrome完全不同,這是因為Firefox版本從60開始將 performance API 的精度降低到2ms。

performance API提供的功能遠比只返回時間戳要多得多,它能夠測量導航計時、用戶計時或資源計時。請看這篇文章,里面有更詳細的解釋。

但是,對于我們的用例,我們只想測量單個函數的性能,因此時間戳就足夠了。

那不是和Date.now一樣嗎?

現在你可能會想:我也可以用 Date.now 來做這個啊。

是的,可以,但是有缺點。

Date.now 以毫秒為單位返回從Unix紀元("1970-01-01-01T00:00:00:00Z")開始的時間,并且取決于系統時鐘。這不僅意味著它沒有那么精確,而且也不一定會遞增。WebKit工程師(Tony Gentilcore)的解釋如下:

也許較少考慮到的是,基于系統時間的Date也不是真正的用戶監控的理想選擇。大多數系統都會運行一個守護進程來定期同步時間。通常情況下,時鐘每隔15-20分鐘就會調整幾毫秒。在這個速度下,大約有1%的10秒的時間間隔是不準確的。

Console.time

該API確實易于使用,只需將 console.time 放在你要測量的代碼前面,將 console.timeEnd 放在要測量的代碼后面,即可使用相同的 string 參數調用該函數,一頁上最多可以同時使用10,000個計時器。

精度與 performance API 相同,但這又取決于瀏覽器。

  1. console.time('test'); 
  2. for (let i = 0; i < array.length; i++) { 
  3.   // some code 
  4. console.timeEnd('test'); 

這樣會自動生成易于理解的輸出,如下所示:

Chrome輸出

  1. test: 0.766845703125ms 

Firefox輸出

  1. test: 2ms - timer ended 

這里的輸出又與Performance API非常相似。

console.time 的優點是易于使用,因為它不需要手動計算兩個時間戳之間的差。

縮短時間精度

如果你在不同的瀏覽器中使用上面提到的API來測量你的函數,你可能會發現結果會有差異。

這是由于瀏覽器試圖保護用戶免受定時攻擊和指紋攻擊, 如果時間戳太準確,黑客可以使用它來識別用戶。

例如,Firefox之類的瀏覽器試圖通過將精度降低到2ms(版本60)來防止這種情況。

需要注意的事項

現在,你已經擁有測量JavaScript函數的速度所需的工具。但是,最好避免一些陷阱。

1. 分而治之

你注意到在過濾一些結果時有些東西很慢,但是你不知道瓶頸在哪里。

與其胡亂猜測代碼中哪一部分是慢的,不如用上述這些函數來測量。

要追蹤它,首先把你的 console.time 語句放在慢的代碼塊周圍。然后測量它們的不同部分是如何執行的,如果其中一個部分比其他部分慢,那么就繼續下去,每次深入到那里,直到找到瓶頸。

這些語句之間的代碼越少,跟蹤不感興趣的內容的可能性就越小。

2. 注意輸入值

在實際應用中,給定函數的輸入值可能會發生很大變化。僅針對任意隨機值測量函數的速度并不能提供我們可以實際使用的任何有價值的數據。

確保使用相同的輸入值運行代碼。

3. 多次運行函數

假設你有一個函數對一個數組進行迭代,對每個數組的值進行一些計算,并返回一個數組的結果。你想知道是forEach 還是簡單的 for 循環更有效。

這是函數:

  1. function testForEach(x) { 
  2.   console.time('test-forEach'); 
  3.   const res = []; 
  4.   x.forEach((value, index) => { 
  5.     res.push(value / 1.2 * 0.1); 
  6.   }); 
  7.  
  8.   console.timeEnd('test-forEach') 
  9.   return res; 
  10.  
  11. function testFor(x) { 
  12.   console.time('test-for'); 
  13.   const res = []; 
  14.   for (let i = 0; i < x.length; i ++) { 
  15.     res.push(x[i] / 1.2 * 0.1); 
  16.   } 
  17.  
  18.   console.timeEnd('test-for') 
  19.   return res; 

你可以這樣測試它們:

  1. const x = new Array(100000).fill(Math.random()); 
  2. testForEach(x); 
  3. testFor(x); 

如果你在Firefox中運行上述函數,你將獲得類似以下的輸出:

  1. test-forEach: 27ms - timer ended 
  2. test-for: 3ms - timer ended 

看起來forEach變慢了,對吧?

讓我們看看是否使用相同的輸入兩次運行相同的函數:

  1. testForEach(x); 
  2. testForEach(x); 
  3. testFor(x); 
  4. testFor(x); 
  1. test-forEach: 13ms - timer ended 
  2. test-forEach: 2ms - timer ended 
  3. test-for: 1ms - timer ended 
  4. test-for: 3ms - timer ended 

如果我們第二次調用 forEach 測試,它的性能與 for 循環一樣好。鑒于初始值較慢,可能無論如何都不值得使用 forEach。

4. ...在多個瀏覽器中

如果我們在Chrome中運行上述代碼,結果會突然看起來不同:

  1. test-forEach: 6.156005859375ms 
  2. test-forEach: 8.01416015625ms 
  3. test-for: 4.371337890625ms 
  4. test-for: 4.31298828125ms 

這是因為Chrome和Firefox具有不同的JavaScript引擎,并且具有不同類型的性能優化。意識到這些差異是一件好事。

在這種情況下,Firefox在相同輸入的情況下,對 forEach 的使用進行了較好的優化。

for 在兩個引擎上的性能都更好,因此最好堅持使用 for 循環。

這是為什么要在多個引擎中進行測量的一個很好的例子。如果僅使用Chrome進行測量,您可能會得出結論,與 for 相比,forEach 并不那么糟糕。

5. 節流你的CPU

這些數值看起來并不高。要知道,你的開發機器通常比你的網站所使用的普通手機瀏覽速度要快得多。

為了感受一下這個樣子,瀏覽器有一個功能,可以讓你節流你的CPU性能。

有了這個,那些10或50ms很快就變成了500ms。

6. 測量相對表現

這些原始結果實際上不僅僅取決于你的硬件,還取決于你的CPU和你的JavaScript線程的當前負載。盡量關注你的測量結果的相對改進,因為下次重啟電腦時,這些數字可能會看起來很不一樣。

總結

在本文中,我們看到了一些JavaScript API,我們可以使用它們來測量性能,以及如何在“真實世界”中使用它們。對于簡單的測量,我發現使用 console.time 更容易。

 

責任編輯:趙寧寧 來源: 前端外文精選
相關推薦

2017-09-27 16:44:23

前端

2024-08-02 08:43:24

JavaScript開發者工具箱深拷貝

2010-03-25 14:45:24

Linux桌面環境

2011-02-17 11:19:24

Linux Live

2010-08-23 17:57:43

交換機配置dhcp

2010-09-30 14:01:38

2010-11-23 16:21:07

MySQL大表備份

2010-03-15 14:10:34

ubuntu系統

2009-08-12 16:47:36

C#轉換農歷

2009-12-25 10:44:37

VDSL上網

2009-12-28 15:48:33

光纖接入技術

2010-05-11 14:24:38

Chrome瀏覽器性能橫評測

2011-04-06 09:09:17

MySQL數據庫備份

2010-03-03 13:56:43

Linux ubant

2023-03-16 08:14:57

2011-05-18 13:37:26

LINQ

2009-02-05 14:48:51

跳出循環多層循環編程

2011-03-02 10:01:15

2010-08-06 13:23:58

NFS配置

2010-07-20 14:07:31

更改TELNET端口
點贊
收藏

51CTO技術棧公眾號

青青在线视频免费观看| 欧美日韩成人在线视频| 日本美女高潮视频| 久草中文在线观看| av电影在线观看不卡| 国产成人精品久久二区二区91| 国产精品久久国产精麻豆96堂| 日韩激情综合| 日本韩国欧美一区二区三区| 热这里只有精品| 欧美欧美欧美| 懂色av噜噜一区二区三区av| 国产精品视频久久久| 久久精品一区二区三| 成人影院在线| 日韩精品极品在线观看| 国产高清av片| 成人啊v在线| 精品美女永久免费视频| 桥本有菜av在线| 男人天堂网在线观看| 国产不卡在线播放| 成人av资源在线播放| 亚洲精品中文字幕乱码三区91| 午夜精品久久99蜜桃的功能介绍| 亚洲一级免费视频| 黄色录像a级片| 日韩精品一区二区三区中文 | 欧美亚洲日本一区二区三区| 欧洲不卡视频| 中文无字幕一区二区三区| 精品国产免费一区二区三区 | 精品国产一区二区三区久久| 我和岳m愉情xxxⅹ视频| 国产精品极品在线观看| 日韩三级免费观看| 网站在线你懂的| 激情中国色综合| 91成人在线免费观看| 欧美 日韩 国产一区| а√天堂资源官网在线资源| 一区二区日韩电影| 欧美 亚洲 视频| 在线观看中文| 一卡二卡欧美日韩| 成人国产在线看| 182tv在线播放| 一区二区三区在线免费| 中文字幕一区二区三区四区五区人 | 久久久精品99| 国产一区久久| 欧美日韩高清在线观看| 久久久久噜噜噜亚洲熟女综合| 影音先锋日韩在线| 美女国内精品自产拍在线播放| 任你操精品视频| 久久资源中文字幕| 久久久精品久久| 亚洲av鲁丝一区二区三区| 一二三区不卡| 欧美精品videosex性欧美| 久久久久99精品成人片毛片| 激情久久婷婷| 97色在线视频| 亚洲天堂男人av| 肉丝袜脚交视频一区二区| 97精品久久久| 国产精久久久久久| 国产一区二区三区久久久久久久久 | 玛雅亚洲电影| 欧美日韩三级视频| 亚洲欧美日韩一二三区| 国产精品对白久久久久粗| 日韩精品在线观看一区| 日韩av片在线| 一区二区三区四区日韩| 午夜精品久久久久久久99黑人 | 欧美一区二区综合| 91在线不卡| 一区二区三区日韩精品| 成年人视频观看| 97精品国产99久久久久久免费| 欧美久久久一区| 91传媒理伦片在线观看| 深爱激情综合| 欧美成人激情视频免费观看| 色婷婷在线观看视频| 久久字幕精品一区| 91在线看www| 四虎精品成人免费网站| 中文字幕一区二区不卡| 97在线国产视频| 成人午夜在线| 亚洲电影免费观看高清完整版在线| 精品无人区无码乱码毛片国产| 66视频精品| 欧美有码在线视频| 国产三级自拍视频| 久久影院午夜论| 欧美一级特黄aaaaaa在线看片| 深夜福利视频一区二区| 欧美一区二区三区免费观看视频| 精品无码在线视频| 国产精品毛片久久| 欧美一区二区三区图| 99久久一区二区| 久久久99免费| 国产av人人夜夜澡人人爽麻豆| 国产欧美自拍| 亚洲欧美在线看| 久久精品女人毛片国产| 久久爱另类一区二区小说| 久久人人爽爽人人爽人人片av| 超鹏97在线| 欧美日韩亚洲综合一区| 黄色a一级视频| 国语自产精品视频在线看8查询8| 国产精品久久久精品| 无码精品一区二区三区在线| 亚洲免费观看高清完整版在线观看 | 日韩欧美视频在线免费观看| 国产麻豆精品95视频| 视频一区国产精品| 成人性生活视频| 亚洲国产精品小视频| 精品99在线观看| 久久成人免费电影| 视频一区国产精品| 日韩欧美一区二区三区免费观看| 日韩高清免费在线| 国产在线观看你懂的| 国产精品996| 2021狠狠干| 高清一区二区三区av| 少妇高潮 亚洲精品| 99久久久无码国产精品免费蜜柚| 成人免费毛片片v| 日本人妻伦在线中文字幕| 96视频在线观看欧美| 精品国产一区二区三区久久久狼| 超碰在线97观看| 久久精品这里都是精品| 日本熟妇人妻xxxxx| 色哟哟精品丝袜一区二区| 韩日欧美一区二区| 日本免费一区视频| 天天av天天翘天天综合网| 欧美极品jizzhd欧美仙踪林| 欧美午夜不卡| 国产一区二区免费在线观看| а√在线天堂官网| 亚洲精品一区中文| 免费看污视频的网站| 国产精品入口麻豆原神| 国产乱码一区二区三区四区| 亚洲综合专区| 国产一区二区三区av在线| 182在线视频观看| 亚洲免费视频在线观看| 波多野结衣二区三区| 久久影音资源网| 成人午夜激情av| 日韩欧美三级| 亚洲最大av在线| а√天堂8资源在线| 亚洲美女av在线| 怡红院男人的天堂| 亚洲男人电影天堂| 欧美大喷水吹潮合集在线观看| 性感少妇一区| 亚洲午夜精品久久| 在线观看视频一区二区三区| 久久久久久com| 加勒比一区二区三区在线| 欧美日韩国产中文| 久久久久久久久久久网| 99国产精品一区| 黄色一级二级三级| 一区二区三区毛片免费| 玛丽玛丽电影原版免费观看1977| 国产原创一区| 久久久久国产精品www| 日本五码在线| 日韩亚洲国产中文字幕欧美| 依依成人综合网| 亚洲欧美日韩精品久久久久| 香蕉久久久久久av成人| 日韩av一区二| 日本熟妇人妻xxxx| 欧美一区2区| aaa级精品久久久国产片| 亚洲最大网站| 欧美大片欧美激情性色a∨久久| 三级av在线| 日韩一卡二卡三卡| 无码一区二区三区在线观看| 一区二区三区四区亚洲| 欧美做受xxxxxⅹ性视频| 国产成人在线色| 99热这里只有精品在线播放| 亚洲美女91| 自拍另类欧美| 国产亚洲欧美日韩在线观看一区二区| 999视频在线免费观看| 成人国产在线| 欧美一区二三区| 污污在线观看| 日韩在线小视频| 精品亚洲综合| 亚洲精品国产精品国自产在线 | 亚洲精品xxx| 99热这里只有精品66| 欧美三电影在线| 在线观看中文字幕的网站| 日韩女优av电影| 正在播放亚洲精品| 精品久久久中文| 久久久久久免费观看| 综合久久久久久| a天堂中文字幕| 97se亚洲国产综合在线| 中文字幕第六页| 国产在线精品一区在线观看麻豆| 不要播放器的av网站| 国产精品一级| 日本福利视频在线| 禁久久精品乱码| 17c丨国产丨精品视频| 在线精品视频在线观看高清| 亚洲资源视频| 日韩黄色大片| 亚洲日本精品| 日本a级不卡| 亚洲综合网中心| 久久日文中文字幕乱码| 亚欧洲精品在线视频免费观看| 精品国产aⅴ| 欧美一级日本a级v片| 欧美猛男同性videos| 欧美高清视频一区| 国产成人久久| 日本欧洲国产一区二区| 欧美精品尤物在线观看| 免费日韩av电影| 国产精品99无码一区二区| 国产精品调教| 国产精品国产精品国产专区蜜臀ah| 久久综合给合| 99超碰麻豆| aaa国产精品视频| 国产嫩草一区二区三区在线观看| a级日韩大片| 精品国产_亚洲人成在线| 日韩成人动漫在线观看| 欧美日韩亚洲一区二区三区在线观看| 免费成人结看片| 亚洲国内在线| 中文无码久久精品| 日本一区午夜艳熟免费| 国产欧美日韩一级| 凹凸日日摸日日碰夜夜爽1| 全国精品久久少妇| www,av在线| 不卡一区二区三区四区| 人妻少妇精品视频一区二区三区| 久久久91精品国产一区二区精品 | 国内伊人久久久久久网站视频| 91福利区在线观看| 欧洲成人性视频| 欧美美女福利视频| 91视频国产精品| 另类春色校园亚洲| 水蜜桃一区二区三区| 一区二区三区在线观看免费| 成年人午夜免费视频| 日韩av午夜在线观看| 人妻少妇偷人精品久久久任期| 99riav一区二区三区| 欧美老女人性生活视频| 亚洲精品日韩综合观看成人91| 日韩乱码在线观看| 在线观看国产日韩| 国产精品入口日韩视频大尺度 | 国产成人精品一区二区| 成人在线视频国产| 久久久99国产精品免费| 国产精品videosex性欧美| 欧美亚洲色图视频| 日韩和欧美一区二区三区| 伦伦影院午夜理论片| 久久久久国产精品人| 日韩视频中文字幕在线观看| 色综合网色综合| a天堂在线观看视频| 亚洲欧美日韩区| www在线视频| 日本老师69xxx| 亚洲1区在线| 亚洲国产一区在线| 国产日韩一区二区三区在线| 欧美成人手机在线视频| 国产午夜亚洲精品理论片色戒| 九九热这里有精品视频| 欧美网站大全在线观看| 免费观看毛片网站| 北条麻妃在线一区二区| 在线一区av| 成人欧美一区二区三区在线观看| 欧美精品尤物在线观看 | 日本二区三区视频| 精品久久久中文| 丰满人妻一区二区三区免费视频| 中文字幕欧美国内| 天堂av在线网| 国产精品二区三区四区| 亚洲综合激情在线| 一级黄色录像在线观看| 久久久久国产精品麻豆ai换脸| 精品视频久久久久| 欧美一区二区三区喷汁尤物| 午夜激情在线观看| 国产精品18久久久久久麻辣| 久久资源综合| 日韩精品在线观看av| 国产一区在线精品| 韩国一级黄色录像| 精品视频在线看| 国产在线观看黄| 欧亚精品中文字幕| 伊人久久大香线蕉av不卡| 欧美精品久久久久久久自慰| 成人三级伦理片| 美女视频黄免费| 欧美不卡视频一区| a天堂中文在线官网在线| 国产综合色香蕉精品| 日韩欧美精品一区| 高潮一区二区三区| 国产精品久久久久久久久快鸭| 中文字幕在线观看你懂的| 夜夜嗨av色综合久久久综合网| 国产精品扒开腿做爽爽爽视频软件| 久久久国产精品一区二区三区| 国产日韩视频| 国产肥白大熟妇bbbb视频| 色一情一乱一乱一91av| 国产最新视频在线观看| 国产精品久久久久久久久久三级| 激情五月综合| 国产原创精品在线| 中文字幕日韩精品一区| 国产精品视频无码| 色综合色综合久久综合频道88| 亚洲日本va午夜在线电影| 欧美交换配乱吟粗大25p| 成人污污视频在线观看| 日韩特级黄色片| 亚洲色图18p| 欧洲亚洲精品| 4444亚洲人成无码网在线观看| 成人av在线看| 国产精品久久久久久人| 色阁综合伊人av| 欧美第一在线视频| 国产成人无码a区在线观看视频| 国产午夜精品理论片a级大结局| 真实新婚偷拍xxxxx| 欧美乱妇40p| 亚洲春色h网| 奇米视频7777| 一区二区三区精品在线观看| 男女污视频在线观看| 国产日韩在线精品av| 欧美三级在线| 黄瓜视频污在线观看| 欧美日韩国产乱码电影| 懂色av一区| 日韩福利二区| 成人在线视频一区二区| 在线精品免费视| 久久大大胆人体| 日韩大尺度在线观看| 欧美视频亚洲图片| 欧美日韩亚洲91| 老司机精品视频在线观看6| 久久99精品久久久久久水蜜桃| 青青草97国产精品免费观看| 免费在线观看黄色av| 亚洲欧美日韩直播| 日韩欧美高清一区二区三区| 国产成人无码一二三区视频| ...xxx性欧美| 蜜桃视频在线入口www| 亚洲va男人天堂| 久久亚洲精品伦理| 欧美日韩人妻精品一区二区三区| 国产亚洲精品久久| 极品尤物一区| 激情文学亚洲色图| 色婷婷综合久色|