私は現在、ページを一度にすべてではなくセクションにロードできるようにするために、コントローラーアクションをAjaxリクエストに変換しようとしています。変更を加える前に、ページは約8秒で読み込まれました(多くの情報を処理する必要があります)。
ajaxを介して部分ビューをロードするように変更したため、ページが同じ情報をロードするのに約35秒かかります。
プロセスは次のとおりです。
- 最初のリクエストは、ビューモデル(ジェネリックリスト)を処理してからjsonとして返します。
- 次に、返されたデータを使用して2つの部分ビューを作成します
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);
}
誰かが最適化のアドバイスを提供できれば、それは素晴らしいことです