.net MVC页面因Windows 8.1 + IE 11组合的大数据而崩溃

时间:2014-09-21 06:00:09

标签: jquery asp.net-mvc windows internet-explorer-11

我们的系统最近已升级到Win 8.1。在Windows 7 + IE上运行正常的应用程序,相同数量的数据(2000行)现在不再在Windows 8.1 + IE 11中加载。下面是该问题的进一步细节:

a)应用程序基于MVC 4 .Net。

b)现在有加载问题的页面预计将获得大量数据(大约2000多条记录,包括各种级别的计算),以提供所有数据和计算的“总结”感觉。 / p>

c)此功能适用于IE 11 + Win 7组合。

d)在IE11 + Win8.1组合中,正在获取数据并将其绑定到屏幕,但在以所需的表结构呈现页面时,IE挂起并进入“网页停止响应”模式。

e)Jquery被用于在页面上隐藏/显示详细信息。

如果有任何具体的解决方案可以解决这个问题,请告诉我。

下面是我们遍历模型对象(包含大约2000行)并绑定到主体的部分。它使用部分视图来绑定小计/总行。总和值作为最终总数绑定到页脚。

@foreach (var item in Model)
    {
        order = item.order;

        if (item.order == 0)
        {
            totalMaxFees += item.maxFee;
            totalEstFees += item.estimatedFee;
            totalComplete += item.complete;
            totalBaseHrs += item.baseHours;
            totalWipStd += item.totalWIP;
            totalAllowance += item.allowance;
            totalWipBase += item.netWIP;
            totalEstWipStd += item.additionalWIP;
            totalRecovery += item.recovery;
            totalCredits += item.credits;

        }
        else if (item.order == 1)
        {
            decimal ERVIndividual = 0;

            ERVIndividual = (item.totalWIP) * (item.recoveryPercent / 100);
            totalIncome += item.additionalIncome;
            ERVClient += ERVIndividual;
        }

        // examine the first letter of the client 
        // and group accordingly
        String letter = item.Mandate.Client.name.Substring(0, 1);
        letter = letter.ToUpper();

        try
        {
            int test = int.Parse(letter);
            letter = "0-9";
        }
        catch (Exception)
        {
            // can't cast it, so it's a letter
        }

        if (!letter.Equals(currentLetter))
        {
            Html.RenderPartial("ClientRollupHeader", letter);
            currentLetter = letter;
        }
        if (item.Mandate.Client.name != currentClient) {
            Html.RenderPartial("ClientGroupHeader", item);
            currentClient = item.Mandate.Client.name;
        }
        if (item.order == 1) {
            Html.RenderPartial("ClientTotalRow", item);
        } else {
            Html.RenderPartial("MandateTableRow", item);
        }
    }

1 个答案:

答案 0 :(得分:0)

从#34;网页停止响应"消息,它表示JavaScript端呈现的问题。这通常意味着无论你的脚本做什么,都需要很长时间。最终它超过浏览器的超时阈值,导致浏览器认为页面已停止响应。

如果不进一步了解DOM方面,除了这里的一些常规调试技术之外,很难确定其中的任何内容:

  • 同一页在Chrome或FF中是否正常工作?如果是这样,那肯定是DOM呈现缓慢的问题。如果不是,那么您的服务器发送结果的时间太长。

  • 您可以profile页面的脚本来查看哪些方法需要更长的时间。如果IE浏览器因页面崩溃而无法成功,请尝试在Chrome中进行性能分析。虽然不同的浏览器通常使用不同的JS引擎,但它们以相同的方式指向最慢的功能。

  • 最后,如果你仍然无法弄清楚,那么尝试引入分页或批量渲染记录(多个ajax调用,每个调用获取和附加n个记录)。 n或最佳点可以通过试验错误找到。

进一步阅读:请参阅此support base article,它告诉您IE如何确定JS何时超时:

  

默认情况下,密钥不存在。如果尚未添加密钥,则超时对话框的默认阈值限制为Internet Explorer 4及更高版本的5,000,000个语句。

您也可能会进行递归或某些循环,这也会导致脚本挂起。