2012-07-12 16 views
6

Opracowujemy aplikację Sencha Touch 2, która korzysta z Phonegapa, aby móc zainstalować ją jako aplikację i uzyskać dostęp do pamięci urządzenia. Działa to bardzo dobrze na iPadzie 2 i iPadzie 3. Jednak kiedy próbowaliśmy uruchomić aplikację na urządzeniu z Androidem, wydajność była bardzo powolna. Głównymi elementami spowalniającymi system były listy i karuzele. Kiedy próbowaliśmy przetestować tę samą aplikację za pomocą przeglądarki Chrome, wydajność była podobna do tej na iPadzie.Sencha Touch 2 - Wydajność Androida

Czy masz jakieś sugestie co do tego, co możemy zrobić, aby poprawić wydajność Androida, być może nawet porzucić Phonegap na coś, co działa lepiej. Lub jeśli możemy wymusić działanie klawisza phonegap jako przeglądarki Chrome.

Dziękujemy za poświęcony czas & pomoc.

+0

Zobacz. Używam również karty telefonicznej i sencha. Ale do tej pory nie miałem z tym większego problemu pod względem wydajności. Może być nieco wolny dla niektórych funkcji natywnych, takich jak skanowanie kodów kreskowych i inne. Ale nie za dużo. Zasugeruję użycie najnowszego pliku corodova.jar. Może być 1.8 lub 1.9 –

+0

W rzeczywistości używamy wersji 1.9 Cordova, ale mimo to wydajność nie jest dobra. Muszę wspomnieć, że nie rozwijamy go jako aplikacji MVC, ponieważ był to nasz pierwszy projekt wykorzystujący Sencha, który musi wpływać na wydajność. Wiele osób wspomina, że ​​źródłem problemu jest Widok Sieciowy Androida, na którym działa Phonegap, najwyraźniej nie jest to dobre dla witryn podnoszących. – user1520547

+0

Ale używam architektury MVC. Tak więc część UI, robię używając Sencha Touch 2 i natywnej części używając phonegapa. Ale do tej pory wydajność jest dobra. –

Odpowiedz

12

Problem polega na tym, że przeglądarka Android nie używa akceleracji sprzętowej grafiki. Oznacza to, że standardowe sztuczki, których używa Sencha (i inne biblioteki HTML5, takie jak jQueryMobile, iScroll itp.), Zapewniają dobrą wydajność przewijania, taką jak transformacje CSS 3D, aby spowodować, że twoja lista będzie renderowana w osobnej warstwie, co może następnie przetłumaczone na sprzęt, nie będzie działać na systemie Android. Zamiast tego przewijanie listy będzie wykonywane całkowicie w oprogramowaniu, które będzie wolne!

Przeglądarka Chrome zapewnia jednak przyspieszenie GPU. Urządzenie z Androidem jest bardziej niż w stanie zapewnić dobrą obsługę HTML5, po prostu standardowa przeglądarka nie korzysta jeszcze ze sprzętu GPU.

Jeśli nie można zmusić użytkowników końcowych do korzystania z przeglądarki Chrome (w co wątpię), jedyną opcją jest obniżenie komfortu użytkowania i zapewnienie nieco prostszego interfejsu użytkownika Androida.

W celu uzyskania dalszych informacji, patrz "IMPROVING THE PERFORMANCE OF YOUR HTML5 APP"

+0

To wyjaśnia dokładnie, na czym polega problem, dziękuję. Nie, jak można się domyślić, nie jesteśmy w stanie zmusić użytkowników do używania chrome, ponieważ musimy przechowywać więcej niż 5 MB danych dla aplikacji, a więc localstorage nie wystarczy. Rzucę okiem na podany link, może uda nam się poświęcić odrobinę wizualnego odwołania, aby poprawić wydajność. – user1520547

0

Spróbuj ustawić tę flagę w swoim AndroidManifest.xml: android: hardwareAccelerated = "true"

+0

Próbowałem już tego, ale wydaje się, że nie działa, wydajność była dokładnie taka sama, gdy opcja była ustawiona na false. Próbowano również ustawić docelowy sdk na 15 (4.0.3), ale nadal bez skutku – user1520547

0

Aktualizacja: Uwzględniając teraz pracował z ST2 więcej już teraz wydajności wyzwania na Androida to tylko coś, co musisz zaakceptować. Jest wiele rzeczy, które możesz zrobić, aby uniknąć problemów z wydajnością, takich jak zmniejszenie liczby słuchaczy i zdarzeń, utrzymywanie światła DOM (poniżej 2000 węzłów) i generalnie unikanie jakichkolwiek transformacji i efektów CSS3 (w szczególności nie działają one dobrze na Androidzie)

Inną rzeczą, o której należy pamiętać jest to, że zamiast używać wbudowanego WebView, można użyć przeglądarki CrossWalk i osadzić ją w pliku APK.

https://crosswalk-project.org

Dodaje małą wielkość do APK (15-20MB), ale działa lepiej niż wbudowany w WebView i przynosi stabilności i spójności na bardzo rozdrobnionym platformy. Rozważ rzeczywistość, że każdy WebView na Androida w zależności od urządzenia, dostawcy i wersji systemu operacyjnego może być różny na małe sposoby. CrossWalk pozwoli ci mieć dokładnie tę samą wersję na wszystkich urządzeniach z Androidem 4.0+ i usunąć wszelkie problemy związane z urządzeniem lub dostawcą.

Nie ma srebrnej kulki do wydajności na Androida. Przyspieszenie grafiki nie poprawi wydajności wykonywania czystych javascript lub manipulacji DOM.Jeśli chcesz zrozumieć, dlaczego, a potem zacznij tutaj:

What's the difference between reflow and repaint?

Starsze Odpowiedź (może nadal być ważne):

Dla ICS i powyżej następującym ustawieniu na WebView znacząco poprawić wydajność renderowania dla Sencha dotyk na Androida:

mWebView.setLayerType(WebView.LAYER_TYPE_HARDWARE, null); 

jednak z mojego doświadczenia to wprowadzi artefakty do renderowania CSS w zależności od urządzenia i platformy VA racja. Nie znalazłem konkretnego powodu i nie spodziewam się, że Google go rozwiąże, ponieważ komponent podglądu strony zostanie zastąpiony nowszą i lepszą wersją w systemie Android 4.4.

https://developers.google.com/chrome/mobile/docs/webview/overview

Powiązane problemy