大家好我正在开发我在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秒太荒谬了。感谢您的时间。 干杯, 詹姆斯
答案 0 :(得分:1)
启动sql profiler / sql跟踪并查看在创建页面的单个http请求期间您正在执行的查询数。查询通常是导致性能问题的原因之一。仅仅渲染视图需要花费很多时间几乎是不可能的。
答案 1 :(得分:0)
您可能会在表中尝试显示太多记录。你应该使用分页。看一下datatables.net这是一个很好的jquery插件,可以帮助你进行分页。确保您使用的是server side processing。当然,您必须在代码中更改很多(服务器端和客户端)。
答案 2 :(得分:0)
您正在使用哪种浏览器?较旧的浏览器没有新版本的Javascript性能以及可能同时暴露或隐藏的面板数量,这无疑是导致问题的原因。
我同意处理分页的答案,这是一个很好的选择,可以一次性减少您呈现的数据量,或者您必须减少同时显示的元素数量。 Javascript执行不是即时的,在旧的浏览器上它真的很慢。