我们的系统最近已升级到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);
}
}
答案 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个语句。
您也可能会进行递归或某些循环,这也会导致脚本挂起。