私はいくつかの JavaScript パフォーマンスの最適化を試していて、興味深いものを見つけました。コードは次のとおりです。
function gObject() {
this.obj = [];
this.LIMIT = 100000;
this.doLoopLocal = function () {
var o = [];
for (var i=0;i<this.LIMIT;i+=1) {
o.push(i);
}
return o;
};
this.doLoopObject = function () {
this.obj = [];
for (var i=0;i<this.LIMIT;i+=1) {
this.obj.push(i);
}
};
};
var g = new gObject();
console.time('Using Local array');
g.doLoopLocal();
console.timeEnd('Using Local array');
console.time('Using Object array');
g.doLoopObject();
console.timeEnd('Using Object array');
実行すると、ローカル配列を使用すると、オブジェクト名前空間で定義された配列を使用するよりも遅いことがログに示されます。その差は大きく、8 ~ 10 倍です。(FF18.0.1)
Using Local array: 16ms
Using Object array: 2ms
スクリーンショット:
関数内でローカルに定義されたオブジェクトを使用する方が高速であると常に想定していましたが、この実験は間違っていることを示しています。なぜこれが起こるのでしょうか?
更新:ローカルの Firefox コンソールでスクリプトを試してみたところ、数値は最初に期待したものでした: ローカル配列を使用すると、オブジェクト配列を使用した場合よりも優れています。したがって、本当の原因は、何らかの理由で数値を歪め、誤った結果を表示する Firebug です。心に留めておくべきこと。