/ / Dlaczego jQuery Ajax jest tak wolny na IE7? - jquery, ajax, internet-explorer-7

Dlaczego jQuery Ajax jest tak wolny na IE7? - jquery, ajax, internet-explorer-7

Mam problem z wywołaniami jQuery AJAXIE7. Ten prosty kod działa dobrze w FF i Operze. Ale w IE7 zajmuje to 3-5 sekund. - to 20 razy wolniej niż FF! Ładowanie treści to czysty HTML i wbudowany kod JavaScript. Brak renderowania JS. Nawet zrezygnowałem z wbudowanego kodu JavaScript. Bu wciąż powolny.

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

Jak pokonać ten problem? Każda pomoc byłaby bardzo mile widziana.

Odpowiedzi:

16 dla odpowiedzi nr 1

Jak pokonać ten problem? Każda pomoc byłaby bardzo mile widziana.

Wykryj IE7 przy ładowaniu strony i podaj dyskretną sugestię, że użytkownicy, którzy nie lubią powolnego ładowania, powinni dokonać aktualizacji.


8 dla odpowiedzi № 2

Miałem ten sam problem z powolnym silnikiem jscript ie7. Dodałem wyskakujące okienko statusu dla człowieka. Aktualizuję okno statusu, gdy JS postępuje w porcjach. Pseudo kod:

  1. Utwórz kontener stanu za pomocą biblioteki favorit js. Wolę YUI. Zobacz ich api kontenera.
  2. Wykonaj część ładowania danych. - najpierw musisz podzielić go na kawałki
  3. Zaktualizuj wyskakujące okienko stanu. (Zwiększ% ukończonego obciążenia, zwiększ wskaźnik słupkowy itp.) Zauważ, że ekran prawdopodobnie nie zmieni się w tym momencie, ponieważ twój wątek JS nadal działa.
  4. Następnie zadzwoń
var t = setTimeout („next_step (2)”, 0); // GdzieArg z 2 oznaczałoby zrobienie drugiego kroku // Spowoduje to poddanie się przeglądarce, a następnie wyświetlacz zostanie zaktualizowany. // Jeśli chcesz zachować wartość „this” w funkcji, zrób to // coś jak var t = setTimeout („next_step.call (MyContext, 2)”, 0); // użycie wywołania do ustawienia kontekstu funkcji.

Najważniejsze jest to, że użytkownik coś zobaczyzmiana na ekranie. Zauważ, że krok ustępowania z limitem czasu 0 zajmuje stosunkowo dużo czasu. Więc mój kod testuje przeglądarkę i wykonuje więcej pracy na porcję, jeśli jest to coś innego niż IE.

Bardzo ważne jest, aby przekazywać użytkownikowi zmiany opinii. W przeciwnym razie uważają, że to trwa dłużej niż w rzeczywistości.

HTH,

Larry


3 dla odpowiedzi nr 3

Naprawdę niewiele można zrobić. Silnik javascript w IE jest znacznie wolniejszy niż którykolwiek z pozostałych (w rzeczywistości jest do bani). Możesz wypróbować IE8. To jest lepiej ... marginalnie ...


3 dla odpowiedzi № 4

Musiałbym zobaczyć rzeczywisty kod, ale napotkałem podobny problem, którego musiałem się pozbyć jQuery.load (). Zamiast tego użyłem jQuery.get () z typem danych „html” i napisałem własne wywołanie zwrotne, do którego wprowadziłem dane .innerHTML. W ten sposób trafiłem też na inny błąd (był to tag <select> i IE nie pozwala na to .innerHTML), więc napisałem brzydkie obejście.

Wynikowy kod wyglądał mniej więcej tak:

// 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");
}
}