2017-06-04 89 views
0

我对下面哪一个更好的做法感到困惑,为什么?首先,我们在全球初始化图书馆,在第二种情况下,它在一个函数内完成。Nodejs - 库的全局或本地初始化

代码1个

var twilio_client = require('twilio')(
    process.env.TWILIO_ACCOUNT_SID, 
    process.env.TWILIO_AUTH_TOKEN 
); 

function_sendSMS(from, to){ 
    twilio_client.messages.create({ 
    from: from, 
    to: to, 
    body: "You just sent an SMS from Node.js using Twilio!" 
    }, function(err, message) { 
    if(err) { 
     console.error(err.message); 
    } 
    }); 
} 

代码2

function_sendSMS(from, to){ 

    var twilio_client = require('twilio')(
    process.env.TWILIO_ACCOUNT_SID, 
    process.env.TWILIO_AUTH_TOKEN 
    ); 

    twilio_client.messages.create({ 
    from: from, 
    to: to, 
    body: "You just sent an SMS from Node.js using Twilio!" 
    }, function(err, message) { 
    if(err) { 
     console.error(err.message); 
    } 
    }); 
} 

回答

0

文体这真是见仁见智。

但是从性能的角度来看,第一个代码示例会更有效率,因为引用父范围中的变量比通过任何节点的模块机器更便宜,即使在模块被缓存后第一个require()。我还应该指出,在节点v8.x中,加载高速缓存模块时的性能有显着提高(对于非高速缓存模块require()也改善了以及)。截至撰写本文时,您可以看到this graph的区别。

+0

是第一种情况,该模块将永远加载,所以不会消耗更多的内存/资源? –

+0

它没有使用任何额外的内存,因为它是*节点的模块缓存中已有的同一个对象的引用。 – mscdex

+0

好的。谢谢。得到它了。 –