使用V8引擎的要点

  • 在构造函数中初始化所有对象成员,不要在构造函数外创建新成员(这会导致 V8 创建新的隐藏类)

  • 尽量使用 31 位浮点整数,如果超出这个范围 V8 需要修改存储格式。(至于为什么是 31 位,因为 V8 占用一位当做标志位,用来标识这个数字是否超过 31 位)

  • 数组索引从 0 开始,不要直接就用 25000 这样的索引

  • 不要提前初始化大数组(比如超过 64000 个元素),尽量动态分配

  • 不要删除数组中的元素,尤其是存储数值的数组,这样会产生稀疏数组,让元素从快速模式切换到字典模式(键值对)

  • 不要使用数组中未初始化或者已经被删除的元素,会产生不必要的查找操作

  • 对于小数组来说,尽量使用数组字面量进行赋值(比如 a = [1,2,3]),如果一个一个元素赋值,类型不同的时候可能导致V8隐藏类多次切换,降低性能

  • 对于小数组来说,在使用数组之前分配正确的大小

  • 不要在数值数组中存储非数值的值(对象)

  • 使用函数时候尽量执行同质操作(比如每次都传入两个整数或者每次都传入两个浮点数),避免多态操作(传入的参数类型和之前的不同),后者会导致隐藏类改变

  • try catch 无法被V8优化,解决方法是把 try catch 内部的代码写成函数,函数可以被优化

  • 在函数被优化之后一定要避免隐藏类改变

推荐阅读更多精彩内容