« 急に冷えてきた… | トップページ | 【トラブル情報】風柳亭自宅サーバ機能停止のお知らせ »

2006/11/08

JavaScript覚書:IE6で文字列を扱うときの注意

JavaScriptで短い文字列を結合して長い文字列を作る際には、つい
text += "文字列";
のようにしてしまうのですが、これはIE6(及びそのエンジンを使用するブラウザ)だと、時に致命的な速度低下を招く可能性があることに気がつきました。
もしかして常識ですかね?(^^;)
function    stringTest1()
{
    var text = '' ;
    
    for ( var ci=0; ci < 5000; ci++ ) {
        text += ci + ': abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + '<br />\n' ;
    }
    
}   /* end of stringTest1() */
function    stringTest2()
{
    var text = '' ;
    var tmpStrings = new Array() ;
    for ( var ci=0; ci < 5000; ci++ ) {
        tmpStrings[tmpStrings.length] = ci + ': abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + '<br />\n' ;
    }
    text = tmpStrings.join('') ;
    
}   /* end of stringTest2() */
関数stringTest1()とstringTest2()は、共に適当な文字列を多数結合するだけのもので、最終的jな結果(textの内容)は同じになるのですが、これをIE6系で実行すると、実行に要する時間が数十倍違う(Test1>>Test2)、ということに。
実際に試すには→こちらから。
うーん、+=で結合すると、メモリ確保&全コピーがその都度走っているのかなぁ……
【結果のサンプル】
IE6 SP2Sleipnir2.48
IE Engine(*2)
Sleipnir2.48
Gecko Engine
Firefox1.5.0.7Opera9.01
t1(*1)2047ms24265ms
2734ms
146ms224ms78ms
t2(*1)31ms438ms
62ms
109ms94ms68ms
t1-t22016ms23828ms
2672ms
37ms130ms10ms
t1/t26603%5544%
4387%
134%238%115%
(*1)t1はTest1の、t2はTest2の所要時間(3回平均)。
(*2)どうも極端に遅い気がしたので、再起動後に取り直したものを掲載。

« 急に冷えてきた… | トップページ | 【トラブル情報】風柳亭自宅サーバ機能停止のお知らせ »

パソコン・インターネット」カテゴリの記事

覚書」カテゴリの記事

コメント

Firefox2.0で試すと、
T1 200msec 44msec 54msec
T2 72msec 209msec 70msec
となって、T1とT2の差より各々のばらつきの方が大きいので、三回では試行が足りないようです。

| 三回では試行が足りないようです。

まぁ、朝は時間もなかったもので。
主旨は『IE6系で実行すると、実行に要する時間が数十倍違う』ということで、細かいデータについては各自で取得してください(^^;。

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: JavaScript覚書:IE6で文字列を扱うときの注意:

« 急に冷えてきた… | トップページ | 【トラブル情報】風柳亭自宅サーバ機能停止のお知らせ »

戻るリンク追加

カレンダー

2020年3月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

ココログカレンダーPlus(旧2)

検索


    • Web全体 サイト内
    • 蔵書のISBNを入力して下さい
    • はじめる前
      初級者向け
      上級者向け
      ブログ紹介
      結果を表示

コメントリストツリー化

無料ブログはココログ