根据V8引擎的工作原理给出的优化JavaScript代码的技巧
在V8引擎里5个优化代码的技巧
-
对象属性的顺序: 在实例化你的对象属性的时候一定要使用相同的顺序,这样隐藏类和随后的优化代码才能共享。
-
动态属性: 在对象实例化之后再添加属性会强制使得隐藏类变化,并且会减慢为旧隐藏类所优化的代码的执行。所以,要在对象的构造函数中完成所有属性的分配。
-
方法: 重复执行相同的方法会运行的比不同的方法只执行一次要快(因为内联缓存)。
-
数组: 避免使用keys不是递增的数字的稀疏数组,这种key值不是递增数字的稀疏数组其实是一个
hash表
。在这种数组中每一个元素的获取都需要昂贵的代价。同时,要避免提前申请大数组。最好的做法是随着你的需要慢慢的增大数组。最后,不要删除数组中的元素,因为这会使得keys变得稀疏。 -
标记值(Tagged values): V8用32位来表示对象和数字。它使用一位来区分它是对象(flag = 1)还是一个整型(flag = 0),也被叫做小整型(SMI),因为它只有31位。然后,如果一个数值大于31位,V8将会对其进行box操作,然后将其转换成double型,并且创建一个新的对象来装这个数。所以为了避免代价很高的box操作,尽量使用31位的有符号数。