Lan*_*usT 7 asp.net-mvc performance partial-views
我有一个PartialViewResult操作,它呈现我从页面上的$ .ajax调用调用的PartialView.
PartialView还有一个用于VM中项目的foreach循环,在该PartialView中我有两个渲染另外两个Partial的RenderAction.
一切正常,除了它渲染的速度.当我注释掉两个嵌套的RenderAction时,主要的局部视图渲染速度非常快.当我取消注释它们时,主要局部视图呈现3到5秒.即使我从部分视图中删除所有数据并且从操作中删除所有数据只返回空视图,它仍然需要3-5秒.
不知何故,我的应用程序在呈现这两个部分时遇到问题,即使它们是空的.
我的代码:主要行动:
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; }
}
我的主要部分视图:
@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"的Action.但正如我所提到的,即使我从动作和视图中删除所有代码,渲染仍需要3-5秒来渲染整个视图,但没有区别.
我们提出的一个解决方案是完全删除部分内容,将每个部分的VM放入主VM中,并对部分中的HTML执行相同操作.但我喜欢在视图上划分特定功能的想法.
| 归档时间: | 
 | 
| 查看次数: | 1861 次 | 
| 最近记录: |