2012-03-14 9 views
0

私はポータル環境で作業しています。複数のポートレットで共通のYUIモジュールを使用する必要があります。また、ポートレットを100%自己完結させたいと思っています。言い換えれば、私はポータルレベルでユニバーサルJSにYUI.addコールを置く必要はありません。同じページでYUI.addを同じモジュールに対して複数回呼び出すことは安全ですか?

したがって、各ポレットには共通の依存関係から構築プロセスによって追加された同じJSコードのコピーがあります。は手動でのコードをポートレット間で同期させないでください)。複数のポートレットが同じページにある場合、これはYUI.addがそれぞれによって呼び出されることを意味します。これは問題を引き起こすだろうか?おそらくすべてのJSを別のサーブレットに入れて、YUIダイナミックローダーに処理させることができますが、これは外部依存関係を取り戻すことになります。これらのポートレットが動作するためには、サーブレットを展開しなければならないであろう...

答えて

0

YUIは、それがすでにロードされたモジュールを追跡します:あなたはモジュールの上にYUI.add(を呼び出す

http://yuilibrary.com/yui/docs/api/files/yui_js_yui.js.html#l568

毎回YUIインスタンスをループし、モジュールがまだロードされていないかどうかを確認します。インスタンスがモジュールをロードしていない場合、addメソッドはモジュールをインスタンスのローダーに提供します。

したがって、addを重複して呼び出す際にわずかなオーバーヘッドがありますが、それほど重大ではありません。

+0

これは私がコードをどのように読んだかというだけで、私は心配しました。行[560](http://yuilibrary.com/yui/docs/)の 'env.mods [name] = mod; api/files/yui_js_yui.js.html#l560)は、すでに定義されているかどうかをチェックせずに、新しいモジュール定義を盲目的に 'YUI.Env'グローバルオブジェクトに追加していました。これに負の副作用がないと仮定することは安全ですか? – Lucas

+0

@ルーカスあなたの冗長な 'add '呼び出しがすべて同じである限り、私は負の副作用は見ません。それはちょうど割り当て〜だから、YUIのインスタンスを通るループよりもオーバーヘッドが小さい。 – Shad

+0

彼らは同じままでなければならない... thats私が思ったもの。ポートレットがそのモジュールの新しいバージョンで更新された場合、ポートレットがそのモジュールの新しいバージョンで更新されると、少し難しくなりますが、そのページ上の他のすべてのポートレットも、名前で定義を入れてバージョン番号を無視するので更新する必要があります...私が望むほどポータブルではありませんが、私は選択肢がありません。私はYUI.Envを自分自身でチェックすることができたと思いますが、それはフレームワーク内にあるべきもののようです – Lucas

関連する問題