正文
第一章 加载和执行
JS 阻塞特性
浏览器执行 Js 代码时,不能同时做其他任何事情;多数浏览器使用单一进程处理界面 UI 和 Js 脚本,同一时刻只能做一件事。 当浏览器遇到 script 标签时此时会停止处理页面,先执行 js 代码,然后在继续解析和渲染页面。同样使用 src 属性加载 js 也一样,需要先下载外链文件后解析并执行。这个过程页面渲染和用户交互完全被阻塞。
脚本位置
虽然很多浏览器允许并行下载 js 文件,但 js 下载过程仍然会阻塞其他资源的下载,如图片。经理脚本下载互不影响,但页面仍然需要等待所有 js 代码下载并执行完成后才能继续。由于脚本会阻塞页面其他资源的下载,因此推荐将所有的 <script>
标签尽可能放到 <body>
标签的底部,尽量减少对整个页面下载的影响
组织脚本
减少 script 标签数有助于总体的性能,考虑到 HTTP 带来的额外开销,因此下载一个单个 100KB 的文件会比下载 4 个 25KB 的文件更快。
延迟脚本
H4 为 script 标签定义了一个扩展属性:defer。带有该属性的脚本可以放在任何位置。但该属性在某些浏览器下会被直接忽略。
动态脚本
通过 JS 代码创建脚本,保证文件的下载过程和执行过程不会阻塞页面的其他进程。通常来讲吧 script 标签放在 head 标签里会比放在 body 里更保险。
XHR 脚本注入
创建 XHR 来获取 js 文件,这种方式的优点是,可以下载 js 代码但不立即执行。
数据存取
字面量和局部变量的访问速度快于数组项和对象成员的访问速度