为什么jQueryAjax在IE7上速度如此之慢?
我对IE7上的jQueryAjax调用有问题。这段简单的代码在FF和Opera上运行良好。但在IE7上需要3-5秒这比FF慢20倍!加载内容是纯HTML和内联JavaScript代码。没有JS渲染。我甚至还打开了内联JavaScript代码。但是仍然很慢为什么jQueryAjax在IE7上速度如此之慢?,jquery,ajax,internet-explorer-7,Jquery,Ajax,Internet Explorer 7,我对IE7上的jQueryAjax调用有问题。这段简单的代码在FF和Opera上运行良好。但在IE7上需要3-5秒这比FF慢20倍!加载内容是纯HTML和内联JavaScript代码。没有JS渲染。我甚至还打开了内联JavaScript代码。但是仍然很慢 $('#block').load('some url'); 如何克服这个问题?任何帮助都将不胜感激 如何克服这个问题?任何帮助都将不胜感激 在页面加载时检测IE7,并提供一个独立的建议,让不喜欢缓慢加载的用户升级。您真的无能为力。IE的jav
$('#block').load('some url');
如何克服这个问题?任何帮助都将不胜感激
如何克服这个问题?任何帮助都将不胜感激
在页面加载时检测IE7,并提供一个独立的建议,让不喜欢缓慢加载的用户升级。您真的无能为力。IE的javascript引擎比其他任何引擎都慢(事实上,它糟透了)。你可以试试IE8。这是更好的。。。稍微…我也有同样的问题,jscript ie7引擎运行缓慢。我为人类添加了一个状态弹出窗口。我在JS分块运行时更新状态窗口。伪代码:
Larry我必须查看实际的代码,但面对类似的问题,我不得不去掉jQuery.load()。相反,我使用带有“html”数据类型的jQuery.get(),并编写了自己的回调,通过.innerHTML注入数据。这样做,我还碰到了另一个bug(它是一个标签,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");
}
}
//获取数据(GET方法允许我使用浏览器缓存)
$.get(url、get、函数(HtmlValue、txtStatus){
that.populateSelects(htmlValue,that.selectContainers);
},“html”);
//创造
var select=$('');
$(“”).attr(“值”),text(“加载…”)。appendTo(选择。查找(“选择”);
//填充
that.populateSelects=函数(值,选择容器){
变量范围、选择、标记;
for(var i=0,len=selectContainers.length;i)。*()$/i);
span.innerHTML=标记[1]+值+标记[2];
选择=span.firstChild;
}否则{
选择=span.firstChild;
select.innerHTML=值;
}
$(选择).removeAttr(“禁用”);
}
}
您正在加载多少内容?IE在某些方面通常会稍微慢一点,如果有大量内容,则会慢很多。11KB。这对IE7来说太多了吗?FF Opera Chrome加载速度非常快。事实上,IE8的速度要快得多,而且在某些方面,比FF3快得多。StackOverflow就是一个很好的例子。我有大约21个“感兴趣”标签,IE7的渲染速度非常慢。。。比这好得多。当我升级到IE8时,IE8现在在stackoverflow上尖叫。现在Firefox的速度要慢一些。所以,我又回到了IE上现在在Safari 4或Chrome上试用。不过,你是对的。最近FireFox让我很失望(除了因为Firebug而开发的时候…没有Firebug我们会怎么做??)。IE8增加了开发者工具栏,这比什么都没有要好。。。但是,它仍然不是萤火虫。抱歉,OT的咆哮。开发者工具栏从IE6I开始就一直存在,我自己也曾多次遇到过这个问题,并且在您的回答中实现了相同的“伪”线程技术。我常常不得不建立一个排队机制。jQuery1.3实现了一个队列,它可以使这项工作更加容易,并提供极好的建议。在执行异步调用或可能需要一秒钟以上(即使只是“加载”动画)的非常密集的算法时,应该始终存在某种反馈。这适用于任何浏览器/实现。为此干杯,我刚刚用$.get+innerHTML替换了$.load,节省了几秒钟的应用程序加载时间。
// 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");
}
}