0

誰かがjavascriptmvcスティールと組み合わせてLabJを使用しましたか?つまり、子レベルでの依存関係の読み込みを探し、LabJの非同期パフォーマンスの向上を利用することを意味します。

a.js

....。

steal(../ b.js).then(../ c.js)//c.jsでは、ロードする前にb.jsとd.jsをロードする必要があります

b.js

....。

steal(../ d.js)//(b.jsが呼び出されたときにd.jsをロードする必要があり、分類とメンテナンスを改善するためにd.jsをロードします)

labjs+stealに関する記事や経験は素晴らしいものになります。

4

2 に答える 2

0

それを脇に置いておくと、今のところ単一のファイルが作成されます...

各スクリプト内にネストされた依存関係に注釈を付けるという概念は、それだけでは並列読み込みを十分に活用できないことを意味します。ローダーは、A の読み込みが完了し、B が必要であることを確認できるまで、A が依存しているスクリプトを認識できないためです。 C. もちろん、B と C が分かれば、これら 2 つを並行してロードできますが、B と C を A と並行してロードすることはできません。

もう 1 つの問題は、LABjs (および他のほとんどの動的スクリプト ローダー) は、厳密に言えば非ブロック動作であるため、次のようなスクリプトをロードすると問題が発生することです。

A -- B と C に依存

D -- A と E に依存

A の読み込みが完了し、次に B と C の読み込みを開始すると、B と C (したがって A) が完了するまで D をネイティブに (余分な事前の努力なしに) 待機させることはできません。

この背後にある理由を説明するのは非常に複雑ですが、そのシナリオは、ネストされた依存関係アノテーションを使用した動的読み込みに問題があると言えば十分です。


ただし、最初に依存関係ツリーについて知っている場合 (つまり、スクリプトをロードして、ネストされた依存関係の注釈を確認するのを待つ必要がない場合) は、順序を確実に維持しながら、動的並列読み込みを簡単に利用できます。これは簡単に行うことができます:

B C A E D

5 つすべてを並列にロードしますが、前述の適切な順序で実行されることを確認します。その依存関係ツリーと必要な実行順序を把握する最善の方法は、すべてのスクリプトをウォークスルーし、リストとその必要な順序を把握するビルド プロセスを用意することです。

LABjs を使用すると、上記のチェーンは次のようになります。

$LAB.setOptions({AlwaysPreserveOrder:true}).script([B,C,A,E,D]);

そのリスト/順序が何であるかを最初に知っていると仮定すると、非常に単純で簡単です。ビルド スクリプトでその 1 行のコードを HTML ページにドロップするだけで、問題ありません。

それを行うためのそのようなビルド スクリプトがない場合 (私は、この種のことを必要とするさまざまなプロジェクト用にビルドした独自のスクリプトを持っています)、次の 2 つの選択肢があります。

  1. ネストされた依存性アノテーションを使用しないでください。依存関係のリスト (上記のリスト) を自分で管理し、正しい順序になっていることを確認してください。10 年以上にわたって、ブラウザでスクリプト タグを使用している人々はこの方法で問題なく機能してきたため、ほとんどのサイトではおそらくこれで十分です。手動で管理しているサイトの多くに LABjs チェーンがありますが、LABjs を使用する他の何千ものサイトと同様に、まったく問題ありません。

  2. それらをすべて 1 つのファイルに入れるだけのビルド スクリプト (Steal など) を使用します (もちろん、適切な順序も把握する必要があります!)。並列読み込みの利点は得られません。残念。

うまくいけば、これは当面の問題に光を当てます。

于 2012-05-10T02:07:43.513 に答える
0

スチールは、本番アプリを単一の JS ファイルにビルドします。必要に応じてそのファイルをロードできます。

于 2012-05-08T16:44:11.153 に答える