- 对象属性尽量按续书写:始终以相同的顺序实例化对象属性,这样可以共享隐藏的类,并且优化随后属性赋值的代码。
- 动态属性: 在实例化之后向对象添加属性将更改强制隐藏类,并且减慢先前隐藏类优化过的任何方法。所以,我们应该尽量在构造函数中分配所有对象的属性。
- 方法: 因为 V8 引擎内联缓存(inline cacheing 的存在)重复执行相同方法的代码将比仅执行一次许多不同方法的代码运行得更快。
-
数组:
- 数组的 key 尽量不要修改,修改之后,数组的每个对象 key 就是 hash table,这样的数组元素在访问的时候开销相对交大。
- 数组使用的过程尽量让其自己增长,而不是一开始就预先分配大型数组。
- 不到必要情况,不要删除数组中的元素,这样的操作会使数组中 key 变成非自增的情况。
-
被标记的值:
- V8 使用 32bit 来表示一个对象或者数字,它使用一个位来标志是一个对象(flag = 1)或是一个 SMall Integer(SMI)的整数(flag = 0)。
- 如果一个数字值大于 31 位,V8 将会对数据进行装箱操作,将其变成双精度并且创建一个存放数值的对象。所以在代码书写过程中,尽量使用 31bit 的数字,避免 JavaScript 进行昂贵的装箱操作。
参考链接:
How JavaScript works: inside the V8 engine + 5 tips on how to write optimized code
网友评论