我也很好奇,因为我的日志函数使用它们并且被调用了很多。
我测试过
function toArray(obj, start)
{
var arr=[];
for (var i=start||0, j=0, len=obj.length; i<len; ++i)
arr[j++]=obj[i];
return arr;
}
function toArrayPush(obj, start)
{
var arr=[];
for (var i=start||0, len=obj.length; i<len; ++i)
arr.push(obj[i]);
return arr;
}
function testArgToArrayPush(level)
{
var args=toArrayPush(arguments, 1);
}
function testArgToArray(level)
{
var args=toArray(arguments, 1);
}
function testArgTypescript(level)
{
var args = [];
for (var _i = 0; _i < (arguments.length - 1); _i++)
args[_i] = arguments[_i + 1];
}
function testArgSlice(level)
{
var args=Array.prototype.slice.call(arguments, 1);
}
在 node.js v0.10.18 上使用优秀的 benchmarkjs.com:
testArgToArrayPush x 4,505,312 ops/sec ±0.55% (64 runs sampled)
testArgToArray x 2,961,857 ops/sec ±2.37% (93 runs sampled)
testArgTypescript x 3,879,242 ops/sec ±1.15% (96 runs sampled)
testArgSlice x 1,060,084 ops/sec ±0.52% (95 runs sampled)
Fastest is testArgToArrayPush
这意味着
- Typescript 版本足以应付大多数情况
- 如果你有热点,你可以考虑使用 toArrayPush()
- 避免 Array.prototype.slice()