方案
我有一个在Internet Explorer 8中完美运行的ASP.NET网站,但在Internet Explorer 10中速度极慢。
问题
在Internet Explorer 8中,回发或按钮单击事件大约需要1.5秒才能完成。在Internet Explorer 10中,它至少需要30秒,有时甚至超过60秒。
我已尝试过的内容
1.安装Microsoft网站的修补程序以更新浏览器定义文件 (http://support.microsoft.com/kb/2836939)
我尝试在web.config中强制使用IE8和IE9兼容模式,或者在IIS中或直接在html页面中添加HTTP Header。
尝试更改服务器上的ISS中的应用程序池(Windows Server 2008 R2)。
在客户端计算机上安装.NET framework 4.0
真实问题
ASP.NET是否仍然可以将Internet Explorer 10检测为浏览器,或者浏览器之间的响应时间是否有问题(浏览器定义文件等)?
答案 0 :(得分:0)
使用Internet Explorer浏览包含UpdatePanel的页面时,单击启动异步回发的页面元素后会有延迟(通常在10秒到45秒或更长时间之间)。使用Internet Explorer以外的浏览器时不会出现延迟。
PageRequestManager的_destroyTree方法在启动异步回发之前迭代UpdatePanel内的DOM元素,以便处理DOM元素。由于Internet Explorer的HTML查看器(mshtml.dll)将DOM元素存储在内存中的方式,在某些情况下使用大型DOM树时,Internet Explorer中的_destroyTree方法的具体实现非常慢。
在经历延迟的页面的结束</body>
元素之前立即添加以下JavaScript。
<script language="javascript" type="text/javascript">
function disposeTree(sender, args) {
var elements = args.get_panelsUpdating();
for (var i = elements.length - 1; i >= 0; i--) {
var element = elements[i];
var allnodes = element.getElementsByTagName('*'),
length = allnodes.length;
var nodes = new Array(length)
for (var k = 0; k < length; k++) {
nodes[k] = allnodes[k];
}
for (var j = 0, l = nodes.length; j < l; j++) {
var node = nodes[j];
if (node.nodeType === 1) {
if (node.dispose && typeof (node.dispose) === "function") {
node.dispose();
}
else if (node.control && typeof (node.control.dispose) === "function") {
node.control.dispose();
}
var behaviors = node._behaviors;
if (behaviors) {
behaviors = Array.apply(null, behaviors);
for (var k = behaviors.length - 1; k >= 0; k--) {
behaviors[k].dispose();
}
}
}
}
element.innerHTML = "";
}
}
Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(disposeTree);
</script>