【读书笔记】高性能javascript编程
本文从99页开始写,因为之前的已经看了。
事件托管
Summary 总结
DOM 访问和操作是现代网页应用中很重要的一部分。但每次你通过桥梁从 ECMAScript岛到达DOM岛时,都会被收取“过桥费” 。为减少DOM编程中的性能损失,请牢记以下几点: |
最小化DOM访问,在JavaScript 端做尽可能多的事情。 |
在反复访问的地方使用局部变量存放 DOM引用. |
小心地处理 HTML 集合,因为他们表现出“存在性” ,总是对底层文档重新查询。将集合的 length 属性缓存到一个变量中,在迭代中使用这个变量。如果经常操作这个集合,可以将集合拷贝到数组中。 |
如果可能的话,使用速度更快的 API,诸如querySelectorAll()和firstElementChild。 |
注意重绘和重排版;批量修改风格,离线操作 DOM树,缓存并减少对布局信息的访问。 |
动画中使用绝对坐标,使用拖放代理。 |
使用事件托管技术最小化事件句柄数量。 |
第四章 Algorithms and Flow Control 算法和流程控制
Summary 总结
正如其他编程语言,代码的写法和算法选用影响 JavaScript 的运行时间。与其他编程语言不同的是,JavaScript 可用资源有限,所以优化技术更为重要。 |
for ,while,do-while 循环的性能特性相似,谁也不比谁更快或更慢。 |
除非你要迭代遍历一个属性未知的对象,否则不要使用 for-in 循环。 |
改善循环性能的最好办法是减少每次迭代中的运算量,并减少循环迭代次数。 |
浏览器的调用栈尺寸限制了递归算法在 JavaScript 中的应用;栈溢出错误导致其他代码也不能正常执行。 |
一般来说,switch 总是比 if-else 更快,但并不总是最好的解决方法。 |
如果你遇到一个栈溢出错误,将方法修改为一个迭代算法或者使用制表法可以避免重复工作。 |
当判断条件较多时,查表法比 if-else 或者switch 更快。 |
运行的代码总量越大,使用这些策略所带来的性能提升就越明显。 |