2009-04-24 21 views
12

IE7でjQuery AJAX呼び出しに問題があります。この単純なコードは、FFとOperaでうまく動作します。しかし、IE7では3-5秒かかる。 - それはFFより20倍遅いです!コンテンツの読み込みは、純粋なHTMLとインラインJavaScriptコードです。 JSレンダリングなし。私はインラインJavaScriptコードを回しました。まだ遅いです。IE7でjQuery Ajaxが遅いのはなぜですか?

$('#block').load('some url'); 

この問題を解決するにはどうすればよいですか?どんな助けでも大歓迎です。

+0

あなたはどのくらいのコンテンツをロードしている:コードを結果の

はこのようなものでしたか? IEは、通常、いくつかのものは少し遅く、多くのコンテンツがある場合は遅くなります。 – cgp

+0

11KBそれはIE7のためにあまりにもですか? FF Opera Chromeは非常に高速に読み込みます。 – taras

答えて

16

この問題を解決するにはどうすればよいですか?どんな助けも高く評価されます。

IE7のページを読み込み、低速読み込みが気に入らないユーザーはアップグレードするように個別に提案してください。

3

本当にあなたができることはあまりありません。 IEのjavascriptエンジンは、他のどのエンジンよりも遅いです(実際は、それはうんざりです)。あなたはIE8を試すことができます。それはより良い...わずかに...

+0

実際、IE8ははるかに高速です - そして、いくつかの面では、FF3より速くはないと信じています。完全な例はStackOverflowです。私は約21の "関心"のタグを持っており、IE7はそんなにゆっくりとレンダリングされています... FFははるかに優れていました。私はIE8にアップグレードすると、IE8は今stackoverflowに叫ぶ。今はFirefoxの速度が遅いということになります。だから、私はIEに戻ってきました。 :) – eduncan911

+6

Safari 4またはChromeで試してみましょう。あなたは正しい。 FireFoxは私に最近失望している(Firebugのために開発するときを除いて...何もせずに何をするだろうか?)。 IE8はデベロッパーツールバーを追加しました。これはロードよりも優れていますが、何もしません...しかし、まだFirebugではありません。 OTの暴言には申し訳ありません。 – KyleFarris

+1

開発ツールバーは、IE6 – John

8

私は遅いjscript ie7エンジンで同じ問題がありました。私は人間のためのステータスポップアップウィンドウを追加しました。私は、JSがチャンクで進行するので、ステータスウィンドウを更新します。擬似コード:

  1. favit jsライブラリを使用してステータスコンテナを作成します。私はYUIを好む。それらのコンテナAPIを参照してください。
  2. データの一部が読み込まれますか。 - まずチャンクに分割する必要があります
  3. ステータスポップアップを更新します。 (完了したロードの割合を増やし、バーのインジケータを増やすなど)JSスレッドがまだ実行されているので、この時点では画面はおそらく変更されないことに注意してください。
  4. 次に、ボトムライン
var t = setTimeout("next_step(2)", 0); 
// Where arg of 2 would mean do the second step 
// This will yield to the browser, and the display will then be updated. 
// If you want to maintain the value of "this" in the function, then do 
// something like 
var t = setTimeout("next_step.call(MyContext, 2)", 0); 
// using call to set the function's context.

を呼び出して、ユーザーが画面上で変化するものが表示されることです。タイムアウト0で降伏するステップは、比較的長い時間がかかります。だから、私のコードはブラウザをテストし、IE以外のものであれば、チャンクごとに多くの作業をします。

フィードバックを変更することは非常に重要です。そうでなければ、彼らはそれが実際よりも長くかかると思っています。

HTH、

ラリー

+0

私はこの問題を自分自身で何度も経験しており、あなたの答えに同じ「擬似」スレッド技法を実装しています。しばしば私はキューイングの仕組みを構築しなければならなかった。 jQuery 1.3ではQueueが実装されています。これにより、http://docs.jquery.com/Effects/queueでより簡単に動作させることができます。 –

+0

優れた提案。第二(それだけで「ロード」アニメーションだ場合でも)以上かかる可能性がある非同期呼び出しや、おそらく非常に集中的なアルゴリズムを実行するときに常にフィードバックのいくつかの並べ替えがあるはずです。しかしこれはどんなブラウザ/実装にも向いています。このため – KyleFarris

3

私は実際のコードを参照する必要がありますが、私はjQuery.load()を取り除くために持っていた同様の問題に直面していると思います。代わりにのjQuery.get()を "html"データ型で使用し、私自身のコールバックを書き込んで、.innerHTMLでデータを注入しました。そうすると、別のバグ(< >タグが選択され、IEで.innerHTMLが許可されない)が発生したので、私は醜い回避策を書いた。

// Fetch data (GET method allows me to use browser cache) 
$.get(url, get, function(htmlValues, txtStatus){ 
    that.populateSelects(htmlValues, that.selectContainers); 
}, "html"); 


// Create <select> 
var select = $('<span><select disabled="disabled"></select></span>'); 
$("<option>").attr("value", "").text("Loading...").appendTo(select.find("select")); 


// Populate <select> 
that.populateSelects = function(values, selectContainers){ 
    var span, select, tags; 

    for(var i=0, len=selectContainers.length; i<len; i++){ 
     span = selectContainers[i]; 

     if($.browser.msie){ 
     tags = span.innerHTML.match(/^(<select[^>]+>).*(<\/select>)$/i); 
     span.innerHTML = tags[1] + values + tags[2]; 
     select = span.firstChild; 
     }else{ 
     select = span.firstChild; 
     select.innerHTML = values; 
     } 
     $(select).removeAttr("disabled"); 
    } 
} 
+0

乾杯は、私はちょうど$のに.get + innerHTMLプロパティでの$ .LOADを置き換えることによって、私のアプリのロードオフ時間の秒のカップルを剃ることができました。 –

関連する問題