パフォーマンスヒットの大部分は実際にはこれから来ているようです:
$(this).next()。hide();
最初は、jqueryが要素間のスペースによって作成された余分なテキストノードを処理する方法が原因で、パフォーマンスが低下する可能性があると思ったので、次のことを試しました。
this.nextSibling.nextSibling.style.display ='none';
これは実際には問題を解決しなかったので、この多くの要素にスタイルを設定するのは非常に遅いようです。これを回避するには、デフォルトのスタイルを最も一般的なケースと予想されるものに設定してから、他のケースにのみ反応することを検討してください。投稿したフィドルの例では、次のようになります。
CSS:
.Icons {
display: none;
}
新しいJS:
$('.Row .Cell .Text').each(function (index, item) {
if (this.scrollWidth > $(this).parent().width())
$(this).next().show();
});
補遺:これらすべての要素にクラスを追加する方が少し速いので、これを行うことができますhttp://jsfiddle.net/XuhaT/1/:
CSS:
#vTable {
width:800px;
}
.Icon {
display: none;
}
.visible.Icon {
display: block;
}
JS:
$("#countOfItems").html($('#vTable .Row ').length);
var startDate = new Date();
$('.Row .Cell .Text ').each(function (index, item) {
if (this.scrollWidth > $(this).parent().width()) $(this).next().addClass('visible');
});
var endDate = new Date();
$("#claculationTime").html(endDate - startDate);