2008-09-16 24 views
5

大規模なGWTプロジェクトでは、JavaScriptの一部を遅らせることができますか? オーバーレイと似ています。gwt遅延読み込み

PS:Iframeは解決策ではありません。

+0

衒学(時間25:30頃) – GEOCHET

答えて

0

私はこれがあなたが探しているものだと思います。

<body onload="onloadHandler();"> 
<script type="text/javascript"> 
function onloadHandler() { 
    if (document.createElement && document.getElementsByTagName) { 
     var script = document.createElement('script'); 
     script.type = 'text/javascript'; 
     script.src = './test.js'; 
     var heads = document.getElementsByTagName('head'); 
     if (heads && heads[0]) { 
      heads[0].appendChild(script); 
     } 
    } 
} 
function iAmReady(theName) { 
    if ('undefined' != typeof window[theName]) { 
     window[theName](); 
    } 
} 
function test() { 
    // stuff to do when test.js loads 
}   
</script> 

は -

iAmReady('test'); 

テスト済みおよびWindows、IE 6とOpera 9.52のためのFirefox 2、Safariの3.1.2で働いtest.js。私はそれらのアップレベルのバージョンも同様に動作するはずです。

ロードは非同期であることに注意してください。 appendChild()を呼び出した直後に、ロードされたファイル内の関数または変数を使用しようとすると、失敗する可能性が高くなります。そのため、スクリプトが完了したときに初期化関数を強制的に実行するコールバック読み込み中。

ロードされたスクリプトの一番下にある内部関数を呼び出して、ロードされたものを実行することもできます。

0

ロードするモジュールに必要なJavaコードがすべて1つのJavaScriptファイルにコンパイルされるため、GWTはこれを容易にサポートしません。この単一のJavaScriptファイルは大きくなる可能性がありますが、自明ではないモジュールの場合は、同等の手書きJavaScriptよりも小さくなります。

生成された単一のJavaScriptファイルが大きすぎるシナリオがありますか?

0

あなたのアプリケーションを複数のGWTモジュールに分割することも考えられますが、モジュール間でコードを共有する能力が制限されることを覚えておく必要があります。したがって、あるモジュールが別のモジュールが参照する同じクラスを参照するクラスがある場合、その共通クラスのコードは2回含まれます。

効果的に、モジュールは独自の名前空間を作成します.2つの別々のクラスローダーで同じクラスを読み込むと、Javaで得られるものと似ています。実際、GWTコンパイラはコード内で参照されているメソッド(つまりデッドコードの削除)でコンパイルするだけなので、あるモジュールには共通クラスから別のモジュールへのメソッドの異なるサブセットが含まれていることが考えられます。

したがって、すべてを1つのモノリシックモジュールとしてロードするかどうかを検討し、最初の回でヒットを取ることは、累積コードサイズが1つのモジュールアプローチよりも大幅に大きい可能性がある複数のモジュールを持つよりも優れています。

GWTは、同じバージョンのモジュールを一度ロードするだけです(それ以降はキャッシュされる)ように設計されているため、ほとんどの場合、先行ヒットの方が望ましい

0

iPhoneまたはiPod touchを使用して、「一歩前進」アプローチで大きなGWTアプリケーションを読み込もうとすると、ロードされません。

モジュールアプローチは、管理するのがより複雑ですが、より小さいクライアントデバイスの方が優れています。

ここで、iFrameを使用せずにJavaコードからモジュールをロードするにはどうすればよいですか?

  • エリック