使用 Numbers 一致

如果引擎能夠正確預測你正在為你的值使用特定的小型別,則它將能夠優化執行的程式碼。

在這個例子中,我們將使用這個簡單的函式來對陣列的元素進行求和並輸出它所花費的時間:

// summing properties
var sum = (function(arr){
        var start = process.hrtime();
        var sum = 0;
        for (var i=0; i<arr.length; i++) {
                sum += arr[i];
        }
        var diffSum = process.hrtime(start);
        console.log(`Summing took ${diffSum[0] * 1e9 + diffSum[1]} nanoseconds`);
        return sum;
})(arr);

讓我們做一個陣列並總結元素:

var     N = 12345,
        arr = [];
for (var i=0; i<N; i++) arr[i] = Math.random();

結果:

Summing took 384416 nanoseconds

現在,讓我們做同樣但只有整數:

var     N = 12345,
        arr = [];
for (var i=0; i<N; i++) arr[i] = Math.round(1000*Math.random());

結果:

Summing took 180520 nanoseconds

求和整數佔用了一半的時間

引擎不使用與 JavaScript 相同的型別。你可能知道,JavaScript 中的所有數字都是 IEEE754 雙精度浮點數,沒有特定的整數表示形式。但是引擎,當它們可以預測你只使用整數時,可以使用更緊湊和更快速的表示,例如,短整數。

這種優化對於計算或資料密集型應用程式尤其重要。