2010-11-27 3 views
1

私は、ロード時に0からN個のdiv要素を含むPHPスクリプトによって作成されたWebページを持っています。各divについて、そのdivに関連するデータを操作する特定のjavascriptコードを実行します。 このコードが行うことの1つは、img要素を作成し、既知の(ただし可変サイズの)イメージの特定のURLに 'src'属性を設定することです。これはキャッシュのために行われます。これらの画像は最初のページレイアウトでは表示されませんが、特定のユーザー入力(マウスのホバー)の後に表示されるはずです - 画像が表示されるまで時間がかからないように画像をキャッシュしようとしています。複数の内部javascriptコードを非同期で実行し、ブロックしない方法は?

コースの画像の読み込みには時間がかかります。画像にコードブロックが読み込まれるたびに、読み込み時間が長くなります。例:

<div id="i1"> 
<script type="text/javascript"> 
    /* run code relevant to 'i1', and amongst other things load some image 
     into a detached img element for later use. let's call this code 'bcode' */ 
</script> 
<div id="i2"> 
<script type="text/javascript"> 
    /* run 'bcode' for i2 */ 
</script> 

<div id="...and so on"> 

非同期コードの実行を持つしようとする、私はこれを試してみました:

<div id="i1"> 
(function() { 
    var asyncScriptElement = document.createElement('script'); 
    asyncScriptElement.async = true; 
    var scriptText = document.createTextNode ('here I put all of the relevant "bcode"'); 
    asyncScriptElement.appendChild (scriptText); 
    document.getElementById ('Img_1_2').appendChild (asyncScriptElement); 
}()); 

それはFF(まだ十分に高速ではない)の下で動作し、それは明らかにIEの下では動作しません。 これを達成する方法についてご意見はありますか? また、別の外部PHP(つまりXMLHttpRequestを使用する)から何かを得る必要はありません。私はこのPHPで必要なすべてのデータを得ました。画像の読み込みをブロック解除する方法が必要です。

答えて

0

HTMLページ(最終的にPHPで生成された)にスクリプトをラップし、iframeとしてダウンロードして、すべてのブラウザで同じ動作を保証します。

賛否両論の他のよりエレガントなオプションがあります。 here実行可能なオプション、ブラウザの互換性、素敵な意思決定ツリーの比較を見つけることができます。

+0

私はjsファイルを参照することができるようになりますiframe内にあるjs内部からの外部ドキュメントの変数? –

+0

追加のパラメータをiframe srcに含めることができ、iframe内でPHPまたはJS経由でこれらのパラメータを使用できます。 – lbz

+0

@Yuval、iframeが同じドメイン(同じ起点)にある場合は、両方のウィンドウオブジェクトのすべてにフルアクセスできます。 – xj9

0

Javascriptはシングルスレッドで、常に同期して実行されます。

ありこれを回避するには、ブラウザの拡張機能は、ある特にMozillaの

+0

真ですが、同じページに異なるJavascriptコードを並列実行する方法はいくつかあります。 Mozilla Javascript WorkersとHTML5 Web Workersは近い将来に採用されることが期待される素晴らしいソリューションです。 – lbz

+0

それは完全には正確ではありませんが、私は逃げ出します。 – xj9