为啥IE7比Safari慢?
Posted
技术标签:
【中文标题】为啥IE7比Safari慢?【英文标题】:Why is IE7 so slow compared to Safari?为什么IE7比Safari慢? 【发布时间】:2010-11-05 23:19:46 【问题描述】:我有一个大的数据“网格”,需要大约 40 秒才能生成并转储为纯文本。如果我用 html 表格格式(具有固定的 td 宽度)包装文本,则在 IE7 中完全显示需要 200 多秒,而在 Safari 中显示则需要不到一分钟。在任一浏览器中均会在 5 秒内显示小“网格”,因此我认为它与数据量无关。我可以在服务器端做些什么来加快 IE7 的显示速度吗?告诉用户不要再用头撞墙了。
【问题讨论】:
不同的引擎,不同的算法。请注意,NN4 的表格布局算法具有 指数 时间,具体取决于表格的复杂性。如果你能简化你的布局,你只会受益。 【参考方案1】:这些都是很好的建议 - 但我找到了确凿的证据!当 IE 呈现页面时,名为 Mcshield.exe 的进程会接管机器。由于服务器在同一个盒子上,它会减慢页面生成和渲染速度。现在的问题是“为什么 McAfee 喜欢 IE 而不是 Safari?” - 我会研究那个。再次感谢 Stack Overflow!
【讨论】:
我可以确认迈克菲会这样做。禁用 McAfee On-Access Scan 大大加快了 IE7 的速度——在我的例子中,加载一个包含 2000+ 行表的页面需要 30 秒到大约需要 5 秒。谢谢你,罗斯! 我进一步缩小了范围。 McAfee 会检查其中包含 onClick 属性的超链接。我表中的每一行都有一个 onClick,因此 McAfee 正在努力检查所有 2000 多个链接。从我的所有链接中删除 onClick 属性大大减少了加载时间。希望这会有所帮助!【参考方案2】:由于您无论如何都是以编程方式生成此数据,因此您可以尝试使用
标记,该标记将以等宽字体显示文本。这样,您可以自己快速计算单元格的宽度和高度。它看起来不会最漂亮,但它会避免任何布局时间。如果您不想手动执行此操作,并且表格中没有链接,则可以使用 the elinks web browser 将 HTML 呈现为纯文本并将该输出放在
标记中。
elinks -dump ./localfile.html
另外,如果您还没有这样做,您应该确保在服务器端对数据进行 gzip 压缩,这样可以减少传输时间。对于IIS, instructions to enable gzipping can be found here。
对于Apache, instructions to enable mod_gzip can be found here。对于Apache,试试Apache's own documentation on mod_deflate。
【讨论】:
【参考方案3】:设置table-layout的css属性:固定在桌子上。 IE 将不必为添加的每个额外行/列重新计算表大小,它会显着加快速度。
顺便说一句,w3schools link 对此有一些很好的信息。
table-layout 采用以下三个值之一:自动、固定和继承。
自动 是默认设置。浏览器必须先加载整个表格,然后才能计算大小并开始渲染。这取决于浏览器的渲染引擎,从慢到非常慢。
固定。第一行定义列的宽度。因此,浏览器可以在下载内容时呈现内容。因此速度增加。附带说明一下,由于除顶行之外的所有宽度都被忽略,因此您不必向下发送剩余列的宽度数据...这意味着您的页面大小可能会小一些。
继承。基本上,从父母那里得到它的价值。
【讨论】:
在他的问题中,他说他已经固定了 td 宽度。将“固定”放在所有表格标签上是否有帮助?桌子? td? tr?身体?头?等 table-layout 仅适用于表级别。所以定义应该是宽度并将其也放入表格样式中,但是 IE 上的基准仍然很难看。 |
即使是“不到一分钟”的 Safari 也让人难以忍受。无论我有什么慢的地方,我都会放一个进度条和一些关于数据的统计信息。
Kazar 的分页理念可能是可行的方法,或者如 Oscar Reyes 所建议的渐进式加载。
需要这么长时间的数据到底有多少行和多少列?
【讨论】:
61 行,5 列,64k。请注意,生成表可能需要 30 秒(但这是一个不同的问题)。我转储了一个填充的标题以使事情看起来尽快响应,但这只是最终结果在 IE 中需要更长的时间。 1400 行,5 列,1.4 mb 下载。 只是一个想法:你试过不使用桌子吗?看看速度是多少?如果您只是将所有信息作为固定宽度的文本放在 中会发生什么?【参考方案5】:为什么 IE7 比 Safari 慢?
因为它们有不同的 HTML 引擎,工作方式不同,算法不同,等等
我可以在服务器端做些什么来加快 IE7 的显示速度吗?
也许您可以尝试使用Ajax。这样感知速度会好很多。
【讨论】:
“也许你可以尝试使用 Ajax。这样感知速度会好很多。”真的吗?如果页面加载速度很快,我认为我的感知速度不会很高,但随后会花费大约 200 秒(通过 XHR)然后渲染我真正关心的表格。 @Matthew:如果您是认真的,您可以执行以下操作:a) 在服务器中加载数据的子集,这需要 10 秒而不是 200 秒。将这些记录拉到使用 ajax 的客户端,并请求下一个块。重复,直到你全部搞定【参考方案6】:也许对网格进行分页,可能会使它在两种浏览器上都更具可读性和更快?
【讨论】:
【参考方案7】:很抱歉,IE7 只是一个旧浏览器,因此不如 Safari 快...如果升级到 IE8、Firefox 或 Chrome,它们可能会看到一些性能提升...
【讨论】:
年龄与它无关,真的。 Trident 在表格布局方面从未如此出色。这很可能是一种设计折衷……IE 团队认为没有必要针对大得离谱的表进行优化。 我很想知道他们在忙于不优化大表时在优化什么。以上是关于为啥IE7比Safari慢?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 jquery 表单验证不适用于 IE7?它适用于 FF、Opera、Safari 等
为啥我的 Web 应用在 iOS(Chrome 和 Safari)上滚动超级慢,但在所有其他平台上都可以?