私のログ関数はそれらを使用し、頻繁に呼び出されるので、私も興味がありました。
テストしました
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);
}
優れたbenchmarkjs.comを使用したnode.js v0.10.18:
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() を避ける