偉い人のコードを読んでいると、オブジェクトのプロパティにアクセスする際に生存期間が短いところでもわざわざ変数を定義して参照しているケースがあったので、これはもしや速くなるのかということで試してみました。
リーダブルコード的には説明変数という意味もあるのかもしれませんが。
実行はchrome v.72です。
5回のプロパティへのアクセスを含むiterationを1000回回して経過時間を測りました。
それぞれ10回のtryの平均時間をconsole.logで出力します。
使ったコード
var domo = {hoge: 'unu'};
var count;
var times;
var start;
var results;
results = [];
for (times = 0; times < 10; times ++) {
start = performance.now();
for (count = 0; count < 1000; count++) {
var hm = domo.hoge;
hm + hm;
hm + hm;
hm + hm;
hm + hm;
hm + hm;
}
results.push(performance.now() - start);
}
console.log("var", results.reduce((a,c) => a + c, 0) / results.length);
results = [];
for (times = 0; times < 10; times ++) {
start = performance.now();
for (count = 0; count < 1000; count++) {
domo.hoge + domo.hoge;
domo.hoge + domo.hoge;
domo.hoge + domo.hoge;
domo.hoge + domo.hoge;
domo.hoge + domo.hoge;
}
results.push(performance.now() - start);
}
console.log("prop", results.reduce((a,c) => a + c, 0) / results.length);
結果。一応早いぽい!
var 0.18199999998323618
prop 0.3185000000055879
var 0.18700000001117587
prop 0.24299999994691462
var 0.18299999996088445
prop 0.24899999992921948
念の為、プロパティへのアクセスを1行まで減らしてみましたが、これでも早いぽいです。
var 0.07450000003445893
prop 0.11049999992828816
var 0.06550000002607703
prop 0.11349999995436519
var 0.06550000002607703
prop 0.11349999995436519