【问题标题】:How can I speed up my MVC asp.net website?如何加快我的 MVC asp.net 网站?
【发布时间】:2012-01-13 16:49:27
【问题描述】:

大家好,我正在开发我在 asp.net 中用 C# 构建的第一个 MVC 3 网站,我在网站速度方面遇到了一些问题,因为它需要超过 45 秒来扩展或收缩显示数据库的表。

我已经包含了我的 reportTemplate 代码,上面有我的 jquery

我一直在想如何使用缓存,但我担心当经理需要最新数据时数据不会是最新的

@{
ViewBag.Title = "ReportTemplate";
}

<script language="javascript" type="text/javascript">
$(document).ready(function () {

    toggle = function (className) {
        $('.' + className).toggle('fast');
    }


});

</script>

<h2>ReportTemplate</h2>

<p>
@Html.ActionLink("Create New", "Create")    
</p>
<table>
<tr>
    <th>
        INVESTMENT AREA
    </th>
    <th>
        MAJOR PROGRAM
    </th>
    <th>
        MANAGER
    </th>
    <th>
        PROJECT
    </th> 
    <th>
        SPA
    </th>
    <th>
        PA
    </th>                                 
</tr>

@{
string investment_area = "";
string major_program = "";
string manager = "";
string project = "";
string spa = ""; 
string pa = "";
string iaClass = "";
string mpClass = "";
string manClass = "";
string pjClass = "";
string spaClass = "";
string paClass = "";
}
    @foreach (var item in Model)
{
iaClass = item.investment_area.Substring(0, 2);
mpClass = item.major_program;
manClass = item.manager;
pjClass = item.project;
spaClass = item.spa;
paClass = item.pa;

    if (investment_area != item.investment_area)
{

<tr>        
  <td class = "ndeTable ui-widget-header pointer border" onclick="toggle('@iaClass')" colspan="6">
        @item.investment_area
    </td>
</tr>

}
investment_area = item.investment_area;

if (major_program != item.major_program)
{

<tr class="@iaClass">
<td style = "width :200px"></td>
    <td class = "ndeTable pointer border" onclick="toggle('@mpClass')" colspan="5">

    @item.major_program

    </td>
</tr>    
}
major_program = item.major_program;

if (manager != item.manager)
{                
<tr class = "@iaClass @mpClass">
<td></td>
<td style = "width : 100px"></td>
    <td class = "ndeTable pointer border" onclick="toggle('@manClass')" colspan="4">    
    @item.manager
    </td>                
</tr>
}
manager = item.manager;

if (project != item.project)
{
<tr class = "@iaClass @mpClass @manClass">

<td></td>
<td></td>
<td style = "width : 200px"></td>

   <td class = "ndeTable pointer border" onclick = "toggle('@pjClass')" colspan="3">
   @item.project
   </td>
</tr>
}
project = item.project;

if (spa != item.spa)
{
<tr class = "@iaClass @mpClass @manClass @pjClass">

<td></td>
<td></td>
<td></td>
<td style = "width : 325px"></td>

    <td class = "ndeTable pointer border" onclick = "toggle('@spaClass')" colspan = "2">
    @item.spa
    </td>
</tr>
}
spa = item.spa;


<tr class = "@iaClass @mpClass @manClass @pjClass @spaClass">
<td></td>
<td></td>
<td></td>
<td></td>
<td style = "width: 200px"></td>
    <td class = "ndeTable pointer border" onclick = "toggle('@paClass')" colspan = "1">
    @item.pa
    </td>           
</tr>

pa = item.pa;
}
</table>

与此同时,我将继续尝试优化代码,但如果有人有任何我可以使用的提示或技巧,我将非常感激,因为这在过去的几天里一直困扰着我,对于一个小型数据库来说,这一直困扰着我 45 秒很荒谬。感谢您的时间。 干杯, 詹姆斯

【问题讨论】:

  • “扩展/收缩”是什么意思? MVC 代码只会影响页面加载速度,不会影响任何 JQuery UI 活动。
  • 当您点击一个投资区域单元格时,该投资区域的子项应该扩展或收缩以显示或隐藏主要项目经理 spa 等......如果我含糊不清,我很抱歉这是我的第一个问题,我仍在研究正确的问题,感谢您的快速回复!
  • 有没有人认为这可能是 jQuery 调用的切换功能,因为这是网站的一部分,它确实减慢了一切。有没有其他方法可以让桌子扩大或缩小投资区域的孩子,而不会像现在这样非常慢?

标签: c# asp.net asp.net-mvc performance optimization


【解决方案1】:

启动 sql profiler/sql trace 并检查您在创建页面的单个 http 请求期间执行了多少查询。查询通常是性能问题的罪魁祸首。仅仅渲染视图几乎不可能花费这么多时间。

【讨论】:

  • 我已经启动了 SQL 分析器并开始了一个新的跟踪,但我到底在寻找什么?我应该寻找较长的跟踪持续时间还是大量的读写?我也要感谢您的快速回复!
  • 在这种情况下寻找大量的阅读。为获取页面的所有数据而发出的查询数是多少?具体来说,如果您使用的是 ORM,您可能会遇到 select n+1 问题。
【解决方案2】:

您可能会尝试在表中显示太多记录。您应该使用分页。看看datatables.net 这是一个很好的 jquery 插件,可以帮助你进行分页。确保您使用的是server side processing。当然,您将不得不对代码进行大量更改(服务器端和客户端)。

【讨论】:

  • 我不能真正使用分页,因为这个网站需要快速浏览当前项目和投资领域。这就是我使用切换按钮的原因,以便所有信息都在一个页面上,以便技术受损的人轻松访问。感谢您的快速回复!
  • 页面上显示多少行?另外,您可以发布您在服务器端执行的数据库查询吗?
  • 貌似跟sql查询没什么关系 我肯定认为是toggle功能 我只是把toggle改成slideToggle 提高了20秒的速度
【解决方案3】:

您使用的是哪种浏览器?较旧的浏览器不具备较新浏览器的 Javascript 性能,而且您可以同时公开或隐藏的面板数量无疑是导致问题的原因。

我同意处理分页的答案,这将是一个不错的选择,减少您一次性呈现的数据量,或者您必须减少同时显示的元素数量。 Javascript 的执行不是即时的,在旧的浏览器上它真的很慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多