Ответ 1
Как преодолеть эту проблему? Любая помощь будет высоко оценена.
Обнаружение IE7 при загрузке страницы и предоставление дискретного предложения о том, что пользователи, которым не нравится медленная загрузка, должны обновиться.
У меня проблема с вызовами jQuery AJAX на IE7. Этот простой код отлично работает в FF и Opera. Но на IE7 это занимает 3-5 секунд. - что в 20 раз медленнее FF! Загрузка содержимого - это чистый HTML-код и встроенный код JavaScript. Нет JS-рендеринга. Я даже включил встроенный код JavaScript. Бу все еще медленно.
$('#block').load('some url');
Как преодолеть эту проблему? Любая помощь будет принята с благодарностью.
Как преодолеть эту проблему? Любая помощь будет высоко оценена.
Обнаружение IE7 при загрузке страницы и предоставление дискретного предложения о том, что пользователи, которым не нравится медленная загрузка, должны обновиться.
У меня была та же проблема с медленным движком jscript ie7. Я добавил всплывающее окно статуса для человека. Я обновляю окно состояния, когда 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.
Очень важно обеспечить изменение обратной связи с пользователем. В противном случае они думают, что это занимает больше времени, чем на самом деле.
НТН,
Ларри
На самом деле вы не можете многое сделать. IE javascript движок медленнее, чем любой другой (на самом деле, он сосет). Вы можете попробовать IE8. Лучше... незначительно...
Мне нужно было бы увидеть фактический код, но столкнулся с аналогичной проблемой, которую мне пришлось избавиться от 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");
}
}