我一直在与一家名为Catchpoint的公司合作,以解决客户端代码指标中的一些不一致问题。它们会触发一些事件来测量页面加载过程中的里程碑。他们为我们提供的指标是在IE8中。
现在,他们声称JQuery在IE中确定DOM准备的方式实际上彻底会损害页面性能,我们应该不惜一切代价避免它。我知道JQuery使用doScrollCheck()
方法和setTimeout
上的1ms递归documentElement
爆炸做了什么,我发现它们可能有一个有效的声明。
他们表示每个$(document).ready()
阻止对性能造成指数伤害。
我的问题是,他们是否有任何统计数据来验证这一说法,如果是这样,我将如何在不重新编写JQuery源代码的情况下实现IE友好的解决方案。
答案 0 :(得分:3)
根据JSperf的说法,多个DOM就绪函数确实会在所有浏览器中减慢页面,足以让我重构我自己的很多代码以适应这个新发现。当然IE浏览器速度慢得多,但是测试并不像我希望的那样信息丰富,因为即使没有DOM就绪检查它也会慢得多。要做的就是尽可能减少这些DOM就绪函数的使用。
Chrome中的结果:
IE8中的结果:
仅此数据告诉我们doScrollCheck()
函数会在很大程度上阻止性能。
这就是说:
从表面上看,这看起来毫无希望 - 但是如果你考虑一下,没有DOM就绪功能的IE页面执行超过500万次操作/秒,Chrome上的单个DOM就绪功能执行不到一百万。这告诉我你是否设法告诉JQuery使用更友好的doScrollCheck()
函数,比如检查documentElement
是否每100毫秒可滚动而不是每1毫秒你可能会看到页面加载时间与chrome更具竞争力。
这个基准测试真正告诉我的是,即使DOMContentLoaded
检查也很慢 - 在Chrome上没有理由从2.09亿操作/秒到不到100万。
答案 1 :(得分:0)
这是一个脚本,用于测量$(document).ready()
触发和身体末端代码执行之间的时间(这是您可以操作DOM的最早时间)。您可以在任何您想要的浏览器中自行运行它。该页面位于:http://jsfiddle.net/jfriend00/dLx4L/。
为了方便,长寿和易于共享,我在jsFiddle中完成了这个,但如果您创建了一个实现相同技术的独立网页(没有像jsFiddle中那样涉及其他框架),您可以进行更准确的测试。 。在任何情况下,你都应该能够在这里了解如何衡量这一点并为其添加实数。
答案 2 :(得分:0)
我的2c:
我看到很多网页开发人员在页面中放了一千万个javascript代码......最后一个是文档就绪。
a)请记住,在一个完美的世界中,没有用户将在加载后立即与网页进行交互(显示);和
b)在完美的世界中,用户很可能会在进行任何交互之前(甚至向上和向下滚动)查看整个页面。考虑到完美的情景,你应该在<脚本类型...>< /脚本>是页面的SPLASH所必需的最小值,当然还有文档就绪。
这就是魔术:在一个单独的SCRIPT.JS文件中输入所有内容并在文档就绪中加载getScript:
$(document).ready( function () {
...
...
$.getScript('your-scripts-path/your-script-file-name.js');
});
请记住,$ .getScript当然可以成为其中一个dom-ready调用中的回调。而且,它也可以有回调。
祝你好运!