我目前正在尝试将控制器操作转换为Ajax请求,以便让页面加载的部分而不是一次全部加载。在我开始进行更改之前,该页面在大约8秒钟内加载(它必须处理大量信息)。jQuery的Ajax优化技巧 - MVC
由于我已将其更改为通过ajax加载部分视图,现在页面需要大约35秒才能加载相同的信息。
的过程如下:
- 初始请求过程,然后返回一个视图模型(一个通用的列表)作为JSON
- 然后我使用返回的数据,以创建两个局部视图
我只是想知道是否有更好的方法来布置jquery以使其更快地工作。我知道传递的数据量可能是一个因素 - 尽管我无法在调试器中找到对象的确切大小,但是当我将JSON转储到文本文件时,大小约为70kb。
jQuery的
$.ajax({
type: 'GET',
dataType: "json",
url: '@Url.Action("GetMapDetails")',
success: function (data) {
$.ajax({
type: 'POST',
contentType: 'application/json',
url: '@Url.Action("GetMapItems")',
data: JSON.stringify({
list: data
}),
success: function (result) {
$("#mapContainer").html(result);
}
});
$.ajax({
type: 'POST',
contentType: 'application/json',
url: '@Url.Action("GetAreaPoints")',
data: JSON.stringify({
list: data
}),
success: function (result) {
$("#areaPointsContainer").html(result);
}
});
}
});
控制器
public JsonResult GetMapDetails()
{
List<ViewModel> vm = new List<ViewModel>();
//create viewmodel here
return Json(vm.ToArray(), JsonRequestBehavior.AllowGet);
}
public ActionResult GetMapItems(List<ViewModel> list)
{
return PartialView("_MapItemsPartial", list);
}
public PartialViewResult GetAreaPoints(List<ViewModel> list)
{
return PartialView("_AreaPointsPartial", list);
}
如果任何人都可以提供一些优化建议,那将是巨大的感谢
但是,JMVA并不是所有的时间都将Cache选项设置为true。当你设置这个标志时,它不会从你的服务器获取数据。因此,后端中更新的数据将不会与您向用户显示的内容同步。我觉得这可能是一个严重的问题。纠正我,如果我错了。 – Dhanasekar
我编辑我的答案@Dhanasekar – jmventar
谢谢JMVA。 BUt即使在后端进行了一些更改之后,我仍然面临着向用户显示未更新信息的问题。我做的错误是我没有明确地将缓存设置为false。所有这些都是关于我们面临的情况 – Dhanasekar