この記事は株式会社シンプルウェイ Advent Calendar 2025の1日目の記事です。
地味ですが、普段のプログラミングで意識しておきたいパフォーマンスを考慮したコーディングを紹介したいと思います。
ベンチマークはJavaScriptで取っていますが、概ねどの言語にも通用するのではないかと思います。
何度も読み出すプロパティや配列の値は一度変数に代入したほうが処理は速いでしょう。
例えば、100個の要素がある配列を用意します。
var arr = [];
for (var i = 0; i < 100; i++) {
arr.push(i);
}
個々の値に対してなにか処理をしたいとき、シンプルに書くと
for (var i = 0; i < arr.length; i++) {
var a = arr[i]
}
のようになりますが、これだと arr.length をループのたびに読み出して、 i がその値以上になっていないかをチェックすることになります。
arr.length を一度変数に代入して
var l = arr.length;
for (var i = 0; i < l; i++) {
var a = arr[i]
}
のように書くと速くなります。
とはいったものの、ベンチマークサイトで測ってもほんーーの少しの差しかありません。理論的にはループ回数が多くなればなるほど高速化に貢献するはずです。
同様に、配列の読み出しについても、何度も同じ値を読み出すのであれば、一度変数に代入したほうが速くなるでしょう。
var arr = [[[[1]]]];
var a = 0;
for (var i = 0; i < 100; i++) {
a += arr[0][0][0][0];
}
よりも
var arr = [[[[1]]]];
var v = arr[0][0][0][0];
var a = 0;
for (var i = 0; i < 100; i++) {
a += v;
}
のほうが速いです。理論的には配列のネストが深くなればなるほど高速化に貢献するはずです。なお、これもベンチマークサイトで測っても少しの差しかありません。