我有一个ASP MVC4应用程序,它加载了一个小部件仪表板。每个小部件都会执行异步ajax调用回服务器并返回部分内容。
由于某些原因,这些小部件需要50秒才能用部分内容替换内容。 ajax请求是即时的,并且在数据库端执行数据库查询也是即时的。大多数情况下这工作正常,但我认为这可能与网站的高使用率有关。
任何人都可以推荐我可以做的任何事情来调试这个问题或确定瓶颈可能是什么?
$.ajax({
cache: true,
type: 'post',
async: true,
url: '/Overview/GetBillingWidget/',
success: function (result3) {
if (result3 == '') {
$('.widget-billing-container').replaceWith('');
} else {
$('.widget-billing').html(result3);
}
},
error: function () {
}
});
$.ajax({
cache: true,
type: 'post',
async: true,
url: '/Overview/GetQueryWidget/',
success: function (result3) {
if (result3 == '') {
$('.widget-myquery-container').replaceWith('');
} else {
$('.widget-myquery').html(result3);
}
},
error: function () {
}
});
答案 0 :(得分:3)
我在像应用程序这样的仪表板中遇到了同样的问题,并且正如评论提示会话锁定问题一样。默认情况下,当调用控制器操作时,会话被锁定直到它存在,因此在发生这种情况时进入的任何调用都必须等到它被释放。
但是,通过一些智能编码,您可以完全避免会话变量,最好是通过在数据库中存储和读取数据。如果您的控制器只读取会话变量(或根本不使用它们),您可以在控制器类的顶部添加此属性:
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
这可以解决您对控制器的并行ajax调用可能遇到的许多锁定问题。