使用 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 双精度浮点数,没有特定的整数表示形式。但是引擎,当它们可以预测你只使用整数时,可以使用更紧凑和更快速的表示,例如,短整数。

这种优化对于计算或数据密集型应用程序尤其重要。