IE6のエンジンでSleipnrが重い件
Sleipnir(たぶんIE6のエンジン)で
あるJavaScriptを使ったページが重いから修正してって
依頼を受けた。
本音はIE8入れれば早くなるんじゃねぇのと思うのだが
そんなこともいえずに実装しました
以前のソース for (k = 0; k < cols; k++) { html += '<h3>' + year + '<\/h3>'; html += '<table id="revTbl' + l + '" class="revTbl">'; html += '<thead>'; html += '<tr>'; html += '<th><span>公開日<\/span><\/th>'; html += '<th><span>名前(R URL)<\/span><\/th>'; html += '<th><span>コード<\/span><\/th>'; html += '<th><span>URL<\/span><\/th>'; html += '<th><span>備考<\/span><\/th>'; html += '<\/tr>'; html += '<\/thead>'; html += '<tbody>'; } document.write(html);
抜粋して書くとhtmlをfor文で回しながら+=を使って
代入していくスクリプトなのだがie系(特にie6,7)では
この+=という代入行為が重いらしい。
そこで一度すべて配列にpushして最後にjoinする方法で実装
for (k = 0; k < cols; k++) { joinData.push('<h3>' + year + '<\/h3>'); joinData.push('<table id="revTbl' + l + '" class="revTbl">'); joinData.push('<thead>'); joinData.push('<tr>'); joinData.push('<th><span>公開日<\/span><\/th>'); joinData.push('<th><span>名前(R URL)<\/span><\/th>'); joinData.push('<th><span>コード<\/span><\/th>'); joinData.push('<th><span>URL<\/span><\/th>'); joinData.push('<th><span>備考<\/span><\/th>'); joinData.push('<\/tr>'); joinData.push('<\/thead>'); joinData.push('<tbody>'); } document.write(joinData.join(''));
これだと今まで10秒くらいかかってたものが
8秒くらいになったらしい(ビミョー)
まだ満足してないようなのでもう少し
高速化を図らないと駄目そうです
ついでに配列をJSONで実装してみたけど、
速度が変わらない+配列の入力項目が増えるといわれて
却下されました><