68

私はRequire.JSを使い始めたばかりですが、それを使用する適切なケースと、そのような場合の正しい使用方法については少しわかりません。

これが私が現在Require.JSで設定している方法です。私には2つの関数がfunctionA()ありfunctionB()ます。これらの機能は両方とも、functionC()正しく機能するために追加の機能を必要とします。

必要な場合、つまりfunctionA()またはfunctionB()が呼び出される場合にのみ、functionC()をロードしたいと思います。だから私は次のファイルを持っています:

functionC.js

functionC(){
  //do stuff
}

functionA.js

functionA(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionA() stuff
  });
}

functionB.js

functionB(){  
  define(['functionC'],function(){
    //functionC() is loaded because it is listed as a dependency, so we can proceed
    //do some functionB() stuff
  });
}

それで、これは正しく設定されていますか?また、同じページでfunctionA()とfunctionB()の両方を呼び出すことになった場合、両方ともfunctionC.jsファイルをロードするため、余分な作業が行われていますか?もしそうなら、それは問題ですか?もしそうなら、最初にfunctionC.jsがまだロードされているかどうかを確認し、ロードされていない場合にのみロードするように設定する方法はありますか?最後に、これはRequire.JSの適切な使用法ですか?

4

2 に答える 2

47

define()モジュールを定義するためにのみ使用してください。コードの一部を動的にロードする必要がある上記の例では、以下を使用するrequire()方が適切です。

functionA.js

functionA(){
  require(['functionC'],function(functionC){
    //use funcC in here to call functionC
  });
}

いくつかのメモ:

  • require([])は非同期であるため、 の呼び出し元がfunctionAその関数からの戻り値を期待している場合、エラーが発生する可能性があります。が作業を完了したfunctionAときに呼び出されるコールバックを受け入れるのが最善です。functionA
  • 上記のコードは;require()への呼び出しごとに呼び出します。functionAただし、最初の呼び出しの後は load にペナルティはなく、functionC.js一度だけ読み込まれます。最初require()に呼び出されたときはロードされますfunctionC.jsが、残りの時間は、RequireJS は既にロードされていることを認識しているため、再度function(functionC){}要求することなく関数を呼び出しますfunctionC.js
于 2011-02-07T18:12:29.860 に答える
22

RequireJS と JavaScript のモジュール性に関する詳細については、こちらを参照してください: RequireJS による JavaScript のモジュール性 (スパゲッティ コードからラビオリ コードまで)

于 2012-11-15T08:30:05.747 に答える