成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

zxhaaa / 2730人閱讀

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

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

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

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

然后有人提出了一個(gè)疑問:

為什么先指定長(zhǎng)度再初始化測(cè)試出來會(huì)快一點(diǎn)?

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

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

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

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

elements transition [FAST_HOLEY_SMI_ELEMENTS -> FAST_HOLEY_ELEMENTS]

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

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88659.html

相關(guān)文章

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

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

    MudOnTire 評(píng)論0 收藏0
  • 跟著大彬讀源碼 - Redis 7 - 對(duì)象編碼之簡(jiǎn)單動(dòng)態(tài)字符串

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

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

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

    xcc3641 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

zxhaaa

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<