亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JS 預(yù)分配數(shù)組長度,到底是變慢還是變快?

zxhaaa / 2758人閱讀

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

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

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

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

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

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

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

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

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

數(shù)組分配完成后默認是 FAST_HOLEY_SMI_ELEMENTS,當(dāng)元素中添加了新的非 smi 值時,數(shù)據(jù)會進行類型轉(zhuǎn)換。--trace-elements-transitions 的輸出:

elements transition [FAST_HOLEY_SMI_ELEMENTS -> FAST_HOLEY_ELEMENTS]

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

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

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

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/88659.html

相關(guān)文章

  • 你應(yīng)該知道的數(shù)據(jù)庫數(shù)據(jù)類型及其設(shè)計原則

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

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

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

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

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

    xcc3641 評論0 收藏0

發(fā)表評論

0條評論

zxhaaa

|高級講師

TA的文章

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