0

특정 실험실 웹 응용 프로그램 (ASP.NET으로 작성)을 수정하려고합니다. 최종 사용자가 바코드 스캐너를 사용하여 데이터를 입력하는 빠른 데이터 입력에 사용되는 페이지가 있습니다. 샘플 (또는 테스트 튜브)의 바코드를 스캔 할 때마다 바코드를 기반으로 실제 데이터를 텍스트 필드에 입력하고 브라우저가 다음 필드로 이동할 것을 지시합니다. 검색중인 두 개의 바코드와 데이터 입력을받는 두 개의 텍스트 필드가 있습니다. 데이터의 변경이 필요 없기 때문에 다른 필드의 많은 부분 (실제로 모두 모두)이 이미 특정 샘플 트레이에 기본값으로 설정되어있을 수 있습니다. 이 데이터 입력은 모두 속도에 관한 것입니다. Tabbing (onblur 이벤트)이 WCF 서비스에 AJAX 호출을 사용하도록 양식을 수정했습니다. 매우 빠릅니다. 문제는 양식을 제출하여 시험을 저장하는 것입니다 (표본 표본 기반). 양식은 전체 페이지 다시 게시를 사용합니다. 내 목표는 결국 백 엔드 아키텍처를 다시 디자인하여 데이터를 저장할 때 전체 페이지 포스트 백을 제거하고 WCF AJAX 호출을 사용하는 것입니다. 하지만 지금은 페이지가 왜 그렇게 느린 지 알아 내려고하고 있습니다. 실제로 속도 저하를 유발하는 포스트 백입니다. 몇 가지 SQL 쿼리가 속도를 늦추고 있습니다. 속도 저하가 드롭 다운에 포함되어 있다고 생각합니다. 여기에는 11,000 개의 콜렉션 사이트가 포함되어 있습니다. 목록은 페이지가로드 될 때마다로드됩니다. 이 드롭 다운에서 많은 데이터로 페이지 로딩 시간을 단축 할 수있는 방법이 있습니까? 이 드롭 다운을 상위 5-10 개의 일치 항목 (Google의 검색 방식과 유사)을 사용하는 자동 완성 컨트롤로 변경하거나 드롭 다운을 유지하면서 실적을 향상시킬 수있는 방법이 있지만 페이지로드를 줄이는 방법이 있습니까? 시각? 현재 페이지를로드하는 데 약 3 초가 걸립니다. 누구든지 페이지 로딩 시간을 단축하는 방법을 알고 있습니까?드롭 다운 목록 값 및 페이지 크기에 추가하는 viewstate 따라서 페이지 로딩 시간이 증가합니다.

================= 몇 가지 변경을

2011년 9월 16일 갱신

. 이는 유효성 검증 오류없이 양식을 제출 한 시점을 기준으로합니다. 아직 캐싱을 구현하지 않았습니다. 처음에는 여분의 시간이 어디에서 왔는지 이해하고 싶습니다. ?? 아는 사람 있나요? (: 2.79s 온로드) -에서 11,000 모음 사이트를 제거

2.8s (온로드 3.55s) - - 원래 코드
2.5s (온로드 3.47s)하지 배치는 ​​드롭 다운 목록 주위
2.22s를 확인 Page.IsPostback 드롭 다운 및 거기에 하나의 클라이언트 이름을 넣는 것뿐만 아니라 누락 된 클라이언트 옵션 (맨 위)에 대한 하나 더하기

Firebug Net 탭이 이러한 시간을 어떻게 추가하는지 이해하지 못합니다. 그들은 총 시간을 합산하지 않습니다. 왜 그랬을까요? 여분의 지연은 어디서 오는가?

enter image description here 마지막 변경 후

