2012-12-06 2 views
1

매우 큰 응용 프로그램과 함께 arround를 설치해야합니다> 20 가지 기본보기와 양식이 필요합니다. mainview는 최소한 하나의 그리드를 포함 할 것이지만 최대 10 개의 그리드를 포함 할 수 있습니다. 또한 포털 패널이 포함 된 몇 가지 주요보기가 있습니다.거대한 응용 프로그램의 구성 요소를 캐시하는 방법

이제 mainview가 열릴 때까지 꽤 오랜 시간이 걸릴 것입니다. 20 개가 아닌 1 개로 테스트했을 때 문제가되지 않습니다. 응용 프로그램은 Borderlayout이있는 컨테이너를 보유하는 맞춤 레이아웃이 적용된 뷰포트 내에 배치됩니다. Mainview는 항상 가운데에서 렌더링되지만 다른 영역은 탐색에 사용됩니다. 탭 패널을

내 첫 번째 방법캐싱 일들이 내 첫 번째 방법은 숨겨진 탭이있는 탭 패널에 도착했다. 그것과 병렬로 MixedCollection보기가 이미 tabpanel에 삽입되었거나 작성되어야하는 경우 조회를 수행합니다. 이미 삽입 된 경우 MixedCollection에서 positon을 가져 와서 setActiveTab()을 실행합니다. 그러나 새로운 메인 뷰를 삽입하거나 setActiveTab()을 사용하여 기존의 뷰를 활성화하는 데는 동일한 시간이 걸리기 때문에 아무런 가치가없는 것 같습니다.

그래서 내가 뭘 잘못하고 어떻게하면 더 나아질 수 있습니까?

편집

문제는 rendertime에서와 구성 요소가 사용된다()마다 setActiveTab을 reredenred 얻을 것 같은 올 것으로 보인다. 센터 패널을 볼 때 최대 2-3 초가 걸립니다. 따라서 렌더링 및 크기 조정을 수행 할 필요가 없도록 이미 작성된보기를 캐싱하여 속도를 향상시킬 수 있다고 생각했습니다. 나는 북쪽 지역에서 메뉴가 매번 렌더링된다는 것을 언급해야한다고 생각하는데, 그것은 매번 맛볼 수 없지만 그다지 중요하지 않아야하지 않습니까? 보기가

을 전환하는 방법

은 내가 MENUE 뷰 메인 뷰 변경을 관리하는 별도의 컨트롤러를 가지고있다. 이를 위해 컨테이너가 제거되고 새 메뉴가 추가되고 주 뷰의 경우 뷰가 이미 생성 된 경우 해당 혼합 컬렉션에서 조회가 수행되고 탭 인덱스가 수신되면 탭이 수신되고 탭 활성화되었습니다. 그렇지 않으면보기가 새 탭으로 추가되고 그 뒤에 혼합 된 콜렉션에 대한 ident 및 index가 추가됩니다.

+0

뷰를 동적으로로드 할 수 있으므로 각 뷰가 필요할 때로드됩니다. 이게 너 니 뒤에 오는거야? – Izhaki

+0

@Izhaki 아니오, 대부분의보기 (클래스)는 이미 응용 프로그램 시작시 이미 있습니다. 편집을 참조하십시오 ... – seba

+0

아마 모든 구성 요소를 렌더링하고있을 것입니다. 우리의 응용 프로그램. 우리는 76보기, 109 모델, 66 컨트롤러가 있고 정말 빨리 다음 문제가 당신의 응용 프로그램의 크기에 작동하지 않습니다. 하지만 애플 리케이션. 코드가 대신 거기에 있습니다. 몇 가지 코드를 알려주십시오. – lontivero

답변

2

그것은 모든 전망 완료 후 Ext.resumeLayouts(true)을보기를 변경 시작하기 전에 당신은 Ext.suspendLayouts();을 실행 suspendLayouts()resumeLayouts()

살펴보고 도움이 될 수 있습니다.

많은 구성 요소가 중첩되어 있음을 의미하는 너무 많이 확인해야합니다.

예 : 그리드 당신이 탭 패널에 다음 추가 패널에서 그 그리드를 배치하는 경우 다음이 overnesting 할 것 탭 패널 내에서 유일한 구성 요소가

합니다.

+0

Omg ... 다른 사용자가 디스플레이 필드와 함께 이것을 사용하는 조언을 주었기 때문에 나는 어제 그것을 stumpled했습니다 ... 나는 그것을 시도 할 것입니다! 어쨌든, 답장을 보내 주셔서 감사합니다! – seba

+0

굉장! 그것은 일했다!! 그것은 일부 overnestings과 많은 연속적인 렌더링에 관한 것 같습니다! 정말 감사합니다! – seba

+0

당신은 환영합니다;) – sra

1

먼저 활성이 아닌 탭이 어쨌든 채워지는 것을 발견했습니다. 나는 이유를 모른다. 그러나 활성 탭이없는 스토어는 어쨌든로드되었습니다. 둘째로, 앱의 크기에는 별 상관이 없습니다. 우리는 많은 견해를 가지고 있으며 모든 것은 꽤 빨리 작동합니다. 대부분의 경우 달라집니다 :

  1. 먼저 중첩됩니다 - 코드를 검토하십시오. 더 적은 속도로 중첩합니다. 예를 들어 panel 대신 panel이 제공하는 모든 것을 필요로하지 않는다면 container를 사용하십시오. 이 모든 것들이 당신의 dom에 더 많은 div를 추가하기 때문입니다.
  2. 보기를 만드는 방법에 따라 다릅니다. 당신의 코드가 없다면 말하기가 정말로 어렵습니다. 왜 느린 지요. 어쩌면 탭을 열 때마다보기를 만들거나 다른보기로 이동할 수 있습니다.
  3. 마찬가지로 @sra는 suspendLayouts를 사용하려고합니다. 즉, 구성 요소를 추가 할 때마다 브라우저가 모든 항목을 다시 렌더링하지 않고 resumeLayouts 만 렌더링한다는 의미입니다.
  4. windows를 사용하는 경우 - destroy 대신 closeAction : hide를 사용하십시오.
  5. Ext.getCmp()를 사용하지 마십시오. 또한 심판이 신체에서 구성 요소를 검색하기 때문에 응용 프로그램의 속도가 느려질 수 있다고 들었습니다. 그러나 그것은 정보를 증명하지 못했습니다 :) component.down ('id'), component.up ('xtype')을 사용하면 본문이 아닌 구성 요소에서만 검색합니다.
  6. Ext.create ('Panel')를 사용하여 무언가를 할 때마다 컨트롤러에서보기를 만들지 마십시오. 그것은 매번 생성된다는 것을 의미합니다.
  7. 글로벌 이벤트를 적게 사용하면 앱 속도가 느려지므로

코드없이 문제가 무엇인지 말할 수 없습니다. 이것은 당신을 도울 수있는 유일한 요점입니다. 하지만 중첩을 바라는 내 제안과 방법 및 위치를 만드는 위치.

+0

귀하의 답변과 힌트에 감사드립니다. sra의 대답은 이미 문제를 해결했습니다. – seba

관련 문제