国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS 預分配數組長度,到底是變慢還是變快?

zxhaaa / 2713人閱讀

摘要:可以更有效地處理密集數組。然后有人提出了一個疑問為什么先指定長度再初始化測試出來會快一點其實,兩者相比只是可能變慢。具體因素有很多,比如預分配一個很大的數組,這時可以變快,的函數就是這么做的。如果數組很大,預先分配大小后性能反而會提升。

在我的上一篇文章 JavaScript 在 V8 中的元素種類及性能優化 中寫道:

V8 的類型轉換只能通過格子向下過渡。一旦將單精度浮點數添加到 Smi 數組中,即使稍后用 Smi 覆蓋浮點數,它也會被標記為 DOUBLE。類似地,一旦在數組中創建了一個洞,它將被永久標記為有洞 HOLEY,即使稍后填充它也是如此。

一旦數組被標記為有洞,它永遠是有洞的 - 即使它被打包了!從那時起,數組上的任何操作都可能變慢。如果您計劃在數組上執行大量操作,并且希望對這些操作進行優化,請避免在數組中創建空洞。V8 可以更有效地處理密集數組。

然后有人提出了一個疑問:

為什么先指定長度再初始化測試出來會快一點?

其實,兩者相比只是“可能”變慢。

具體因素有很多,比如預分配一個很大的數組,這時可以變快,lodash 的 map 函數就是這么做的。因為初始化的時候分配完空間,就可以避免在數組空間不夠用的時候反復的內存申請和 GC 操作。而 FAST_ELEMENTSFAST_HOLEY_ELEMENTS 都不太慢,至少在所有元素中可以排到前二。

https://cs.chromium.org/chrom...

數組分配完成后默認是 FAST_HOLEY_SMI_ELEMENTS,當元素中添加了新的非 smi 值時,數據會進行類型轉換。--trace-elements-transitions 的輸出:

elements transition [FAST_HOLEY_SMI_ELEMENTS -> FAST_HOLEY_ELEMENTS]

我寫了一個性能測試,對于 HOLEY_ELEMENTS,讀取的時候 HOLEY 慢很多,寫入的時候性能一樣。如果數組很大,預先分配大小后性能反而會提升。

https://jsperf.com/array-elem...

https://jsperf.com/array-elem...

還有一個重要的性能提示就是:避免讀數超出數組的長度!這樣 V8 會在原型鏈上去找這個屬性。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88659.html

相關文章

  • 你應該知道的數據庫數據類型及其設計原則

    摘要:整數類型整數類型有,分別使用位存儲空間。實數類型實數類型有,分別占用,字節。簡單數據類型的操作需要更少的周期。 1. 整數類型 整數類型有:tinyint、smallint、mediumint、int、bigint,分別使用 8、16、24、32、64 位存儲空間。它們可以存儲的值范圍從 -2 的 (n-1) 次方到 2 的 (n-1) 次方 -1,n 是存儲空間的位數。 整數有可選的...

    MudOnTire 評論0 收藏0
  • 跟著大彬讀源碼 - Redis 7 - 對象編碼之簡單動態字符串

    摘要:沒有直接使用語言傳統的字符串表示以空字符串結尾的字符數組,而是構建了一種名為簡單動態字符串的抽象類型,并將用作的默認字符串表示。對比字符串,有幾大優點常數復雜度獲取字符串長度杜絕緩沖區溢出減少修改字符串時所需的內存重分配次數。 Redis 沒有直接使用 C 語言傳統的字符串表示(以空字符串結尾的字符數組),而是構建了一種名為簡單動態字符串(simple dynamic string)的...

    baishancloud 評論0 收藏0
  • 獨家 | 6種讓Python程序變慢的壞習慣

    摘要:假設我們需要在程序中計算一些數字的平方根。此外如果我們需要在程序中多次使用平方根函數,代碼將會更整潔。然而在這個虛構的例子中,只有的年齡超過歲。然后檢查這三個人的年齡是否滿足第二個條件。 作者:?Christopher Tao翻譯:王可汗校對:王雨桐本文約1800字,建議閱讀5分鐘本文...

    xcc3641 評論0 收藏0

發表評論

0條評論

zxhaaa

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<