大量の画像を処理する必要があります。まず、画像のサイズが50x60より大きいかどうかを確認し、不良画像のカウンターを適切に増やす必要があります。
私が抱えている問題は、InternetExplorer8のn.width
/の速度が非常に遅いことです。n.height
確認n.offsetWidth
しn.clientWidth
ましたが、速度的にはすべて同じです。ただし、この値は、関心のあるタグにn.style.width
常に設定されているとは限らないため、使用できません。<img />
次のコードを検討してください。
Javascript
var Test = {
processImages: function () {
var fS = new Date().getTime();
var minimagew = 50,
minimageh = 60;
var imgs = document.getElementsByTagName('img');
var len = imgs.length,
isBad = 0,
i = len;
while (i--) {
var n = imgs[i];
var imgW = n.width;
var imgH = n.height;
if (imgW < minimagew || imgH < minimageh) {
isBad++;
}
}
var fE = new Date().getTime();
var fD = (fE - fS);
console.info('Processed ' + imgs.length + ' images in '
+ fD + 'ms. ' + isBad + ' were marked as bad.');
}
};
HTML
<img src="http://nsidc.org/images/logo_nasa_42x35.gif" />
[snip 9998 images]
<img src="http://nsidc.org/images/logo_nasa_42x35.gif" />
コードは、10kの画像を解析する次の出力を生成します(3つの異なるCtrl + F5)
- FF:115msで10000枚の画像を処理しました。10000は不良としてマークされました。
- FF:99msで10000枚の画像を処理しました。10000は不良としてマークされました。
- FF:87msで10000枚の画像を処理しました。10000は不良としてマークされました。
- IE8:206ミリ秒で10000枚の画像を処理しました。10000は不良としてマークされました。
- IE8:204msで10000枚の画像を処理しました。10000は不良としてマークされました。
- IE8:208ミリ秒で10000枚の画像を処理しました。10000は不良としてマークされました。
ご覧のとおり、FF 3.6のコードは、IE8で実行されたコードよりも2倍高速です。
問題が実際にブラウザのディメンションプロパティの速度に関連していることを証明するために、:n.width
とn.height
定数を変更すると、次のようになります。
var imgW = 43;
var imgH = 29;
次の結果が得られます。
- FF:38msで10000枚の画像を処理しました。10000は不良としてマークされました。
- FF:34msで10000枚の画像を処理しました。10000は不良としてマークされました。
- FF:33msで10000枚の画像を処理しました。10000は不良としてマークされました。
- IE8:18ミリ秒で10000枚の画像を処理しました。10000は不良としてマークされました。
- IE8:22msで10000枚の画像を処理しました。10000は不良としてマークされました。
- IE8:17ミリ秒で10000枚の画像を処理しました。10000は不良としてマークされました。
それは正しい!<img />
ディメンションチェックをスキップすると( node.width
/node.clientWidth
などを呼び出す)、IE8は実際にはFirefoxよりもパフォーマンスが優れています。
IEが画像のサイズをチェックするのになぜこれほど時間がかかるのか、そして最終的にこのチェックのパフォーマンスを改善する方法について何か考えがありますか?