我怎样才能减少这个视图的渲染时间?

本文关键字:视图 时间 | 更新日期: 2023-09-27 18:10:22

我的视图渲染需要很长时间。它由一个由大约90条表记录填充的表组成。dB调用运行得非常快,但是需要一段时间才能显示所有记录。下面是导致运行缓慢的代码:

<table>               
    @for (int i = 0; i < Model.PositionEdits.Count; i++)
    {
        <tr>
            <td>
                @Html.DisplayFor(x => x.PositionEdits[i].PositionID)
                @Html.HiddenFor(x => x.PositionEdits[i].PositionID)
            </td>
            <td>
                @Html.DisplayFor(x => x.PositionEdits[i].PositionDescr)
                @Html.HiddenFor(x => x.PositionEdits[i].Description)
            </td>
            <td>
                @*editable*@
                @Html.DropDownList("Position",
                    new SelectList(Model.Positions),
                    Model.PositionEdits[i].Position)
                @Html.HiddenFor(x => x.OldPositions[i].Position)
                @Html.HiddenFor(x => x.PositionEdits[i].Position)
            </td>
        </tr>
    }
</table>  

我意识到分页可以解决我的问题,但我希望在同一页上显示所有~90条记录。是否有一种方法可以改善此视图以减少加载时间?

我怎样才能减少这个视图的渲染时间?

首先,如果你还在进行本地开发,特别是在Visual Studio中使用调试,那么现在绝对不是担心页面加载时间的时候。您正在处理一个非常轻量级的单头服务器,由于与Visual Studio及其工具的来回集成而产生了大量开销。页面加载时间没有意义。

一旦你有了一些可行的东西,你就可以将它部署到一个生产就绪的服务器环境中来测试性能。除非您在专用的web服务器上运行完全成熟的IIS,并且拥有实际的RAM和其他资源,否则任何性能测量都是没有意义的,因为它脱离了上下文。

如果它仍然很慢,我不认为它有任何可能(90条记录在一个实际的web服务器上使用完整的IIS,甚至少量的系统资源是微不足道的),你需要调查是什么部分真正减慢了你的速度。这些时间包括请求的初始传输、数据库查询、实际服务器生成响应的时间、将响应发送回用户的时间、浏览器呈现HTML和CSS所需的时间、针对CSS、JS文件和图像等额外资源发出请求/接收响应的时间,以及在页面上执行任何JS的时间。

使用浏览器的开发工具(Chrome在这方面有一个特别好的集合),你应该能够看到一个甘特图,表明每个请求发出的时间和获得响应所需的时间。不过,这只是故事的一部分。一旦您发现了一些需要关注的问题区域,您将需要额外的工具来进行更深入的挖掘。我个人使用的是Glimpse。这将为您提供非常详细的信息,了解流程的每个部分花费了多长时间,以及应用程序的哪些部分减慢了您的速度。解决这个问题需要采取的步骤很大程度上取决于实际导致问题的原因,这到目前为止仍然是一个谜。