2017-06-04 2 views
0

私は以下のどれがより良いプラクティスであるのか、なぜそれほど混乱していますか?最初はライブラリをグローバルに初期化し、2番目の場合は関数内でライブラリを初期化します。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

ありがとう。とった。 –

関連する問題