var start = new Date().getTime(); var template = ""; for(var i = 0; i template = ""; var end = new Date().getTime(); document.getElementById("one").innerHTML = template; alert("所要時間:" (終了 - 開始) "ミリ秒" ); } //効率的な function func2(){ var start = new Date().getTime(); var array = []; i = 0; i array[i] = " } var end = 新しい日付().getTime(); document.getElementById("one").innerHTML = array.join(""); alert("所要時間:" (終了 - 開始) "ミリ秒"); 🎜 >}
//非効率な function func1(){ var divs = document.getElementsByTagName("div"); var start = new Date().getTime(); for(var i = 0; i // "効率が低い" } var end = new Date().getTime(); alert("所要時間:" (end - start) "ミリ秒"); //効率的な function func2(){ var divs = document.getElementsByTagName("div"); var start = new Date().getTime(); , len = divs.length; //"高効率" var end = new Date().getTime();取得済み:" (終了 - 開始) "ミリ秒"); }
上の表からわかるように、IE6.0 では違いが非常に明白ですが、Firefox と Chrome ではほとんど違いがありません。IE6.0 でこれが発生する理由は主に for ループです。実行の際、最初のケースは毎回長さを計算しますが、2 番目のケースは最初に長さを計算して変数に保存するため、実行効率が高くなります。そのため、for ループを使用するとき、特に必要な場合は、長さを計算するには、変数への保存を開始する必要があります。しかし、配列を操作して配列の長さを取得するだけであれば、それほど明らかな違いはありません。次の例を見てみましょう:
コードをコピー
コードは次のとおりです:var arr2 = [];
for(var i = 0; i arr2[i] = "
" i " } //非効率的🎜> function func1(){ var start = new Date().getTime(); for(var i = 0; i //"効率が悪い" } var end = new Date().getTime(); alert("所要時間:" (end - start) "ミリ秒"); } //非常に高い効率的な 関数 func2(){ var start = new Date().getTime(); for(var i = 0, len = arr2.length; i / /"高効率" } var end = new Date().getTime(); alert("所要時間:" (end - start) "ミリ秒");
上記の表からわかるように、配列だけであれば、2 つの書き込み方法はほぼ同じであることがわかります。実際、ループを 10 万回まで増やしても、その差はわずかです。ミリ秒なので、配列の場合はすべて同じだと思います。 for ループの最適化については、-=1 を使用するとか、大から小へループするなどの意見も多くありますが、これらの最適化は完全に反映されないことが多いと思います。実際の状況では、すべて一言で言えば、コンピュータレベルでは小さな変更にすぎませんが、コードの可読性が大幅に低下するため、損失する価値はまったくありません。
//非効率な function func1(){ var obj = document.getElementById("demo"); var start = new Date().getTime(); for(var i = 0; i <100; i ){ obj.innerHTML = str i; } var end = new Date().getTime();時間" (終了 - 開始) "ミリ秒"); } //効率が高い function func2(){ var obj = document.getElementById("demo"); var start = new Date().getTime(); var arr = []; for(var i = 0; i < 100; i ){ arr[i] = str i; 🎜>} obj.innerHTML = arr.join(""); var end = new Date().getTime(); alert("所要時間" (終了 - 開始) " ミリ秒" ); }
var sum, num1 = 1, num2 = 2; 🎜>function func1(){ var start = new Date().getTime(); for(var i = 0; i var func = new Function(" sum =num1;num1 =num2;num2 ;"); func(); } var end = new Date().getTime(); alert("time" (end - start) " ミリ秒"); } function func2(){ var start = new Date().getTime(); for(var i = 0; i < 10000; i ){ num1 =num2; } var end().getTime(); " (end - start) " ミリ秒"); }
最初のケースでは二重解釈に new Function を使用し、2 番目のケースでは二重解釈を避けています。さまざまなブラウザでのパフォーマンス:
for(var i = 0; i eval(" =num1; num1 =num2;num2 ;"); } var end = new Date().getTime(); alert("Time" (end - start) " ミリ秒"); } function func2(){ var start = new Date().getTime(); for(var i = 0; i sum =num1 ; num1 =num2 ; } var end = new Date().getTime(); alert("Time" (end - start) "ミリ秒"); }