-
在构造函数中初始化所有对象成员,不要在构造函数外创建新成员(这会导致 V8 创建新的隐藏类)
-
尽量使用 31 位浮点整数,如果超出这个范围 V8 需要修改存储格式。(至于为什么是 31 位,因为 V8 占用一位当做标志位,用来标识这个数字是否超过 31 位)
-
数组索引从 0 开始,不要直接就用 25000 这样的索引
-
不要提前初始化大数组(比如超过 64000 个元素),尽量动态分配
-
不要删除数组中的元素,尤其是存储数值的数组,这样会产生稀疏数组,让元素从快速模式切换到字典模式(键值对)
-
不要使用数组中未初始化或者已经被删除的元素,会产生不必要的查找操作
-
对于小数组来说,尽量使用数组字面量进行赋值(比如
a = [1,2,3]
),如果一个一个元素赋值,类型不同的时候可能导致V8隐藏类多次切换,降低性能 -
对于小数组来说,在使用数组之前分配正确的大小
-
不要在数值数组中存储非数值的值(对象)
-
使用函数时候尽量执行同质操作(比如每次都传入两个整数或者每次都传入两个浮点数),避免多态操作(传入的参数类型和之前的不同),后者会导致隐藏类改变
-
try catch
无法被V8优化,解决方法是把try catch
内部的代码写成函数,函数可以被优化 -
在函数被优化之后一定要避免隐藏类改变
网友评论