Javascript IE 8怪癖与标准检索偏视/偏网宽度

Javascript IE 8怪癖与标准检索偏视/偏网宽度,javascript,internet-explorer,html-parsing,offsetwidth,Javascript,Internet Explorer,Html Parsing,Offsetwidth,我正在将我的应用程序转换为使用XHTML严格模式(它以前没有DOCTYPE)。然而,我注意到,当获得离视/离网宽度时,性能明显下降。这在具有大量DOM元素的页面上是非常明显的,比如一个表有1列800行,单元格只有一段文本。访问该表中的每个子元素以获取其偏移量维度要比IE以怪癖模式呈现页面时慢得多。 为什么会这样?有人知道帮助IE计算这些偏移值的技巧吗?我建议强制IE以标准模式而不是怪癖模式呈现页面。 这可以通过在html文档的头部添加元标记或设置web服务器以添加与X-UA兼容的标题来实现 &l

我正在将我的应用程序转换为使用XHTML严格模式(它以前没有DOCTYPE)。然而,我注意到,当获得离视/离网宽度时,性能明显下降。这在具有大量DOM元素的页面上是非常明显的,比如一个表有1列800行,单元格只有一段文本。访问该表中的每个子元素以获取其偏移量维度要比IE以怪癖模式呈现页面时慢得多。
为什么会这样?有人知道帮助IE计算这些偏移值的技巧吗?

我建议强制IE以标准模式而不是怪癖模式呈现页面。 这可以通过在html文档的头部添加元标记或设置web服务器以添加与X-UA兼容的标题来实现

<meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" />


另外,使用jquery、prototype、yui等内置javascript框架,其中大多数框架已经解决了不同渲染引擎上的问题。

@bobince:我认为问题在于回流。我的JavaScript中的逻辑试图找出子元素在绝对布局容器中是否相互重叠(因为它们获得了我无法预测的动态内容),然后调整父元素的css维度和需要向下移动的同级元素的css。改变CSS维度触发回流,这发生在我的迭代过程中,这个场景在IE8标准中比在非常大的表中的IE8奇特要慢得多。我知道在执行此类操作时,我应该隐藏或使用documentFragment,但是因为我需要移动东西,然后查看新的偏移尺寸,我得到了不准确的值。

您有任何示例来证明这一点吗?我同意框架非常有帮助。我确实在最近的一个项目中注意到IE8仍然报告错误的
$()。outerHeight()
。这让我发疯了!似乎IE在调整元素大小时试图抓住高度,所以我必须实现一些同步。这只是IE8上的一个问题,所以需要一些时间来解决。我的问题是无法在标准模式下渲染。问题是在“我的页面”以标准模式呈现后的性能。实际上,我将问题隔离到一行代码中。有问题的行是:
element.absoluteHeight=element.offsetHeight我错误地认为问题所在的位置是偏移尺寸,因为我读了太多关于浏览器回流的内容。然而,一旦我把这一行分解,就会发现在DOM元素上设置属性是quirks和IE8标准模式之间存在巨大性能差异的地方,后者的性能更差。@Paul:你能回答这个问题吗?我可以重现这一点:在IE8标准模式下,大多数操作都要快得多,包括读取偏移维度。但是,expandos速度很慢。
FF=3
不存在,而且
OtherUA=4
没有任何意义。它们只是作为潜在的例子包含在微软的
X-UA-Compatible
提案中。其他浏览器实现者拒绝使用这个头/元,因为他们没有内置的操作系统问题,需要保持完全的错误兼容性:只有IE才会注意<代码>IE=8
也意味着当IE9发布时,您将获得更少的改进;考虑<代码> IE=Edg/<代码>,而不是总是使用最新版本。