我正在尝试设置绝对定位项目的高度以匹配其容器元素的高度。问题是这些元素有数百个。标题中的标准代码在 chrome 中运行得很好,但在 IE 中却拖得很慢。我应该如何缓解这个问题?
//Too SLOW in IE
var starttime = new Date().getTime();
$("#grdSchedule > tbody > tr").each(function(i) {
thisRow = $(this);
thisRow.children(".stickyCol").height(thisRow.height());
//thisRow.children().slice(0, 1).css('height', thisRow.css('height'));
});
var taskTime = (new Date().getTime() - starttime) / 1000;
alert("cell height stretch: " + taskTime);
似乎仅仅设置高度并不会减慢多少速度,但是从其他东西的 .height() 设置高度确实会导致 IE 窒息。
我尝试了 .css() ,但有一点提升,但不多。
这是一个需要摆弄的小提琴:远离小提琴! http://jsfiddle.net/jumpdart/hnZxn/
使用 IE9,我从 1.6 秒缩短到 0.031 秒。使用 Chrome,我将时间从 0.302 秒缩短到了 0.018 秒。
使用 detach() 的工作示例 http://jsfiddle.net/hnZxn/15/(最快,但如果您延迟表的重新插入,即如果您允许页面在 DOM 中没有表的情况下重新呈现,则会导致布局问题)。
使用普通 DocumentFragment 克隆的工作示例 http://jsfiddle.net/hnZxn/16/
关键是clone将表作为 DocumentFragment (或使用以下命令暂时将其从 DOM 中删除)detach()
并操纵克隆表格的单元格高度(即,在表格成为 DOM 的一部分之前)。然后,在完成所有高度计算后,用克隆表格替换原始表格。
The .height()
计算并没有减慢你的速度,而是你在一个大循环中遍历和操作 DOM。在三大浏览器中,Internet Explorer 的 DOM 操作速度最慢。
为了进一步阅读,不久前我整理了一些DOM 插入基准 http://jsperf.com/render-in-memory-vs-direct-dom-insertion/7这可以很好地衡量浏览器与 DOM 的相对性能。 John Resig 还撰写了有关使用文档片段和 DOM 操作的文章:http://ejohn.org/blog/dom-documentfragments/ http://ejohn.org/blog/dom-documentfragments/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)