JavaScript覚書:IE6で文字列を扱うときの注意
JavaScriptで短い文字列を結合して長い文字列を作る際には、つい
text += "文字列";のようにしてしまうのですが、これはIE6(及びそのエンジンを使用するブラウザ)だと、時に致命的な速度低下を招く可能性があることに気がつきました。
もしかして常識ですかね?(^^;)
function stringTest1()
{
var text = '' ;
for ( var ci=0; ci < 5000; ci++ ) {
text += ci + ': abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + '<br />\n' ;
}
} /* end of 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)、ということに。{
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() */
実際に試すには→こちらから。
うーん、+=で結合すると、メモリ確保&全コピーがその都度走っているのかなぁ……
【結果のサンプル】
IE6 SP2 | Sleipnir2.48 IE Engine(*2) | Sleipnir2.48 Gecko Engine | Firefox1.5.0.7 | Opera9.01 | |
---|---|---|---|---|---|
t1(*1) | 2047ms | 2734ms | 146ms | 224ms | 78ms |
t2(*1) | 31ms | 62ms | 109ms | 94ms | 68ms |
t1-t2 | 2016ms | 2672ms | 37ms | 130ms | 10ms |
t1/t2 | 6603% | 4387% | 134% | 238% | 115% |
(*1)t1はTest1の、t2はTest2の所要時間(3回平均)。
(*2)どうも極端に遅い気がしたので、再起動後に取り直したものを掲載。
(*2)どうも極端に遅い気がしたので、再起動後に取り直したものを掲載。
« 急に冷えてきた… | トップページ | 【トラブル情報】風柳亭自宅サーバ機能停止のお知らせ »
「パソコン・インターネット」カテゴリの記事
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
- BIGLOBE光ネクスト(大阪)の通信速度問題 - プロバイダ選びは難しい……(2015.08.13)
- BOOK☆WALKER さんに関して最近経験した不安と不満(2015.08.10)
- 『#鳥獣戯画制作キット』が楽しい(2015.07.01)
「覚書」カテゴリの記事
- 鍛高譚 ~ カレイにまつわる物語(2018.05.25)
- ココログをTwitterカードに対応させてみる(2016.11.23)
- 神使の兎 ~宇治神社にて~(2016.07.10)
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
Firefox2.0で試すと、
T1 200msec 44msec 54msec
T2 72msec 209msec 70msec
となって、T1とT2の差より各々のばらつきの方が大きいので、三回では試行が足りないようです。
投稿: おーの | 2006/11/08 23:57
| 三回では試行が足りないようです。
まぁ、朝は時間もなかったもので。
主旨は『IE6系で実行すると、実行に要する時間が数十倍違う』ということで、細かいデータについては各自で取得してください(^^;。
投稿: 風柳>おーの さん | 2006/11/09 00:15