似乎大部分性能影响实际上来自于此:
$(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);