2017年3月12日日曜日

オブジェクト作成と関数呼び出しの時間を比較

オブジェクト型の引数を扱う関数をコールする際、あらかじめ用意しておいたオブジェクトの一部だけ変更して渡すのが速いか、オブジェクトを都度リメイクしても変わらないのか比較してみました。

リメイクするオブジェクトの規模にもよりますが、今回の条件ではリメイクすると一回あたり50~80%ぐらい余分に時間がかかります。

検証用ソース
<job>
<script>
gt=function(){return (new Date()).getTime()}
loop試験 = function(回数, fun){
for(var s=gt(),i=0;i<回数;i++){ fun() }
return gt() - s
}
一つだけ変更=function(obj, prop, v){obj[prop]=v;return obj}
obj={a:1, b:2}
試験回数 = 10000000
a = loop試験(試験回数, function(){c=一つだけ変更(obj, 'a', 3)})
b = loop試験(試験回数, function(){c={a:3,b:2}})
WScript.Echo([試験回数,a,b,(b-a)/試験回数*1000+'マイクロ秒',b/a].join('\n'))
</script>
</job>


実行結果
win7


win10



一つだけと言わずいくつか変更できるようにすると、リメイクの方が速いようです。





そもそも速度を気にするなら普通に代入すれば、その方が断然速いようです。




0 件のコメント:

コメントを投稿