Guideline-编写有效率的javascript代码

分类: NODEJS 发布于:

Trust yourself, not the VM。

  1. 对象的初始化顺序
    function Point(x, y) {
        this.x = x;
        this.y = y;
    }

    var p1 = new Point(11,12);
    var p1 = new Point(33,34);

nodejs中的隐藏类的生成方式

Checklist:

  • 成员变量写在构造函数内

  • 不要在其他地方任意添加成员变量或者方法

Why:

每当有新变量添加的时候, 编译器会生成一个新的隐藏类。

Google I/O 2012

  1. 整数变量的使用
var a = 1;
...
a = 1.5;
...
a = 'abcd';

Checklist:

  • a变量的重新赋值会引起 object a在内存中的被重新 allocation
  1. 数组的用法

Checklist:

  • 使用从0开始的连续下标
a[5000] = 1;

上面表达式将促使编译器把变量a转化为一个字典类型

  • 不要删除数组中的元素,特别是numberic类型
var data = [1,2,3,4];

delete data[2];

上面delete表达式会促使编译器把data转化为dictionary。

  • 不要使用未初始化的数组元素
var a = [];

for(var i = 0; i < 10; i ++) {
    a[0] = i; //   
}
var a = [];

a[0] = 0; // ⬲⬲ 至少快2倍

for(var i = 0; i < 10; i ++) {
    a[0] = i; //   
}
  • 注意数组元素的类型转化
// First step
var a = new array();

a[0] = 77;
a[1] = 88;

integer in array

// Second step
a[2] = 0.5;

integer in array

// Third step
a[3] = true

bad thing

更好的方法:

//一次性初始化
var data = [1,2,0.5, true];
  1. 方法的使用

充分利用IC(inline cache)

Checklist:

  • 避免多态
function add(x, y) {
    return x + y;
}

add(1, 2) // 生成单态隐藏类 monomorphic
add("a","b") // 多态 polymorphic

总结

没有规矩的javascript代码就像是一碗缠在一起面条,剪不断,理还乱。
不要让prototype嵌套的太深。

参考

Google I/O 2012 - Breaking the JavaScript Speed Limit with V8