JavaScript , Java , DOS , HTML(CSS) , JSP , SQL , VB , VBScript , ・・・etc などの覚書
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
処理速度(1)に続く第2弾
1)new Array より [](Arrayリテラル)
絶対値を求める場合、Mathクラスのabsメソッドを呼ぶよりも三項演算子で解決したほうが高速です。1万回の試行で約18msの高速化!
数字文字列から数値を取得する方法はいくつかありますが、数字のみで構成される文字列であればプラス演算子で解決するのが高速です。parseInt呼び出しと比較した場合、1万回の試行で約80msの高速化!
素直にMath.floorを利用したほうが高速です。1万回の試行で約50msの差が出ます。
for(var i=0;i<loop;i++)Math.floor(i); // 約74ms
for(var i=0;i<loop;i++)parseInt(i,10); // 約125ms
5)documentのアクセスはローカル変数に
for(var i=0;i<loop;i++)document; // 約11ms
var doc = document;
for(var i=0;i<loop;i++)doc; // 約4ms
6)domオブジェクトのプロパティアクセスに注意しろ!
for(var i=0;i<loop;i++)div.offsetWidth; // 約127ms
var ow = div.offsetWidth;
for(var i=0;i<loop;i++)ow; // 約5ms
7)try~catch~句は遅い
ry~catch~句が現れると、スクリプト実行に若干のオーバーヘッドが発生します。ループ内では注意が必要で、ループ全体をtry~catch~で囲んだほうがオーバーヘッドが少なくなるようです。
for(var i=0;i<loop;i++)i; // 約4.3ms
for(var i=0;i<loop;i++)try{i}catch(e){}; // 約5.8ms
try{for(var i=0;i<loop;i++)i;}catch(e){}; // 約4.9ms
8)真偽値評価はbooleanで
if文の評価にオブジェクトを書けば null or undefined でfalse扱いとなりますが、booleanで評価したほうが若干高速となるようです。
1)new Array より [](Arrayリテラル)
for(var i=0;i<loop;i++)[]; // 約88ms for(var i=0;i<loop;i++)new Array; // 約133ms2)Math.absよりも三項演算子
絶対値を求める場合、Mathクラスのabsメソッドを呼ぶよりも三項演算子で解決したほうが高速です。1万回の試行で約18msの高速化!
function abs(){ var a = 100; return a>0?a:-a; } for(var i=0;i<loop;i++)abs(); // 約50ms function mathAbs(){ var a = 100; return Math.abs(a); } for(var i=0;i<loop;i++)mathAbs(); // 約68ms3)単純な数字文字列から数値の変換はプラス単項演算子で
数字文字列から数値を取得する方法はいくつかありますが、数字のみで構成される文字列であればプラス演算子で解決するのが高速です。parseInt呼び出しと比較した場合、1万回の試行で約80msの高速化!
for(var i=0;i<loop;i++)+"0"; // 約26ms for(var i=0;i<loop;i++)parseInt("0"); // 約106ms4)小数点切捨てにparseIntを利用しない
素直にMath.floorを利用したほうが高速です。1万回の試行で約50msの差が出ます。
for(var i=0;i<loop;i++)Math.floor(i); // 約74ms
for(var i=0;i<loop;i++)parseInt(i,10); // 約125ms
5)documentのアクセスはローカル変数に
for(var i=0;i<loop;i++)document; // 約11ms
var doc = document;
for(var i=0;i<loop;i++)doc; // 約4ms
6)domオブジェクトのプロパティアクセスに注意しろ!
for(var i=0;i<loop;i++)div.offsetWidth; // 約127ms
var ow = div.offsetWidth;
for(var i=0;i<loop;i++)ow; // 約5ms
7)try~catch~句は遅い
ry~catch~句が現れると、スクリプト実行に若干のオーバーヘッドが発生します。ループ内では注意が必要で、ループ全体をtry~catch~で囲んだほうがオーバーヘッドが少なくなるようです。
for(var i=0;i<loop;i++)i; // 約4.3ms
for(var i=0;i<loop;i++)try{i}catch(e){}; // 約5.8ms
try{for(var i=0;i<loop;i++)i;}catch(e){}; // 約4.9ms
8)真偽値評価はbooleanで
if文の評価にオブジェクトを書けば null or undefined でfalse扱いとなりますが、booleanで評価したほうが若干高速となるようです。
for(var i=0;i<loop;i++)if(true)i; // 約5.3ms var o={}; for(var i=0;i<loop;i++)if(o)i; // 約7.5ms
PR