jquery – $(document).ready()检查是否会降低IE的速度?

我一直在与一家名为 Catchpoint的公司合作,以解决客户端代码指标中的一些不一致问题.它们会触发一些事件来测量页面加载过程中的里程碑.他们为我们提供的指标是在IE8中.

现在,他们声称JQuery在IE中确定DOM准备的方式实际上会严重损害页面性能,我们应该不惜一切代价避免它.我知道JQuery使用doScrollCheck()方法和documentElement上的1ms递归setTimeout blast做了什么,我发现它们可能有一个有效的声明.

他们说每个$(文件).ready()块的性能都会成倍地受到伤害.

我的问题是,他们是否有任何统计数据来验证这一说法,如果是这样,我将如何实现一个IE友好的解决方案,而无需为我的需求重新编写JQuery源代码.

解决方法

根据JSperf的说法,多个DOM就绪函数确实会减慢所有浏览器中页面的速度,足以让我重构我自己的很多代码以适应这个新发现.当然IE浏览器速度慢得多,但是测试并不像我希望的那样信息丰富,因为即使没有DOM就绪检查它也会慢得多.要做的就是尽可能减少这些DOM就绪函数的使用.

Chrome中的结果:

>单$(文件).ready():734,811 ops / sec
>多个$(文档).ready()的[4块]:151,989 ops / sec
>没有$(文件).ready():208,965,555 ops / sec

IE8中的结果:

>单$(文件).ready():26,349 ops / sec
>多个$(文档).ready()的[4块]:5,971次/秒
> No $(document).ready():5,000,159 ops / sec

分析这些指标:

>在Chrome中,没有DOM准备检查占用DOM准备的0.35%的时间
检查
>在IE中,没有DOM就绪检查占用DOM的0.53%的时间
准备好检查

仅数据就告诉我们doScrollCheck()函数可以大大降低性能.

话虽如此:

> Chrome的DOM就绪检查比IE快27.98倍
>在Chrome上,进行4次DOM就绪检查的速度比IE快25.45倍
>缺少DOM就绪检查在Chrome上比IE快41.79倍

从表面上看,这看起来毫无希望 – 但是如果你考虑一下,没有DOM就绪功能的IE页面执行超过500万次操作/秒,Chrome上的单个DOM就绪功能执行不到一百万.这告诉我你是否设法告诉JQuery使用更友好的doScrollCheck()函数,比如检查documentElement是否每100毫秒可滚动而不是每1毫秒你可能会看到页面加载时间与chrome更具竞争力.

这个基准测试真正告诉我的是,即使是DOMContentLoaded检查也很慢 – 在Chrome上没有任何借口可以从2.09亿操作/秒降到100万以下.

http://jsperf.com/docready/3

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: <span id=&quot...
jQuery 添加水印 <script src="../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...