/ / Por que o jQuery Ajax é tão lento no IE7? - jquery, ajax, internet-explorer-7

Por que o jQuery Ajax é tão lento no IE7? - jquery, ajax, internet-explorer-7

Estou tendo um problema com as chamadas do jQuery AJAXIE7. Este código simples funciona bem no FF e no Opera. Mas no IE7, leva de 3 a 5 segundos. - isso é 20 vezes mais lento que o FF! O carregamento do conteúdo é HTML puro e código JavaScript embutido. Nenhuma renderização JS. Eu até desliguei o código JavaScript embutido. Ainda é lento.

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

Como superar esse problema? Qualquer ajuda seria muito apreciada.

Respostas:

16 para resposta № 1

Como superar esse problema? Qualquer ajuda seria muito apreciada.

Detecte o IE7 no carregamento da página e forneça uma sugestão discreta de que os usuários que não gostam de carregamento lento devem atualizar.


8 para resposta № 2

Eu tive o mesmo problema com o mecanismo lento jscript ie7. Eu adicionei uma janela pop-up de status para o humano. Eu atualizo a janela de status conforme o JS prossegue em pedaços. Pseudo-código:

  1. Crie um contêiner de status usando sua biblioteca favorit js. Eu prefiro YUI. Veja a API do contêiner.
  2. Faça parte do seu carregamento de dados. - você primeiro precisará dividi-lo em pedaços
  3. Atualize o pop-up de status. (Incremente a% de carga concluída, aumente um indicador de barra etc.) Observe que a tela provavelmente não será alterada neste momento, pois seu encadeamento JS ainda está em execução.
  4. Em seguida, ligue
var t = setTimeout ("next_step (2)", 0); // Ondearg de 2 significaria fazer o segundo passo // Isso renderá ao navegador e a exibição será atualizada. // Se você deseja manter o valor "this" na função, faça // algo como var t = setTimeout ("next_step.call (MyContext, 2)", 0); // usando call para definir o contexto da função.

Bottom line é que o usuário verá algomudando na tela. Observe que a etapa de renderização com um tempo limite de 0 leva bastante tempo, relativamente falando. Portanto, meu código testa o navegador e faz mais trabalho por parte, se for algo diferente do IE.

É muito importante fornecer feedback alterado para o usuário. Caso contrário, eles acham que está demorando mais do que realmente é.

HTH,

Larry


3 para resposta № 3

Não há realmente muito o que você possa fazer. O mecanismo javascript do IE é bem mais lento que qualquer outro (na verdade, é uma droga). Você pode experimentar o IE8. isto é melhor ... marginalmente ...


3 para resposta № 4

Eu teria que ver o código real, mas, diante de um problema semelhante, tive que me livrar jQuery.load (). Em vez disso, eu usei jQuery.get () com o tipo de dados "html" e escrevi meu próprio retorno de chamada, onde injetei os dados via .innerHTML. Ao fazer isso, também acertei outro bug (era uma tag <select> e o IE não permitirá .innerHTML nela), então escrevi uma solução alternativa feia.

O código resultante era mais ou menos assim:

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