2012-01-13 3 views
0

안녕하세요 모두 저는 asp.net에서 C#으로 작성된 첫 번째 MVC 3 웹 사이트에서 작업하고 있습니다. 데이터베이스를 표시하는 테이블을 확장하거나 축소하는 데 45 초 이상 걸리므로 웹 사이트 속도에 문제가 있습니다.MVC asp.net 웹 사이트의 속도를 높이려면 어떻게해야합니까?

는 나는 내가 캐시를 사용하지만이 관리자가 필요로 할 때 데이터가 최신이 아닐 것이라는 점을 걱정하는 방법을 알아 내기 위해 노력 해왔다

내 jQuery를 가지고 reportTemplate 내 코드를 포함했다 날짜 데이터까지

@{ 
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 초는 어리 석다. 시간 내 주셔서 감사합니다. 건배, James

+0

"확장/계약"이란 무엇입니까? MVC 코드는 JQuery UI 작업이 아닌 페이지로드 속도에만 영향을줍니다. – Lazarus

+0

투자 지역 셀을 클릭하면 해당 투자 지역의 아이들이 주요 프로그램 관리자 스파 등을 보여 주거나 숨기도록 확장하거나 계약해야한다고 가정합니다.이 질문이 모호하면 미안합니다. 여전히 올바른 질문을하고 신속한 답변을 부탁드립니다. – Goldentp

+0

누구나 jQuery가 호출하는 토글 함수가 될 수 있다고 생각합니까? 왜냐하면 그것이 모든 것을 정말로 늦추는 사이트의 일부이기 때문입니다. 지금과 같이 극도로 천천히 가지 않고도 투자 지역 아동을 확대 또는 축소시킬 수있는 또 다른 방법이 있습니까? – Goldentp

답변

1

SQL 프로필러/sql trace를 실행하고 페이지를 만드는 단일 HTTP 요청 중에 수행중인 쿼리 수를 확인하십시오. 쿼리는 종종 성능 문제로 인해 비난받을 수 있습니다. 보기를 렌더링하는 데 너무 많은 시간이 걸리는 것은 거의 불가능합니다.

+0

SQL 프로파일 러를 시작하고 새 추적을 시작했지만 정확히 무엇이 발생 했나요? 내가 찾는거야? 긴 추적 기간이나 많은 읽기 및 쓰기를 찾고 있습니까? 귀하의 빠른 응답에도 감사드립니다. – Goldentp

+0

이 경우 많은 읽기를 찾습니다. 페이지의 모든 데이터를 가져 오기 위해 발행 된 쿼리 수는 얼마입니까? 특히 ORM을 사용하는 경우 n + 1 문제를 선택했을 수 있습니다. – pkmiec

0

테이블에 표시하려고하는 레코드가 너무 많을 수 있습니다. 페이징을 사용해야합니다. datatables.net에서 살펴보세요. 페이징에 도움이되는 멋진 jquery 플러그인입니다. server side processing을 사용하고 있는지 확인하십시오. 물론 코드에서 많이 변경해야합니다 (서버 쪽과 클라이언트 쪽 모두).

+1

이 웹 사이트는 현재 프로젝트 및 투자 영역을 빠르게 볼 수 있어야하므로 페이징을 실제로 사용할 수 없습니다. 그래서 토글을 사용하여 모든 정보가 한 페이지에 표시되어 장애가있는 기술에 쉽게 액세스 할 수 있습니다. 그래도 고맙습니다. – Goldentp

+0

페이지에 몇 개의 행을 표시합니까? 또한 서버 측에서 실행중인 데이터베이스 쿼리를 게시 할 수 있습니까? –

+0

SQL 쿼리와는 아무 관계가없는 것처럼 보입니다. 토글 기능이라고 생각합니다. slideToggle로 토글을 변경하여 20 초 정도 속도를 향상 시켰습니다. – Goldentp

0

어떤 브라우저로 작업하고 있습니까? 이전 브라우저는 새로운 브라우저의 Javascript 성능이 없으며 동시에 노출되거나 숨길 수있는 패널의 수가 의심 할 여지없이 문제의 원인입니다.

나는 페이징을 다루는 대답에 동의한다. 그것은 한 가지 방법으로 제시하고있는 데이터의 양을 줄이거 나 동시에 드러내는 요소의 수를 줄여야하는 좋은 방법이다. Javascript 실행은 순식간이 아니며 오래된 브라우저에서는 정말 느립니다.

관련 문제