日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Chrome DevTools:在 Profile 性能分析中显示原生 javascript 函数

發布時間:2025/3/19 javascript 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Chrome DevTools:在 Profile 性能分析中显示原生 javascript 函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文翻譯自 Chrome DevTools: Show native functions in JS Profile,中文版首發在我的知乎專欄 V8 源碼及周邊。

在 Chrome DevTools 中可以使用 profiler 查看原生函數的執行性能:

原生函數(native function)是 JavaScript 語言的一部分,這些函數有別于開發者編寫的自定義函數。當我們在 profiler 中查看代碼的調用棧時,這些函數是被過濾掉的。我們在 profiler 中看到的只有自己寫的代碼。

當我們捕獲調用棧時,Chrome 并不會捕獲 C++ 寫的函數。不過,在 V8 引擎中很多 javascript 原生函數都是使用 javascript 語言編寫的。

V8 使用 JavaScript 本身實現了 JavaScript 語言的大部分內置對象和函數。 例如,promise 功能就是通過 JavaScript 編寫的。我們把這樣的內置函數稱為自主托管(self-hosted)。

如果我們開啟 “Show native functions” 設置,Chrome 將會在 profiler 中顯示這些函數。

Chrome 分析器是如何工作的

為了找到那些耗時最多的代碼,Chrome 分析器每 100μs 捕獲一個堆棧跟蹤。

這意味著,如果一個函數只需要 50μs 的執行時間,就可能不會在分析器中顯示出來!

當你分析幾毫秒以上的時間時,可以準確了解應用程序在何時花費最多的時間。 但是,當你放大 profiler 面板想看更精準的時間時,信息會變得不太準確。

分析器也會不一致。 每次運行時,會產生一個稍微不同的結果。 有時可能會記錄非常短的函數調用,而在其他時間再次運行這些函數調用信息可能會丟失。

通過這篇博客文章我將為大家演示如何捕獲并分析原生函數的性能。當你自己運行代碼時,結果可能會有所不同。

Array.join

首先,我們運行如下代碼:

var arr = [] for (var i=0; i<1000; i++){arr.push(i) } console.profile("Array.join") arr.join(",") console.profileEnd("Array.join")復制代碼

選擇 profiler 的 “Chart” 視圖:

第一次分析時,我們不選中 “Show native functions”:

我們再次運行時,把 “Show native functions” 啟用:

當我們把鼠標指向函數時,會看到更加詳細的信息:

如上信息中,chrome devtools 展示了原生函數的行號,你可以在 Chrome code search中找到這個文件 “array.js”。行號信息可能不同,因為 V8 源碼的最新版本和 Chrome 使用的 V8 版本可能不一樣。

你可以看到 ArrayJoin 函數在內部調用了 InnerArrayJoin:

function ArrayJoin(separator) {CHECK_OBJECT_COERCIBLE(this, "Array.prototype.join");var array = TO_OBJECT(this);var length = TO_LENGTH(array.length);return InnerArrayJoin(separator, array, length); }復制代碼

InnerArrayJoin 在內部調用了 DoJoin。

DoJoin 調用了 %StringBuilderJoin。

%StringBuilderJoin 是使用 C++ 實現的。

稀疏數組

我們有點偏離主題,但是我認為 V8 處理稀疏數組(new Array(n))是非常有趣的。

為什么這很有用呢?

下面的代碼是如何運行的?

arr = new Array(10000000) for (var i=0; i<10000; i++){arr.push(i) } console.profile("arr + arr") arr + arrconsole.profileEnd("arr + arr")復制代碼

您通常不會在兩個數組上執行加操作。但是由于某種原因,我最近看過的一些代碼就是這樣做的。

當不是用查看原生函數時,我們看到了一個匿名函數的調用。

當我們開啟了查看原生函數功能時,Chrome 調用了 array 的 toString 方法,然后調用了 join 方法。

Error().stack

我們來看一個不同的例子。在 JavaScript 中,您可以使用 Error().stack 獲取當前正在運行的函數的堆棧跟蹤(stack trace)。

當我們運行該代碼時,一共做了兩件事: 首先我們創建一個新的 Error 對象,然后訪問它的 stack 屬性。

獲取堆棧跟蹤的字符串描述信息時,耗費了大量的時間。

