2012-12-19 5 views
1

dijit 위젯을 렌더링하는 가장 빠른 방법은 무엇입니까? 프로그램 방식이 선언문보다 빠르다는 것을 알고 있습니다. (Some reference)dijit 위젯을 렌더링하는 가장 빠른 방법

너무 느리게로드되는 사용자 정의 위젯이 있습니다 (콤보 상자, 버튼 및 기타 필터를 추가하는 데 사용되는 작은 dijit 위젯 등이있는 DataGrid입니다).
소스를 살펴보면, 모든 dijit 위젯은 프로그래밍 방식으로 생성되지만 삽입 된 DOM 노드는 프로그래밍 방식으로도 생성됩니다. "올바른"방법입니까?

나는이 위젯의 ​​렌더링 속도를 높이기 위해 노력하고있어 현재 내 선택이 프로그래밍 만든 위젯과 함께 DOM 노드를 만들 (내 회사가 struts2 + 속도를 사용)를 속도 템플릿을 결합하는 것 (위젯을 이미 만들어진 DOM 노드에 삽입하기 위해 placeAt 및 유사한 메소드 사용).
괜찮 으면 좋겠지 만 슬프게도 모든 CSS 클래스는 dijit에 의해 덮어 쓰여 지므로 다시 덮어 써야합니다. 이로 인해 합리적인 오버 헤드가 발생합니다. 템플릿에서

나는 이런 식으로 뭔가를 쓰기 :

<input id="idOfAnExistingDomNode" class="myCssClass" /> 

그리고 DOM 노드에 FilteringSelect을 삽입하는 나는이를 작성해야 :

var fieldSelect = new dijit.form.FilteringSelect({ 
    store : jsonStore, 
    searchAttr : "caption", 
    labelAttr : "caption", 
    selectOnClick : true, 
    value : "Content" 
}, "idOfAnExistingDomNode"); 
fieldSelect.domNode.className += " myCssClass"; 

마지막 줄이 필요 myCssClass이기 때문에 FilteringSelect 생성 중에 덮어 씁니다.
이 문제를 방지 할 수있는 방법이 있습니까?
또는 아마도이 문제를 잘못된 방식으로 수행하려고합니다. 나는 "속도 템플리트"에 대해 완전히 확신하지 못합니다.

주 : Dojo 버전은 1.5이며, 슬프게도 최신 버전으로 업그레이드 할 수 없습니다.

내 테리 영어를 용서해주세요.

답변

0

종종 위젯을 인스턴스화하는 더 빠른 방법 중 하나는 임시 div에서 해당 div를 만든 다음 해당 div를 DOM으로 옮기는 것입니다. 이 인스턴스화가 정확히 느린 것을 프로파일 링 해 보았습니까? 데이터를 기다리는 데 너무 많은 시간을 소비하는지 궁금합니다. 합리적인 페이지 크기 매개 변수가있는 그리드가로드하는 데 시간이 오래 걸리지 않기 때문에 일부 위젯과 그리드가 필요합니다.

클래스 문제는 기존 클래스에 dojo가 섞이지 않는 것이 이상합니다. 즉, 먼저 노드에서 조회를 수행하고 클래스 속성을 가져온 다음 FilteringSelect를 만들 때 mixin 객체의 클래스 속성으로 을 지정합니다. 그렇게한다면, 클래스를 따옴표로 묶어 두거나 이전 IE가 그것을 거절 할 것인지 확인하십시오.

+0

위대한 제안에 감사드립니다. 그러나 문제는 사실 페이지가로드 된 후에 트리거 된 아약스 호출 수가 많았습니다. – tonypolik

관련 문제