簡単な質問:深いものより浅いものを使うメリットはありますか? コードを書くときには、深いオブジェクトを使用する傾向があるので、理解して分類するのは簡単です。しかし、私はこのカスタムが私のコードを遅くしているのだろうかと思っています。深いオブジェクトがJavaScriptで遅いですか?もしそうならどれくらい
私はテストをしましたが、正しく行っているかどうかはわかりません。
//building necessary objects
var a = {};
var b;
b = a;
for (var i = 0; i < 100; i++) {
b["a"] = {};
b = b["a"];
}
var c = {};
//objects used
//a.a.a. ..(101 "a"s).. .a === {}
//c === {}
//1st test: shallow
var d;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
d = c;
d = null;
}
var end = performance.now();
console.log('Shallow: ' + (end - start));
//2nd test: deeper
var e;
var start = performance.now();
for (var i = 0; i < 1000000000; i++) {
e = a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a;
e = null;
}
var end = performance.now();
console.log('Deeper: ' + (end - start));
結果(MS):
shallow 3229 3304 3246 3253 3277
deep 3375 3343 3247 3193 3248
深いオブジェクトの試験時間は遅いではなく、時には速く浅いものより。 結果にもかかわらず、私は彼らが同じ速度であると結論付けるのに十分な自信がありません。 2人の間に違いはありますか?
確かにあなたは冗談ですか? 3秒間で10億回の操作が行われ、おそらく±100 ops程度のくすぶりがありますか?工作最悪の場合でも?これは、時期尚早の最適化です!実装とシステムの差異は、両者のパフォーマンスの小さな変化を大幅に上回ります。 – RobG
この種のスピードテストは決して実用的ではありません。実際のコードでこのような方法で使用されることのない人工的なコードスニペットをテストすると、jsエンジンのオプティマイザが実際のコードでこの例では完全に異なって動作する可能性が高くなります。 –
ネストされたアクセスは一般的には遅くなりますが、プロパティのアクセスが高速な 'O(1)'オペレーションであるため、その差は実際には小さすぎます。お使いのコンピュータ上の他の要因やプロセスが、これらのわずかな時間差に貢献する可能性があることに注意してください。 –