gpt4 book ai didi

asp.net-mvc - 嵌套的 RenderAction 渲染速度非常慢

转载 作者:行者123 更新时间:2023-12-02 03:07:39 25 4
gpt4 key购买 nike

我有一个 PartialViewResult 操作,它呈现一个我从页面上的 $.ajax 调用调用的 PartialView。

该 PartialView 对于 VM 中的项目也有一个 foreach 循环,并且在该 PartialView 中我有两个 RenderAction 来渲染另外两个 Partials。

除了渲染速度之外,一切都运行良好。当我注释掉两个嵌套的 RenderAction 时,主要部分 View 的渲染速度非常快。当我取消注释它们时,主要部分 View 将渲染 3 到 5 秒。即使我删除部分 View 中的所有数据以及操作中的所有数据以仅返回空 View ,仍然需要 3-5 秒。

不知何故,我的应用程序在渲染这两个部分时遇到问题,即使它们是空的也是如此。

我的代码:主要 Action :

public PartialViewResult MyTasks(int milestoneId, int currentPage = 1)
{
var mergedTasks = new List<MergedTask>();
var TrackingTeams = _TrackingTeams.GetAll().ToList();
var pagingInfo = new PagingInfo() {CurrentPage = currentPage, ItemsPerPage = 10, TotalItems = _TrackingTeams.GetAll().Count() };
mergedTasks.AddRange(from TrackingTeam in TrackingTeams
let task = allTasks.Single(x=>x.TestId == (int)TrackingTeam.TrackingTask.TestId)
select new MergedTask()
{
Summary = TrackingTeam.TrackingTask.Description,
InternalId = task.Id,
DevTrackingTask = TrackingTeam.TrackingTask,
LastUpdate = task.DateModified
});

return PartialView(new DevTrackingTaskViewModel
{
MergedTasks = mergedTasks,
Category = _categories.GetById(categoryId),
PagingInfo = pagingInfo
});
}

与之关联的 ViewModel:

public class TrackingTaskViewModel
{
public List<MergedTask> MergedTasks { get; set; }
public int CountTasks { get; set; }
public PagingInfo PagingInfo { get; set; }
public Category Category { get; set; }
}

public class MergedTask
{
public int InternalId { get; set; }
public string Summary { get; set; }
public TrackingTask TrackingTask { get; set; }
public DateTime LastUpdate { get; set; }
}

我的主要 PartialView:

@foreach (var item in Model.MergedTasks)
{
<script type="text/javascript">
$(document).ready(function () {
$("#TrackingTask@(item.TrackingTask.Id)").hover(function () {
if ($("#snapshotFixerForTrackTask@(item.TrackingTask.Id)").length == 1) {
$("#expandTrackingTaskForTask@(item.TrackingTask.Id)").removeClass("hide");
}
else {
$("#expandTrackingTaskForTask@(item.TrackingTask.Id)").toggleClass("hide");
}
});
});
</script>

<div class="TrackingTaskDiv" id="TrackingTask@(item.TrackingTask.Id)">
<div class="TrackingContainer">
<div id="flagsForTrackingTask@(item.TrackingTask.Id)" class="flags">
@{Html.RenderAction("ShowFlags", "Task", new { trackingid = item.TrackingTask.Id });}
</div>

<div id="TestStatusForTrackTask@(item.TrackingTask.Id)" class="TestStatusWrapper">
@{Html.RenderAction("CheckTrackStatus", "Task", new { trackingid = item.TrackingTask.Id });}
</div>
</div>
<div id="expandTrackingTaskForTask@(item.TrackingTask.Id)" class="expandTrackingTask collapsed hide"></div>
</div>
}

如果需要,我可以粘贴“ShowFlags”和“CheckTrackStatus”的操作。但正如我提到的,即使我从操作中删除所有代码,并且 View 渲染仍然需要 3-5 秒来渲染整个 View ,也没有区别。

我们提出的一个解决方案是完全删除部分内容,将每个部分的虚拟机放入主虚拟机中,并对部分内容中的 HTML 执行相同的操作。但我喜欢在 View 上划分特定功能的想法。

最佳答案

LanFeusT(好名字!!),

RenderAction 会导致性能开销,因为它会形成一个完整的 MVC 循环,而不是仅仅使用当前的 Controller 上下文。可能会建议您寻求替代方法(例如在 View 模型中包含所需的元素)。我也通过艰难的方式发现了这一点,只有在分析我的代码时,我才意识到每个新的 RenderAction 调用所进行的反射量(在 99% 的情况下,这既方便又合适)。

所以我的底线建议是——考虑扩展你的 View 模型。

我强烈建议您在 google 上搜索 RenderAction 与 RenderPartial 以获取更多信息。

参见:

RenderAction RenderPartial

关于asp.net-mvc - 嵌套的 RenderAction 渲染速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7099582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com