まず、処理の処理速度の比較を、次の3つの処理に対して行った。
function arrayFill(num,str){
var rtn=[];
var i;
for(i=0;i<num;i++){
rtn.push(str);
}
return rtn;
}
function arrayFill(num,str){
var rtn=[];
var i;
for(i=0;i<num;i++){
rtn[i]=str;
}
return rtn;
}
function arrayFill(num,str){
var rtn=new Array(num);
var i;
for(i=0;i<num;i++){
rtn[i]=str;
}
return rtn;
}
//処理回数が多い
var d=new Date();
for(var j=0;j<10000;j++){
arrayFill(10,"1234567890");
}
(new Date())-d;
//要素数が多い
var d=new Date();
for(var j=0;j<10;j++){
arrayFill(10000,"1234567890");
}
(new Date())-d;
//要素数と文字数が多い
//(文字数のみ増やしても早すぎて測定できないため要素数を増やした)
var d=new Date();
for(var j=0;j<10;j++){
arrayFill(10000,"12345678901234567890...");//実際には10000文字
}
(new Date())-d;
process1 test2 => 181ms
process1 test3 => 182ms
process2 test1 => 141ms
process2 test2 => 83ms
process2 test3 => 83ms
process3 test1 => 113ms
process3 test2 => 61ms
process3 test3 => 60ms
//(native codeで実行するので処理速度が速くなると期待)
function arrayFill(num,str){
return (num = Number(num)) > 1
? Array(num + 1).join(str).split(RegExp('(?=(?:[\\s\\S]{'+str.length +'})+$)'))
: [str];
}
function arrayFill(num,str){
return num==0?[]:[str].concat(arguments.callee(num-1,str));
}
process4 test2'(10回-500個-10) => 7050ms
process4 test3'(10回-100個-100) => 1532ms
process5 test1 => 2455ms
process5 test2 => エラー(too much recursion)
process5 test3 => エラー(too much recursion)