现在,他们声称JQuery在IE中确定DOM准备的方式实际上会严重损害页面性能,我们应该不惜一切代价避免它.我知道JQuery使用doScrollCheck()方法和documentElement上的1ms递归setTimeout blast做了什么,我发现它们可能有一个有效的声明.
他们说每个$(文件).ready()块的性能都会成倍地受到伤害.
我的问题是,他们是否有任何统计数据来验证这一说法,如果是这样,我将如何实现一个IE友好的解决方案,而无需为我的需求重新编写JQuery源代码.
解决方法
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万以下.