2013-12-18 11 views
16

Tworzę aplikację internetową sencha za pomocą sencha touch 2.2.1. W mojej aplikacji mam ekran, który składa się z pojemnika, w którym dodałem wiele paneli. Pojedynczy panel składa się z dwóch paneli, panelu górnego i panelu wewnętrznego.Aplikacje sencha spowalniają renderowanie w wątku UI

Po zainicjowaniu strony, wywołuję api ajax, aby pobrać listę danych dla górnego panelu każdego elementu w kontenerze. i na górnym panelu kliknę, api api dla tego elementu, aby pobrać dane dla panelu wewnętrznego. Po zakończeniu wywołania api przekazuję dane do panelu wewnętrznego i sprawia, że ​​ten panel jest widoczny. Ten kod jest taki sam dla wszystkich elementów w pojemniku na klikniętym górnym panelu.

Na górze znajduje się również przycisk "expandAll", który wywoła api dla wszystkich elementów pętli for jeden po drugim i wyświetla dane dla każdego panelu wewnętrznego. Najpierw wywołuję jeden api, a następnie otrzymuję odpowiedź, którą przechowuję w pamięci i renderuję na ekranie, a następnie wywołuję następne api, jak to dla wszystkich przedmiotów.

getDetailData:function(params){ 
    var detailStore=Ext.getStore('DetailData'); 

    detailStore.load({ 
     callback:function(data,opt,success) { 
      detailStore.storeDetailData(data); 
      _this.onShowDetailData(data); 

      // now call next api from here until all items data fetched and displayed 
     } 
    }); 
} 

W tym przypadku pobierania wszystkich danych przedmiotów i renderowania na ui wątku trwa dłużej i aplikacja spowalnia.

Również podczas renderowania danych muszę zastosować filtry w magazynie, aby filtrować dane przed renderowaniem danych za każdym razem.

Chciałem wiedzieć, w jaki sposób należy wykonać tę pracę przetwarzania i renderowania. Ponieważ wywołanie api ajax i pobieranie danych z serwera nie zajmuje więcej czasu, przetwarzanie i renderowanie zajmuje więcej czasu.

Wszelkie suggessions na tym,

dzięki

+0

Ile elementów lub połączeń API w sumie mówimy tutaj? Jak złożone są szablony przedmiotów? – OhmzTech

+0

Minimum 10 i maks. 14 api połączeń, które robimy tutaj. I szablon elementu jest złożoną strukturą, Jeden panel z układem vbox i dwoma panelami w nim jako, 1. Panel (layout = hbox), w którym mamy 5 paneli i dwie listy 2. Panel (layout = hbox) , ponieważ mamy 6 list i dwa panele – nleshjinde

+0

Rozwiązałem problem z renderowaniem. Podobnie jak w przypadku każdego komponentu sencha, sencha tworzy dodatkową strukturę przez siebie. W mojej aplikacji użyłem więcej komponentów sencha ze złożonymi widokami i bardziej wewnętrznymi komponentami. Teraz użyłem pojedynczego panelu i tworzę pojedynczy html zamiast więcej komponentów sencha i bezpośrednio ustawiając ten ostateczny tekst HTML na panel jako setHtml. Tak więc w tym przypadku nadpisujemy strukturę sencha i następuje proste renderowanie. – nleshjinde

Odpowiedz

1

Myślę o oddzielając swoje dzieło panel z populacji danych. Oznacza to, że tworzymy panele podczas ładowania aplikacji, a kiedy tworzysz XHR, możesz po prostu przesłać dane do paneli i pokazać je, zamiast narzutów połączenia AJAX, tworzenia paneli i renderowania widgetów w tym samym czasie.

Można spróbować do paznokci w dół problemu profilowania JavaScript w zakładce profili Narzędzia Chrome dla programistów lub z zewnętrznych narzędzi takich jak profiler COMPUWARE za (użyłem go, gdy był dynaTrace):

http://www.compuware.com/en_us/application-performance-management/products/ajax-free-edition/overview.html

Jednak z mojego doświadczenia prawdopodobnie zobaczysz dużo czasu w metodach Sencha, co utrudnia zobaczenie, jakie zmiany są wymagane.

Wreszcie, starsze przeglądarki wykonują renderowanie znacznie wolniej niż nowsze przeglądarki. Jeśli unikniesz wsparcia dla IE 6, 7 i 8 - Twoja aplikacja Sencha będzie znacznie bardziej elastyczna!

1

Przede wszystkim zrobię profilowanie, jak sugerowano powyżej. Musisz odkryć połączenia API lub renderowanie layoutu jest wolne.

Zgodnie z moim doświadczeniem większość problemów z wydajnością wynika z złożonej struktury DOM. Sencha dodaje ogromną liczbę DIV dla każdego komponentu dodawanego do ekranu (wystarczy sprawdzić wynikowe źródło). Ma to znaczący wpływ na wydajność aplikacji.

Jeśli uważasz, że złożony układ jest przyczyną problemów z wydajnością, możesz ponownie rozważyć układ ekranu lub zamienić niektóre elementy sterujące sencha na zwykły HTML wyrenderowany w tpl kontenera.

+0

Od kiedy używa Touch Sencha, wygląda na to, że będzie to wieloplatformowa aplikacja mobilna. Z powodów, które opisałem powyżej, uważam, że Sencha Touch nie jest tak dobry, jak reklamowany pod względem wydajności mobilnej. Zastępowanie nieporęcznych komponentów Sencha zwykłym kodem HTML, o ile to możliwe, jest zdecydowanie najlepszą drogą. – ashack

+0

Zazwyczaj wydajność jest dobra na ekranie mobilnym. Jednak jeśli twoja aplikacja używa zwiększonego rozmiaru ekranu tabletów, to ten problem się pojawia. Większy ekran -> więcej kontroli -> wydajność jest do dupy. :) –

2

Proponuję nie używać paneli, chyba że masz. Przy dużej liczbie elementów będzie lepiej z dataview list z infinite checked to true. Spowoduje to renderowanie znacznie szybciej i zamiast tego możesz powiązać swoje interakcje z każdym elementem na liście. Jeśli robisz tylko znaczniki, powinien on renderować się znacznie szybciej. W przeciwnym razie każde dodanie wymaga układu.

Powiązane problemy