0

requireJS を正しく動作させるのに苦労しています。ページは正常に動作していますが、間違った方法でやっていると思います。

たとえば、ページ xzyでは、ページの最後に次の JavaScript を追加しています (JS は今のところページにとどまる必要があるため、外部 js ファイルは使用できません)。

<script type="text/javascript" language="javascript">
  //<![CDATA[
  (function () {
    require([
      'async!http://maps.google.com/maps/api/js?v=3&sensor=false',
      'maps/jquery.ui.map.full.min.js',
      'maps/jquery.ui.map.extensions.min'
      ], function() {

        // ... do stuff with Google Maps

      }
    );
  }());
//]]>
</script>

これを行うgoogle.mapと、$.().gmapメソッドがグローバルに利用可能になりますが、これはおそらくグローバルに利用可能であってはなりません。

質問:
これを requireJS モジュールに変換する必要がありますか? なんで?

もしそうなら、モジュールは他のページでも利用できますか、それとも123 ページで「再定義」するだけで、依存ファイルは既にキャッシュされていますか?

最後に、require 呼び出し内のコードを module.methods に変換する必要がありますmodule_name.method_name(pass_some_parameters)か?

4

1 に答える 1

2

JSを見るだけです:

http://maps.google.com/maps/api/js?v=3&sensor=false

window.googleグローバルであることがわかります。Google が AMD バージョンをリリースしない限り、これについてできることはあまりありません。

モジュールを作成する必要があるかどうかに関する決定は、まず JS コードの読みやすさ/保守性の問題である必要があります。モジュールは、コードの残りの部分が消費できるコード/再利用可能な抽象化の読み取り可能で再利用可能なチャンクです(そうあるべきです)。また、これからテストの利点を引き出す必要があります。各モジュールを個別にテストする方が簡単です。

モジュラー アプローチを選択すると、さらに多くの JS ファイルが作成される可能性があり、これがパフォーマンスの問題 (つまり、複数の HTTP 要求) につながると考えるかもしれません。しかし、これはRequireJS オプティマイザーを使用してモジュールを単一のファイルに最適化することで軽減されます。

モジュールに変換する場合、はいrequire、他のページから変換できます。また、HTTP キャッシュ ヘッダーが設定されている場合、ブラウザはキャッシュされたバージョンを使用することを選択する可能性があるため、HTTP リクエストを節約できます (同じキャッシュ ヒューリスティックが適用されます。すべてのモジュールを単一のファイルに最適化しました)。

再定義すると(コード ブロックをコピーして貼り付けるという意味だと思います)、呼び出しにリストされている依存関係require すべてブラウザーによってキャッシュされるため、すぐに利用できるようになります (Web サーバーとその HTTP キャッシュ ヘッダーによって異なります)。 .

最後に、新しいモジュールの API を公開するために、コードを少しリファクタリングする必要があるかもしれません。それがメソッドで単一のオブジェクトを公開することを意味する場合は、それがあなたがすべきことです。私の経験では、このプロセスはほぼ必然的により良いコードにつながります。モジュールの目的が何であるかについてもっと考える必要があり、これは多くの場合、コード間の結合を壊すことにつながります。

于 2013-04-25T12:40:20.370 に答える