在我更改所有代码之前,我只想验证我是否需要这样做。
我在 ready() 函数中有几个内联 js 和 jquery 函数:
$(document).ready(function(){ do_something(); ...
其中许多函数依赖于包含在外部 js 文档中的其他函数。它们还使用在外部样式表中定义的类。
现在我刚刚更改了我的外部 js 和 css 的加载,使其被延迟(如 Google https://developers.google.com/speed/docs/best-practices/payload?hl=en#DeferLoadingJS推荐的那样):
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
这样页面在开始加载 JS 之前就完全呈现,包括所有图像。
这工作正常。但是,我想知道为什么以及是否总是会。$(document).ready() 不是在 onLoad 之前执行的吗?在执行 $(document).ready 时,我不会冒险没有定义必要的功能吗?
那么,我是否需要将每个 $(document).ready 更改为 $(document).load()?或者,至少其中一些?但是首先执行哪个 onLoad() 呢?加载外部js(在标题中定义)还是内联的?通过更改准备加载,我会失去什么?例如,当用户单击元素时,我是否会冒着事件未附加到元素的风险?
顺便说一句,jquery api 没有被推迟,因为当我去执行其他代码时这会导致问题。