我目前正在尝试将控制器操作转换为 Ajax 请求,以便让页面分段加载,而不是一次全部加载。在我开始进行更改之前,页面加载大约需要 8 秒(它必须处理大量信息)。
由于我已将其更改为通过 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);
}
如果有人可以提供一些优化建议,那将非常感谢