關於Javascript迴圈體變數聲明與初始化的效率問題

來源:互聯網
上載者:User

標籤:zed   初始化   chromium   initial   1.2   logs   0.11   console   等等   

針對迴圈體變數聲明與初始化的效率問題,將執行的簡單測試代碼如下:

function test(n) {    console.time(‘Internally initialized‘);    for (var i = 0; i < n; i++) {        let a = i;    }    console.timeEnd(‘Internally initialized‘);    console.time(‘Externally initialized‘);    let a = 0;    for (var i = 0; i < n; i++) {        a = i;    }    console.timeEnd(‘Externally initialized‘);    console.time(‘Externally declared‘);    let b;    for (var i = 0; i < n; i++) {        b = i;    }    console.timeEnd(‘Externally declared‘);}

 

Chromium 58.0.3029.110下的測試結果,沒有考慮更多的測試條件、環境因素影響等等:

test(1000000000)Script snippet #2:6 Internally initialized: 2894.2080078125msScript snippet #2:13 Externally initialized: 2867.099853515625msScript snippet #2:20 Externally declared: 2895.260986328125msundefinedtest(100000000)Script snippet #2:6 Internally initialized: 355.6640625msScript snippet #2:13 Externally initialized: 296.761962890625msScript snippet #2:20 Externally declared: 296.949951171875msundefinedtest(10000000)Script snippet #2:6 Internally initialized: 68.672119140625msScript snippet #2:13 Externally initialized: 43.97705078125msScript snippet #2:20 Externally declared: 35.217041015625msundefinedtest(1000000)Script snippet #2:6 Internally initialized: 12.23388671875msScript snippet #2:13 Externally initialized: 10.057861328125msScript snippet #2:20 Externally declared: 8.0849609375msundefinedtest(100000)Script snippet #2:6 Internally initialized: 0.94873046875msScript snippet #2:13 Externally initialized: 1.088134765625msScript snippet #2:20 Externally declared: 0.931884765625msundefinedtest(10000)Script snippet #2:6 Internally initialized: 0.1181640625msScript snippet #2:13 Externally initialized: 0.176025390625msScript snippet #2:20 Externally declared: 0.145751953125msundefinedtest(1000)Script snippet #2:6 Internally initialized: 0.044921875msScript snippet #2:13 Externally initialized: 0.04296875msScript snippet #2:20 Externally declared: 0.046875msundefinedtest(100)Script snippet #2:6 Internally initialized: 0.025146484375msScript snippet #2:13 Externally initialized: 0.033935546875msScript snippet #2:20 Externally declared: 0.02783203125msundefinedtest(10)Script snippet #2:6 Internally initialized: 0.024169921875msScript snippet #2:13 Externally initialized: 0.024169921875msScript snippet #2:20 Externally declared: 0.02197265625msundefinedtest(1)Script snippet #2:6 Internally initialized: 0.02490234375msScript snippet #2:13 Externally initialized: 0.032958984375msScript snippet #2:20 Externally declared: 0.030029296875msundefined

 

Firefox 54.0下的測試結果,沒有考慮更多的測試條件、環境因素影響等等:

test(1000000000)Internally initialized: 計時器開始Internally initialized: 768.81msExternally initialized: 計時器開始Externally initialized: 697.8msExternally declared: 計時器開始Externally declared: 704.16msundefinedtest(100000000)Internally initialized: 計時器開始Internally initialized: 131.84msExternally initialized: 計時器開始Externally initialized: 84.42msExternally declared: 計時器開始Externally declared: 70.98msundefinedtest(10000000)Internally initialized: 計時器開始Internally initialized: 19.92msExternally initialized: 計時器開始Externally initialized: 17.09msExternally declared: 計時器開始Externally declared: 15.33msundefinedtest(1000000)Internally initialized: 計時器開始Internally initialized: 3.46msExternally initialized: 計時器開始Externally initialized: 3.06msExternally declared: 計時器開始Externally declared: 2.75msundefinedtest(100000)Internally initialized: 計時器開始Internally initialized: 1.49msExternally initialized: 計時器開始Externally initialized: 1.11msExternally declared: 計時器開始Externally declared: 2.14msundefinedtest(10000)Internally initialized: 計時器開始Internally initialized: 1.03msExternally initialized: 計時器開始Externally initialized: 1.11msExternally declared: 計時器開始Externally declared: 1.11msundefinedtest(1000)Internally initialized: 計時器開始Internally initialized: 1.25msExternally initialized: 計時器開始Externally initialized: 0.84msExternally declared: 計時器開始Externally declared: 0.82msundefinedtest(100)Internally initialized: 計時器開始Internally initialized: 1.29msExternally initialized: 計時器開始Externally initialized: 1.02msExternally declared: 計時器開始Externally declared: 1.21msundefinedtest(10)Internally initialized: 計時器開始Internally initialized: 1.29msExternally initialized: 計時器開始Externally initialized: 1.1msExternally declared: 計時器開始Externally declared: 1.64msundefinedtest(1)Internally initialized: 計時器開始Internally initialized: 1.15msExternally initialized: 計時器開始Externally initialized: 0.97msExternally declared: 計時器開始Externally declared: 0.89msundefined

 

 三種方式無明顯差別。從一般性邏輯來分析,聲明和初始化是兩種操作,其中任何一種操作發生的次數越多耗時越多;但變數聲明時就及時初始化是個好的編程習慣,未初始化的變數就直接參与運算常常會得到意想不到的結果,如(undefined) + 1 = NaN、(undefined) + ‘string‘ = "undefinedstring",當然很多程式設計語言對於未初始化的變數以預設類型值初始化,而Javascript預設值為undefined。另外,這裡不探討儲存效能和記憶體回收機制。

 

關於Javascript迴圈體變數聲明與初始化的效率問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.