2010-02-26 5 views
0

에 IE6에서 매우 느립니다, 우리는 그것의 사실에 달렸다 매우 느린 30000 개 항목을 포함하는 데이터 소스에 대한 IE6 (AN을 입력 할 때 에 자동 완성 필드, IE가 응답하기 위해 몇 분 정도 걸립니다).자동 완성 YUI의 자동 완성 기능을 사용하려고 큰 데이터 세트

그러나 동일한 정확한 코드는 IE8에서 거의 실시간으로 작동합니다.

뭐가 잘못 되었나요? 어떻게 든 이걸 최적화 할 수 있을까요? IE6 + YUI 자동 완성은 그러한 대형 데이터 세트를 위해 설계되지 않았습니까? "키 누르기를 잡아 검색 JS 기능의 경우 실행

<span id="port_autocomplete" class="yui-skin-sam" style='position: relative;'> 
     <input type='text' id='selected' maxlength=10 name='selected' 
       value='' isSelected=1 onkeyup="searchOnEnter();"> 
     <div id="autocomplete_container" style="position: absolute"></div> 
    </span> 

searchOnEnter 함수는 표준이다 : 그것을 사용하는 HTML을 여기

Y.namespace('YAHOO.program'); 
Y.program.AllTreeItemsArr = new Array(); 
// Populate the array with 30000 elements 
Y.program.BasicLocal = function() { 
     var oDS = new YU.LocalDataSource(Y.program.AllTreeItemsArr); 
     oDS.responseSchema = {fields : ["portfolio"]}; 
     var oAC = new Y.widget.AutoComplete("selected" 
              , "autocomplete_container", oDS); 
     oAC.prehighlightClassName = "yui-ac-prehighlight"; 
     oAC.useShadow = true; 
     oAC.typeAhead = true; 
     oAC.queryDelay = .05; 
     oAC.typeAheadDelay = .5; 

     return { 
      oDS: oDS, 
      oAC: oAC 
     }; 
    }(); 

그리고 것 :

다음은 Autocompleter에 초기화 우리의 코드입니다 키 == 13 ".

+0

일부 프로파일 데이터없이 말을하기 어렵다. Dynatrace (내가 생각하는 IE6을 지원합니다)로 응용 프로그램을 프로파일 링 해보십시오. http://ajax.dynatrace.com/pages/ 데이터의 더 작은 하위 집합으로 무엇이 느리게 실행되는지보십시오. –

+0

여기서 질문은 어디에 있습니까? 물론 IE6는 느리고, 그런 큰 데이터 세트로 초기화하는 이유는 무엇입니까? – ChaosPandion

+0

@Chaos : 질문은 "우리가 뭔가 잘못하고있는 것입니까? 어떻게 든 최적화 할 수 있습니까? IE6 + YUI 자동 완성 기능이 그러한 대형 데이터 세트를 위해 설계되지 않았습니까?" – DVK

답변

1

명백한 대답은 IE에는 느린 JS 엔진이 있고 30000 레코드는 많은 양의 데이터입니다. 그러나 필터링 작업에는 문제의 근원 일 수있는 하나의 호출이 포함됩니다. 아웃이 패치를 시도하고 차이가 있는지 확인 :

http://gist.github.com/316358

+0

@ 루케 - 나는 그것을 확실히 시도 할 것입니다. YUI에서 변경된 사항을 문의해도 될까요? 나는 YUI의 네이티브 filterResults의 논리를 비교하려고 시도했는데 유이의 "문자열 만 시작"로직에 대한 지원을 제외하면 거의 동일하게 보입니다. – DVK

+0

몇 가지 미세 최적화 이외에 주목할만한 것들을 제외하면 핵심 줄은 입니다. oParsedResponse = YAHOO.widget.AutoComplete._cloneObject (oParsedResponse); 모든 30000 개의 레코드가 포함 된 필터링되지 않은 응답의 전체 복사본을 작성했습니다. 내가 말할 수있는 한 필요한 것은 아닙니다. – Luke

+0

패치는 다소 도움이되었지만, 결국 충분하지 않았습니다 - 우리는 또한리스트를 26 개의 해쉬 된 서브리스트로 나눠야했습니다 : ( – DVK