美文网首页WebWeb前端之路程序员
Nodejs代码规范和API性能优化方案

Nodejs代码规范和API性能优化方案

作者: e042cbe4da21 | 来源:发表于2017-03-17 00:13 被阅读213次

    1、增加eslint规范

    在团队协作中,为避免低级 Bug、产出风格统一的代码,会预先制定编码规范。使用 Lint 工具和代码风格检测工具,则可以辅助编码规范执行,有效控制代码质量。

    使用eslint不仅仅可以统一代码规范,它的很多规则同时考虑了javascript语言的隐藏缺点以及一些被广泛认同的性能规范,因此使用eslint也可以同时提升代码的性能。
    可参考使用npm包eslint-config-fornode

    2、避免使用同步代码

    Node.js的一个显著特征是:它从上到下的设计和实现都是为了实现异步,一个同步调用可能将导致性能从每秒上千次的请求降至只有几十个。

    不幸的是,我们代码总会有发生同步/阻塞的调用。

    3、统一异步编程风格

    代码中实现异步编程的代码包含了promise、callback、generator、async/await三种风格,为了增加代码的可读性统一进行封装使用,例如使用generator和yield风格进行异步编程,或者使用async/await。

    4、代码保持小且轻

    缩减不必须需要的模块,直接用标准的V8 JavaScript函数替代实现,性能会得到显著的提高。
    用更简单更高效的方法实现相同的功能。(说起来容易做起来最难的一步)

    5、定义局部变量

    JavaScript引擎在作用域链中搜索的深度越大,那么操作也就会消耗更多的时间。引擎首先从 this 开始查找局部变量,然后是函数参数、本地定义的变量,最后遍历所有的全局变量。

    因为局部变量在这条链的起端,所以查找局部变量总是比查找全局变量要块。所以当你想要不止一次地使用一个全局变量的时候,你应该将它定义成局部变量。

    (es6最小作用域为块级)

    6、优化循环

    根据循环逻辑判断使用倒循环还是正循环,而不是一味的使用正循环。
    考虑使用do...while(后测试循环)、while(前测试循环)、map、reduce、filter等代替for循环。(map、reduce、filter可实现函数式编程,链式代码更加易读)
    简化终止条件,使用continue,break控制减少循环开销。
    当循环次数是确定的,消除循环并使用多次函数调用往往会更快。
    避免双重或更多重循环。

    7、避免 for-in 循环(和基于函数的迭代)

    这背后的逻辑非常直接:要遍历一个集合内的元素,你可以使用诸如for循环、或者do-while循环来替代for-in循环,for-in循环可能需要遍历额外的数组项(会遍历原型链)。

    8、使用switch和三目运算符代替if

    将条件分支,按可能性顺序从高到低排列:可以减少解释器对条件的探测次数

    9、精简变量声明

    同一种数值声明,同类别数据声明应该用一条语句声明,不同变量用“,”隔开,增加代码的可读性并且将变量代码分类,减少出错概率。

    10、数组虑重

    双重循环,时间复杂度为O(n2)。

    排序后遍历,这种方法的时间复杂度为O(n),但是还要考虑排序的消耗。

    Hash的方法方法时间复杂度为O(n),是应用最为广泛的去重方法。

    11、数组、对象深拷贝实现和优化

    数组深拷贝
    var a = [1,2,3,4,5];

    var b = Array.from(a);//方法1 ES6

    var b = a.slice(0);//方法2

    var b = a.concat([]);//方法3

    var b = JSON.parse(JSON.stringify(array));//方法4

    注意1:方法1、2、3只适合数组成员为非引用类型的情况,如果数组成员为引用类型,这些方法拷贝的引用类型成员依然为浅拷贝

    注意2:方法4可以完美深拷贝数组,但该方法也并不是没有缺点,在此不详细描述。

    对象深拷贝 使用Object.create实现 Object.create实现:
    if (!Object.create) {

    Object.create = function (o) {
    
    function F() {}  //定义了一个隐式的构造函数
    
    F.prototype = o;
    
    return new F();  //其实还是通过new来实现的
    
    };
    

    }

    相关文章

      网友评论

        本文标题:Nodejs代码规范和API性能优化方案

        本文链接:https://www.haomeiwen.com/subject/pdmsnttx.html