我能夠通過獲取一個 Error 對象來加快我正在處理的代碼:只有當我需要顯示堆棧跟蹤時,才解析其 stack 屬性。

不準確的地方

在我的文章的開頭章節,我提到了非常小的時間間隔可能造成結果的不準確。為了說明這一點,我在另一臺不同配置的電腦上運行了 Error().stack 的代碼段。

我們看到了 FormatErrorString 函數,而在之前的分析中,這個函數并沒有顯示出來。

(這次的總執行時間是 ~1ms,這意味著 Chrome 需要 10 個調用堆棧的樣本。上面的例子花了 ~10ms,因為我在循環中調用了 10 次 Error().stack。)

相關閱讀

  • 移動 Web 滾動性能優化:Passive Event Listeners
  • 使用 D8 分析 javascript 如何被 V8 引擎優化的
  • 開啟 V8 對象屬性的“fast”模式

如果對 V8 引擎干興趣,我在 4月15(星期六)晚 8 點和大家一起聊聊 V8 引擎:前端程序員應該懂點 V8 知識 - SegmentFault 講堂。

總結

以上是生活随笔為你收集整理的Chrome DevTools:在 Profile 性能分析中显示原生 javascript 函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩xxxx| 国产黄色视屏 | 成年网站在线观看 | 久久加勒比 | 97色干| 国产精品第三页 | 国产女人18水真多18精品一级做 | 能看av的网址 | 李丽珍裸体午夜理伦片 | 免费看成人 | 久草国产在线观看 | 色一情| 亚洲最新| 成人h动漫精品一区二区无码 | av黄色大片| 国产三级福利 | 91久久超碰| 国产又粗又大又爽 | 欧美精品乱码99久久蜜桃 | 亚洲一区二区视频网站 | 日韩精品久久久久久久电影99爱 | 精品国产无码在线观看 | 国产天堂av | 欧美在线影院 | 久久久久久久久综合 | 哺乳援交吃奶在线播放 | 久久曰视频 | 97夜夜操| 涩五月婷婷 | 亚洲色偷偷综合亚洲av伊人 | 成人福利在线 | 性生活av | 国产欧美日韩综合精品一区二区 | 亚州av | 日本少妇性高潮 | 中出白浆 | 成人做爰www免费看视频网站 | 成人免费午夜视频 | 四虎影像 | 日韩123区 | 日韩三级观看 | 欧美日韩亚洲在线观看 | 一本色道久久综合狠狠躁 | 天堂视频免费在线观看 | 欧美在线免费看 | 黄色免费在线看 | 成人小视频免费在线观看 | 99re这里 | 国产伦精品一区二区免费 | 日本免费精品 | 叼嘿视频在线免费观看 | 丰满人妻在公车被猛烈进入电影 | 国产激情一区二区三区四区 | 日韩福利视频网 | 人妻无码一区二区三区久久 | 亚洲成a人在线观看 | 久久亚洲综合国产精品99麻豆精品福利 | 牛av| 99久久婷婷国产综合精品青牛牛 | 日日噜噜噜噜人人爽亚洲精品 | 日韩一级片中文字幕 | 日日碰狠狠添天天爽 | 私人毛片 | 日本黄网在线观看 | 国产精品久久午夜夜伦鲁鲁 | 伊人久久成人 | 亚洲中文一区二区三区 | 欧美性狂猛xxxxxbbbbb | 国产crm系统91在线 | 韩国三级在线视频 | 国产a视频精品免费观看 | 国产成人毛毛毛片 | 撒尿free性hd | 亚洲AV蜜桃永久无码精品性色 | 红桃av| 特黄特色大片免费 | 青青草国产在线观看 | 日韩二区三区四区 | 欧美1区2区3区4区 | 国产成人精品一区二区在线小狼 | 免费在线不卡视频 | 亚洲经典视频 | 真人抽搐一进一出视频 | 黄色生活毛片 | 日本在线精品视频 | 91精品国产色综合久久不8 | 久草视频精品在线 | 无码人妻丰满熟妇啪啪 | 一区二区日韩欧美 | 天天干天天操天天摸 | 欧美三级一区 | 国产又爽又黄免费软件 | 中文有码一区 | 欧美多人猛交狂配 | 国产成人97精品免费看片 | 成人久久影院 | 日日夜夜操av | av在线中文| 亚洲欧美日韩精品久久亚洲区 |