2011-03-03 7 views
0

나는 대안을 찾을 곳이나 문제를 식별 할 수있는 방법에 대한 아이디어를 고맙게 생각합니다. (이것은 C# .Net 3.0 응용 프로그램입니다.).Net Web Form에서 Div의 String 형식의 HTML이 매우 느리게 렌더링됩니다.

4 개의 텍스트 상자가있는 마스터 페이지가 있습니다. 사용자가 텍스트 상자 중 하나에 텍스트를 입력하면 javascript 호출이 트리거되어 마스터 페이지의 IFrame 안에있는 검색 결과 페이지를 새로 고칩니다.

검색 결과 페이지가로드되면 검색 기능을 호출하는 '< % = results %>'속성이 호출됩니다. 검색 함수는 SQL Server 데이터베이스에서 XML 문자열을 검색하여 XmlDocument로로드하고 XLST를 사용하여 결과를 stringWriter로 변환하여 "results"속성으로 되돌립니다.

XSLT 출력은 약 24 개의 열과 행을 강조 표시하기위한 행의 JavaScript 및 선택한 행을 편집하기위한 새 화면으로 이동하기위한 각 행의 일부 링크로 구성된 표입니다.

최대 100 개의 행이 적시에 작동합니다. 200 개의 테이블 행에 도달하면 지연 시간이 눈에 띄게됩니다. 500 행에서 렌더링하는 데 약 12-15 초가 소요되고 1000 행에서 90 초가 걸립니다. 가능한 3000 개의 레코드가 있으며 사용자는 정렬, 분석 및 내보내기를 위해 모든 행을 반환하는 옵션을 원합니다. 그래서 더 나은 마우스 트랩이 필요합니다.

지연은 Internet Explorer 8.0을 사용한 브라우저 렌더링에 전적으로 있습니다. Google 크롬을 사용하면 1000 행에 약 7 초가 걸립니다. 또한 추가 테스트 코드를 사용하여 xslt 변환의 html 출력을 파일로 작성하여 출력이 제대로 형성되고 아무런 문제가 없는지 확인합니다. 로컬 컴퓨터의 저장된 파일을 탐색하고 새 브라우저 창에서 1000 개의 행을 탐색했으며 브라우저에로드하는 데 약 5 초가 걸립니다. 그래서 IFrame의 웹 양식에 직접로드하는 데 90 초가 걸리는 이유는 무엇입니까?

아무도 실마리가 나고 문제를 해결하는 방법에 대한 단서가 있습니까? 이 너트를 갈라지는 더 좋은 방법이 있습니까? XSLT 출력을 파일에 저장하고 IFrame에로드하면 더 좋을까요? 아니면 xslt 스크랩하고 그냥 response.Write 루프를 사용해야합니까?

+0

코드를 추가 할 수 있습니까? 이 방법을 추측하는 것은 조금 어렵습니다. – Bazzz

+0

죄송합니다.이 포럼을 처음 사용했습니다. 댓글 영역에 붙여 넣기 만합니까? –

+0

변환에 90 초가 걸리십니까? 주제 끄기 : Emacscript의 이벤트는 이벤트 캡처 및 이벤트 버블 메커니즘에 의해 올바르게 처리되어야합니다. 즉, 공통 조상에 하나의 요소 만 등록하면됩니다. –

답변

0

이전의 최적화되지 않은 솔루션으로 문제가 발생했다고 생각합니다.

우선, 의 사실을 지적 하겠지만 AJAX가 현대적이고 지원되고 최적의 솔루션 인 경우 iframe 접근 방식을 사용해야하는 이유는 무엇입니까?.

서버 처리는 일부 서비스 (HTTP 바인딩이 있고 인터넷 정보 서비스에서 호스팅되는 Windows Communication Foundation)에서 수행해야하며 JSON 데이터 계약 직렬기를 사용할 수 있습니다. 반환 된 데이터는 줄어들 것입니다. 이것은 매우 가벼운 통신이며 극적으로 증가하는 네트워크 성능/사용량입니다.

JSON을 사용하면 더 쉽게 작업 할 수 있습니다. JSON 결과를 런타임에서 생성 된 DOM 요소로 변환하는 것은 쉽습니다. 결과를 반복하고 jQuery를 사용하여 테이블 행을 빠르게 만들거나 (또는 ​​ASP.NET 4.0으로 전환하여 클라이언트 측 데이터 바인딩의 이점 (http://msdn.microsoft.com/en-us/magazine/cc972638.aspx)을보다 쉽게 ​​만들 수 있습니다 (사용자가 할 수 있는지 모르겠다. !)

jQuery 또는 다른 JavaScript 클라이언트 API를 사용하여 WCF JSON 지원 서비스를 호출하는 것은 쉽고 개발 시간을 절약 할 수 있으며 응용 프로그램 성능과 응답 성을 크게 높일 수 있습니다.

여기에 WCF, JSON 및 클라이언트 측 서비스 호출을 사용하는 방법에 대한 ASP.NET 3.5 예제가 있습니다. http://dotnetslackers.com/articles/ajax/JSON-EnabledWCFServicesInASPNET35.aspx

+0

이 길을 가기 전에 JSON 데이터를 제공하기 위해 WCF를 만들었고 데이터 패킷의 최대 한도에 도달하여 끝까지 작은 덩어리로 데이터를 수신하는 루프를 만들어야했습니다. 또한 웹 양식에서 그리드보기를 사용하려고 시도했지만 데이터를 렌더링하는 속도가 매우 느립니다. 필자는 SQL 쿼리와 XSLT 파일에서 XML 출력을 약 5 분 만에 조정할 수있는 기능과 시간이 지남에 따라 관리하기가 더 쉽다고 생각했기 때문에 해결책을 찾았습니다. 재 컴파일은 거의 필요하지 않았습니다. 진정한 AJAX 솔루션을 좋아할 것입니다. –

+0

하지만 페이징없이 모든 데이터를 얻고 싶다고 생각합니다. "진정한 AJAX 솔루션"에서는 저장소에서 5,000 레코드를 클라이언트로 전송하지 않으므로 페이징으로 수행 할 수 있습니다. 페이징은 그리드보기와 같은 데이터 탐색을위한 최적의 최적 솔루션입니다. 어떻게 생각해? –

관련 문제