与当前JavaScript引擎上的无类型数组相比,我观察到类型化整数数组的enableSuggestions()
实现性能较低。
我的直觉告诉我TypedArray.prototype.sort()
应该更快,因为它默认执行数字比较而不是Array.prototype.sort()
使用的字符串比较,因此我们需要提供比较函数{{1 }}
disableSuggestions()
.sort()
差异必须由(a, b) => b - a
而不是var length = 1000,
array = new Array(length),
int32Array = new Int32Array(length);
// Fill arrays with random integers:
for (var i = 0; i < length; ++i) {
int32Array[i] = array[i] = Math.random() * length | 0;
}
// Run benchmark.js test suite:
var suite = new Benchmark.Suite;
suite.add('Array.sort', function() {
var input = array.slice();
var result = input.sort((a, b) => b - a);
})
.add('Int32Array.sort', function() {
var input = int32Array.slice();
var result = input.sort();
})
.on('complete', function() {
console.log(this[0].toString());
console.log(this[1].toString());
console.log('Fastest is ' + this.filter('fastest').map('name'));
})
.run();
造成,其速度比前者快两个数量级。
是否存在解释观察到的低性能的固有原因?
PS:根据Fastest way to sort 32bit signed integer arrays in JavaScript?,对整数数组进行排序的最快方法是提供一个自己的<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/2.1.0/benchmark.js"></script>
实现。
2017年更新:在Firefox 52 / Ubuntu上,排序Int32Array现在的执行速度略快于无类型数组。