Подтвердить что ты не робот

Почему jQuery Ajax настолько медленный на IE7?

У меня проблема с вызовами jQuery AJAX на IE7. Этот простой код отлично работает в FF и Opera. Но на IE7 это занимает 3-5 секунд. - что в 20 раз медленнее FF! Загрузка содержимого - это чистый HTML-код и встроенный код JavaScript. Нет JS-рендеринга. Я даже включил встроенный код JavaScript. Бу все еще медленно.

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

Как преодолеть эту проблему? Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 1

Как преодолеть эту проблему? Любая помощь будет высоко оценена.

Обнаружение IE7 при загрузке страницы и предоставление дискретного предложения о том, что пользователи, которым не нравится медленная загрузка, должны обновиться.

Ответ 2

У меня была та же проблема с медленным движком jscript ie7. Я добавил всплывающее окно статуса для человека. Я обновляю окно состояния, когда JS работает в кусках. Псевдокод:

  • Создайте контейнер состояния, используя вашу библиотеку favorit js. Я предпочитаю YUI. Посмотрите их контейнер api.
  • Выполняйте некоторые из ваших данных. - сначала вам нужно разбить его на куски.
  • Обновить всплывающее окно статуса. (Увеличьте% загруженную нагрузку, увеличьте индикатор бара и т.д.). Обратите внимание, что экран, вероятно, не изменится в этот момент, так как поток JS все еще работает.
  • Затем вызовите
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 context.

Нижняя строка - это то, что пользователь увидит что-то, изменяющееся на экране. Обратите внимание, что шаг уступки с таймаутом 0 занимает довольно много времени, относительно говоря. Таким образом, мой код проверяет браузер и делает больше работы за кусок, если это что-то иное, чем IE.

Очень важно обеспечить изменение обратной связи с пользователем. В противном случае они думают, что это занимает больше времени, чем на самом деле.

НТН,

Ларри

Ответ 3

На самом деле вы не можете многое сделать. IE javascript движок медленнее, чем любой другой (на самом деле, он сосет). Вы можете попробовать IE8. Лучше... незначительно...

Ответ 4

Мне нужно было бы увидеть фактический код, но столкнулся с аналогичной проблемой, которую мне пришлось избавиться от jQuery.load(). Вместо этого я использовал jQuery.get() с типом данных "html" и написал свой собственный обратный вызов, где я ввел данные через .innerHTML. Сделав это, я также ударил еще одну ошибку (это был тег <select> и 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");
   }
}