如果我将所有 JavaScript 放在页面底部,是不是需要 $(document).ready? [复制]

Posted

技术标签:

【中文标题】如果我将所有 JavaScript 放在页面底部,是不是需要 $(document).ready? [复制]【英文标题】:Is $(document).ready necessary if I put all my JavaScript at the bottom of the page? [duplicate]如果我将所有 JavaScript 放在页面底部,是否需要 $(document).ready? [复制] 【发布时间】:2011-10-16 04:24:57 【问题描述】:

可能重复:jquery - Is $(document).ready necessary?

将 JS 放在 </body> 标记上方可以改善感知加载时间,因为浏览器不必在开始渲染页面之前读取和解析所有 JS。

但它还有另一个好处,不是吗?我们不需要将 JS 包裹在 $(document).ready(function() ... ) 中,因为所有元素都已经在 J​​S 之上,因此可以进行操作了。

    $(document).ready 是否需要确保 DOM 已完全加载并准备好进行操作?

    执行时间有区别吗?一种方法会比另一种更快吗?

    我们能否在页面底部也链接我们的外部 JS 文件 (<script src="..." />),还是需要在页眉中?

【问题讨论】:

【参考方案1】:

这个 SO 回答说 NO

stackoveflow question

$(document).ready 是为了确保在调用函数时完整的 DOM 可用。 任何不依赖于 DOM 的函数和事件都不需要放入 ready 事件中。

另外 - 为了提高页面渲染速度 - 以非阻塞方式动态加载 javascript 文件:http://berklee.github.com/nbl/ 或 https://github.com/rgrove/lazyload/

这种技术有点像这样:

 var script = document.createElement("script");
 script.type = "text/javascript";
 script.src = "file1.js";
 document.getElementsByTagName("head")[0].appendChild(script);

这个新元素加载源文件 file1.js。将元素添加到页面后,文件就会立即开始下载。这种技术的重要之处在于,无论从哪里开始下载,文件的下载和执行都不会阻塞其他页面进程。您甚至可以将此代码放在文档的标题中,而不会影响页面的其余部分(除了用于下载文件的一个 HTTP 连接)。

这本书:Nickolas Zakas 的“高性能 JavaScript”有很多关于 JavaScript 性能优化的有趣信息。

【讨论】:

我还是不知道为什么动态加载js是非阻塞的,反之则阻塞?

以上是关于如果我将所有 JavaScript 放在页面底部,是不是需要 $(document).ready? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

前端工程师手册css会阻塞页面dom解析吗?javascript呢?

页脚总是在底部不显示:固定

javascript脚本异步加载的几种方式

为啥将 JavaScript 放在页面的页脚中?

访问报告:页面底部的可变高度文本

《高性能Javascript》读书笔记-1