第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么array.push有時比array [n] = value更快?

為什么array.push有時比array [n] = value更快?

喵喵時光機 2019-07-24 14:50:36
為什么array.push有時比array [n] = value更快?作為測試一些代碼的副作用,我編寫了一個小函數(shù)來比較使用array.push方法與直接尋址(array [n] = value)的速度。令我驚訝的是,推送方法通常表現(xiàn)得更快,特別是在Firefox中,有時在Chrome中。只是出于好奇:任何人都有解釋嗎?您可以在此頁面找到測試(單擊“數(shù)組方法比較”)
查看完整描述

3 回答

?
墨色風雨

TA貢獻1853條經(jīng)驗 獲得超6個贊

這些是我通過測試得到的結果

在Safari上:

  • Array.push(n)1,000,000個值:0.124秒

  • 數(shù)組[n .. 0] =值(降序)1,000,000個值:3.697秒

  • 數(shù)組[0 .. n] =值(升序)1,000,000個值:0.073秒

在FireFox上:

  • Array.push(n)1,000,000個值:0.075秒

  • 數(shù)組[n .. 0] =值(降序)1,000,000個值:1.193秒

  • 數(shù)組[0 .. n] =值(升序)1,000,000個值:0.055秒

在IE7上:

  • Array.push(n)1,000,000個值:2.828秒

  • 數(shù)組[n .. 0] =值(降序)1,000,000個值:1.141秒

  • 數(shù)組[0 .. n] =值(升序)1,000,000個值:7.984秒

根據(jù)你的測試,推送方法似乎在IE7上更好(差異很大),并且由于在其他瀏覽器上差異很小,似乎推送方法確實是向陣列添加元素的最佳方式。

但是我創(chuàng)建了另一個簡單的測試腳本來檢查快速將值附加到數(shù)組的方法,結果讓我感到驚訝,使用Array.length似乎比使用Array.push要快得多,所以我真的不知道是什么再說一遍,我一無所知。

順便說一句:在我的IE7上你的腳本停止了,瀏覽器問我是否要讓它繼續(xù)下去(你知道典型的IE消息說:“停止運行這個腳本?...”)我會重新嘗試減少一點循環(huán)。


查看完整回答
反對 回復 2019-07-24
?
catspeake

TA貢獻1111條經(jīng)驗 獲得超0個贊

push() 是更普遍的[[Put]]的特例,因此可以進一步優(yōu)化:

在數(shù)組對象上調(diào)用[[Put]]時,必須首先將參數(shù)轉(zhuǎn)換為無符號整數(shù),因為所有屬性名稱(包括數(shù)組索引)都是字符串。然后必須將其與數(shù)組的長度屬性進行比較,以確定是否必須增加長度。推送時,不需要進行這樣的轉(zhuǎn)換或比較:只需使用當前長度作為數(shù)組索引并增加它。

當然還有其他一些會影響運行時的東西,例如調(diào)用push()應該比調(diào)用[[Put]] via慢,[]因為必須檢查原型鏈的前者。


正如olliej指出的那樣:實際的ECMAScript實現(xiàn)將優(yōu)化轉(zhuǎn)換,即對于數(shù)字屬性名稱,不會進行從字符串到uint的轉(zhuǎn)換,只需進行簡單的類型檢查。基本假設應該仍然有效,盡管其影響將小于我原先假設的影響。


查看完整回答
反對 回復 2019-07-24
  • 3 回答
  • 0 關注
  • 410 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號