2010-02-26 89 views
3

作为一名Web开发人员,我注意到我创建的任何东西在所有浏览器中都绝对优秀,但始终始终如此总是在Internet Explorer中存在速度问题。请注意我指的是速度,因为我总是注意它在所有浏览器中显示和工作。为Internet Explorer优化

是否有任何地方,或者没有人有Internet Explorer的良好编程技巧?我的意思是如何做事情,因此它或多或少地针对Internet Explorer进行了优化。

我的意思是我最近的例子是,我从数据库返回JSON数据(通过AJAX),然后构建页面的结果。来自服务器的响应很少,并且它在aaaaall浏览器中加载instantaneoulsy,但在Internet Explorer中需要5-10秒,具体取决于操作系统和版本。

我迷失了方言,我只是想知道我能做些什么。

例子: http://msdn.microsoft.com/en-us/library/ms533019(VS.85).aspx http://www.quirksmode.org/dom/innerhtml.html http://blog.dynatrace.com/2009/12/12/understanding-internet-explorer-rendering-behaviour/

-theo

+2

嗯,我建议你在IE中预览你的设计,然后一旦在IE中工作,它很容易得到它在Firefox或任何工作.. – ant 2010-02-26 14:03:24

+0

我也注意到,当我用IE浏览Gmail和Facebook,我仍然有类似的问题。 – 2010-02-26 14:03:28

+0

很好的评论,但我的问题是它不起作用,但它始终在IE中工作缓慢。 – 2010-02-26 14:06:54

回答

7

简短回答:不要在IE中使用像document.createElement(“div”)这样的DOM方法来创建标记。改为使用字符串构建您的HTML。

如果您必须使用DOM方法,请确保不要多次向页面添加元素。也就是说,创建一个主容器,添加所有内容,然后作为最后一步调用document.body.appendChild(“div”)(其中“div”是您的主容器)。这将最大限度地减少将继续的重新渲染量。

+1

另外,不要将您的字符串作为innerHTML多次添加到页面。 – Robusto 2010-02-26 14:12:28

+0

谢谢你关于主题 – 2010-02-26 14:12:40

+2

+1 - createElement令人惊讶的慢 – 2010-02-26 15:12:04

3

你可以使用dynaTrace AJAX Edition来分析你的网站在IE中看到什么是减缓下来。

+0

刚刚发现,thnx – 2010-02-26 14:13:03

1

IE中的Javascript性能目前是所有流行浏览器中最差的。建议使用IE作为您的性能基准,并有充分的依据。我会补充说,使用公认的js/ajax库(jQuery,YUI等)将确保大量针对浏览器的优化已经完成并经过严格测试。

如果您在自己的Web应用程序中执行了很多自定义j,并且只是寻找一些最佳实践,我可以推荐几个网站:jspatterns.com,IE + JavaScript Performance Recommendations。这是插入Douglas Crockford'sJavascript: The Good Parts作为一般js禅的好机会。

+0

你好,我使用mootools并已经拥有这本书。我会再次开始阅读它,谢谢。将删除链接 – 2010-02-26 14:24:58

1

任何DOM操作总是很昂贵(添加元素,删除元素)。所以你可以通过在页面上隐藏隐藏的元素并在其中添加可见性来最小化DOM操作。

我认为this是值得一看的东西。

0

当在IE 6中构建一个页面时,我遇到了类似的问题,最后做了纯串连接以使性能可以接受。我第一次尝试使用jquery(当时的1.2.6)来构建元素并添加属性,但事实证明它太慢了。手动构建html作为字符串,然后在元素上设置innerHtml属性以显示表格要快得多。关于IE6的jQuery 1.4+要快得多,所以这可能不再适用。

在for循环中使用中间字符串似乎也有性能提升,即不要在一个大字符串上继续使用“+ =”。在for循环中有一个表格行的字符串,并将其附加到每个循环的大字符串中。这可能是一些尝试。

我已经遇到了与IE6有关的性能方面的两个问题: - 切换css类在IE6中速度较慢,最好设置一个元素的style属性中的背景颜色。 - 如果您在表中的tr或td标签上进行鼠标悬停,则在除IE以外的所有其他浏览器中都可以正常工作。您必须在表级处理mouseover和mouseout事件,并找到作为事件源的tr或td标记,并在此时执行任何操作。