【问题标题】:ASP.NET website very slow Internet Explorer 10ASP.NET 网站非常慢 Internet Explorer 10
【发布时间】:2014-11-10 01:34:07
【问题描述】:

场景

我有一个 ASP.NET 网站,它在 Internet Explorer 8 中完美运行,但在 Internet Explorer 10 中速度极慢。

问题

在 Internet Explorer 8 中,回发或按钮单击事件大约需要 1.5 秒才能完成。在 Internet Explorer 10 中,它至少需要 30 秒,有时甚至超过 60 秒。

我已经尝试过的

1.从微软网站安装了一个修补程序来更新浏览器定义文件 (http://support.microsoft.com/kb/2836939)

  1. 我尝试在 web.config 中强制使用 IE8 和 IE9 兼容模式,或者在 IIS 中或直接在 html 页面中添加 HTTP Header。

  2. 尝试在服务器(Windows server 2008 R2)上更改 ISS 中的应用程序池。

  3. 在客户端机器上安装 .NET framework 4.0

真正的问题

ASP.NET 在将 Internet Explorer 10 检测为浏览器时是否仍然存在问题,或者浏览器之间的缓慢响应时间是否是 Web 服务器上的问题(浏览器定义文件等)?

【问题讨论】:

  • IE 的性能工具告诉你什么是慢?
  • 您是否在代码中使用了更新面板?
  • @Dash..抱歉忘了提,我也试过删除更新面板,但响应时间仍然很慢。我认为 AJAX 工具可能是问题所在。 @Rowland 调试器正在显示一个非常大的视图,网络流量捕获中耗时的部分是 POST 感谢各位的快速响应。
  • 无需移除更新面板。尝试应用解决方案。我希望它会有所帮助。

标签: asp.net internet-explorer-10


【解决方案1】:

当使用 Internet Explorer 浏览包含 UpdatePanel 的页面时,在单击启动异步回发的页面元素后会出现延迟(通常在 10 秒到 45 秒或更长之间)。使用 Internet Explorer 以外的浏览器时不会出现延迟。

PageRequestManager 的 _destroyTree 方法在启动异步回发之前遍历 UpdatePanel 内的 DOM 元素,以处理 DOM 元素。由于 Internet Explorer 的 HTML 查看器 (mshtml.dll) 在内存中存储 DOM 元素的方式,在某些条件下使用大型 DOM 树时,_destroyTree 方法的具体实现在 Internet Explorer 中非常慢。

在遇到延迟的页面的关闭 </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>

【讨论】:

  • 非常感谢 dash,我一定会对此进行测试并发布我的结果。
  • 感谢dash,将您的解决方案添加到项目中并重新安装了hotfix,一切运行顺利!
  • 致大家:如果有帮助,请投票给答案。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-07-15
  • 2017-11-01
  • 1970-01-01
  • 2014-02-24
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
相关资源
最近更新 更多