356 ms 
1 ms 
1 ms 
0 ms 
2 ms 
4 ms 
5 ms 
12 ms 
4 ms 
13 ms 
24 ms 
11 ms 
12 ms 
11 ms 
13 ms 
16 ms 
11 ms 
33 ms 
20 ms 
29 ms 
12 ms 
2 ms 
2 ms 
67 ms 
9 ms 
2 ms 
2 ms 
15 ms 
2 ms 
3 ms 
16 ms 
1 ms 
1 ms 
2 ms 
1 ms 
3 ms 
6 ms 
6 ms 
5 ms 
5 ms 
1 ms 
2 ms 
========= 
743 ms (total doesn't match ???) 

코드 :

Public Overrides Sub BindNonViewstateLists() 
     'bind the client name drop down list, and keep track of the old value 
     'and whether or not it changed. Note that we will only use clients with 
     'status in a configurable list. 

     If (Not Page.IsPostBack) Then 
      'Dim clientDataTable As System.Data.DataTable = ApplicationContext.ClientManager.LoadAllForDDL(ApplicationContext.WorkflowConfig.WorkFlowDefinition("QuickDataEntry").GetSetting("ClientStatuses", "1"), "client.name", "client.identifyingnumber") 
      'ApplicationContext.DropDownListHelper.BindDDL(DDLClientName, clientDataTable, "Text", "Value", String.Empty) 
      Dim li As New ListItem("--- Client not available ---", CType(0, String)) 
      DDLClientName.Items.Insert(0, li) 
      Dim li2 As New ListItem("Testing Client", CType(54321, String)) 
      DDLClientName.Items.Insert(1, li2) 
     End If 
... 
+0

당신이 모든 게시하거나 처음에 드롭 다운에 데이터를로드 마십시오가는 것보다 더 깊은 약간에 슬쩍 dynaTrace는 AJAX 버전을 사용해보십시오? – slobodans

+0

방금 ​​다시 게시 할 때마다 목록을로드하는 줄의 디버깅을 켭니다 (샘플이 표본에 대해 테스트가 저장 될 때마다). 드롭 다운 목록을 채우는 메소드에 대한 호출을 둘러싼 어떤 코드를 권해 주시겠습니까? (내일 다시 온라인 상태가 될 것입니다.) – MacGyver

+0

응용 프로그램이 모든 포스트 백의 드롭 다운 목록에 새 항목을 추가하지 않으면 전체 목록 데이터를로드 할 수 있으며 데이터는 포스트 백 사이의 viewstate에 저장됩니다. 따라서 모든 다시 게시 할 때마다로드 할 필요가 없습니다. – slobodans

답변

1

자바 스크립트 (압축 풀기/구문 분석/실행)가 UI 스레드를 차단하고있는 것 같습니다.

방화범이

+0

나는 다시 이것으로 돌아 간다. 나는 할 수 있으면 오늘 밤 이걸 풀고 싶다. 이 도구로 나를 도울 의향이 있습니까? – MacGyver

+0

물론, DynaTrace는 당신에게 무엇을 보여 줍니까? –

+0

처음으로 프로그램을 실행했을 때 워크 플로에 대한 보고서를 얻을 수 있었지만 거기에서 내 세션을 지웠고 이후의 모든 시간에는 보고서가 표시되지 않습니다. – MacGyver

0

마녀의 데이터는 포스트 백 사이에서 변경되지 않습니다 드롭 다운 항목을로드합니다. 페이지를 처음로드 할 때만 dropdowno에 데이터로드를 수행 할 수 있습니다. 이 같은

뭔가 :

if(!IsPostback) 
{ 
// Load dropdown data 
} 

드롭 다운의 콘텐츠 후에는 포스트 백 사이의 ViewState에 저장됩니다. 이렇게하면 다시 게시 한 후 페이지를 표시하는 데 필요한 시간이 줄어 듭니다.

일종의 데이터 캐싱도 고려하십시오. 드롭 다운에서로드하는 데이터 양이 얼마나되는지 알 수 없습니다. 응용 프로그램 수준에서 캐시 될 수 있습니까?