JS

【读书笔记】高性能 JavaScript

作者: shaokang 时间: July 14, 2020字数:677

正文

第一章 加载和执行

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 代码但不立即执行。

数据存取

字面量和局部变量的访问速度快于数组项和对象成员的访问速度