第一章 加载和执行
-
body闭合标签之前,将所有的script标签放到页面底部。这能确保在脚本执行前页面已完成渲染。
-
合并脚本。页面中的script标签越少,加载也就越快,响应也更迅速。无论外链文件还是内嵌脚本都是如此。
-
有多种无阻塞下载Javascript的方法:
1.使用script标签的defer或者asncy属性;
2.使用动态创建的script元素来下载并执行代码;
3.使用XHR对象下载JS代码并注入到页面中。
第二章 数据存取
在js中,数据存储的位置会对代码整体性能产生重大的影响。数据存储共有四种方式:字面量、变量、数组项、对象成员。他们有着各自的性能特点。
-
访问字面量和局部变量的速度最快,相反,访问数组元素和对象成员相对较慢。
-
由于局部变量存在于作用域链的起始位置,因此访问局部变量比访问跨作用域变量更快。变量在作用域链中的位置越深,访问所需时间就越长。由于全局变量总处在作用域链的最末端,因此访问速度也是最慢的。
-
避免使用with语句,因为她会改变执行环境作用域链。同样,try-catch语句中的catch子句也有同样的影响,因此也要哦小心使用。
-
嵌套的对象成员会明显影响性能,尽量少用。
-
属性或方法在原型链的位置越深,访问它的速度就越慢。
-
通常来说,你可以把常用的对象成员,数组元素,跨域变量保存在局部变量中来改善js性能,因为局部变量访问速度更快。
第三章 DOM编程
访问和操作DOM是现代Web应用的重要部分。但每次穿越连接ECMAScript和DOM两个岛屿之间的桥梁,都会被收取“过桥费”。为了减少DOM编程带来的性能损失,请记住以下几点:
-
最小化DOM访问次数,尽可能在JS中处理。
-
如果需要多次访问某个DOM节点,请使用局部变量存储他的引用。
-
小心处理HTML集合,因为它实时联系着底层文档。把集合的长度缓存到一个变量中,并在迭代中使用它。如果需要经常操作集合,建议把它拷贝到一个数组中。
-
如果可能的话,使用速度更快的API,比如querySelectorAll()和firstElementChild。
-
要留意重绘和重排;批量修改样式时,“离线”操作DOM树,使用缓存,并减少访问布局信息的次数。
-
动画中使用绝对定位,使用拖放处理。
-
使用事件委托来减少事件处理器的数量。