2014-09-28 9 views
9

Mam aplikację PhoneGap. Gra na płótnie HTML5. Wygląda na to, że zużywa znacznie więcej pamięci w systemie iOS 8 (w tym 8.0.2) i iOS 7.PhoneGap zużywający więcej pamięci w systemie iOS8 niż iOS7

Oprócz używania większej ilości pamięci, Garbage Collector JS wydaje się nie zwalniać pamięci, którą trzyma. Pobiera "pamięć" zwalnianą poprawnie, ale nigdy nie zwalnia jej z powrotem, aby użyć iOS.

Oto wykorzystanie pamięci przy użyciu alokacji instrumentów w systemie iOS 7 za pomocą iPhone'a 5S. Jak widać, przesuwa się w górę iw dół, gdy ładuję i zwalniam poziom. Również zużycie pamięci jest bardzo niska, na poziomie około 23MB, maxing na 41.81mb

PhoneGap Canvas app running under iOS 7

Tu jest taka sama aplikacja działa na iPhone 5S z iOS 8.0.2. Jak widać zużycie pamięci nigdy nie spada i wykorzystuje znacznie więcej pamięci. W rzeczywistości zużycie pamięci stale rośnie, gdy ładuję i rozładowuję ten sam poziom. Nie rośnie tak wysoko, co pozwala mi sądzić, że JS poprawnie wykorzystuje pamięć z Garbage Collectora, ale GC nigdy nie wydaje się wolnej pamięci, która zatrzymuje się na systemie operacyjnym. Również cała aplikacja wydaje się zużywać znacznie więcej pamięci niż wcześniej.

Ta aplikacja działa również wolniej i osiągnęła 121 MB podczas jej zatrzymywania.

PhoneGap Canvas app running under iOS 8

należy dodać, że podczas rozładunku poziom I ponownie załadować stronę, która ciekawie nie zwolni żadnej pamięci pod iOS 8.

Czy ktoś ma jakieś pomysły co może być przyczyną tego problem i jakie może być rozwiązanie? Czy to błąd w systemie iOS 8?

W wersji 8.0 (ale nie w wersji 8.1) można skorzystać z obejścia/hackowania: dzwoniąc pod numer window.location.reload(true);, aby wymusić przeładowanie strony przy użyciu window.location.href =. Od 8.1 ten hack/obejście nie działa.

+1

To może być związane (lub równe) do tej kwestii: https://issues.apache.org/jira/browse/CB-8002 Jeśli możesz, proszę to sprawdzić i dać nam znać, jeśli to może być ten sam problem. Jeśli tak, myślę, że dostępna jest wersja łatki (patrz uwagi w bilecie jira). – sandstrom

Odpowiedz

4

W końcu rozwiązany.

PhoneGap domyślnie używa UIWebView z powodu błędu ładowania pliku w WKWebView. Powyższy błąd występuje tylko w UIWebView.

Zainstalowałem następującą wtyczkę, która naprawia błąd ładowania pliku w WKWebView. Pozwoliło mi to użyć WKWebView, który nie ma powyższego błędu w pamięci.

https://github.com/Telerik-Verified-Plugins/WKWebView

+1

Używam tej wtyczki, którą zasugerowałeś, która utrzymuje niskie zużycie pamięci, ale po pewnym momencie ładowania arkuszy sprite'owych, aplikacja trafia do piekła. Nie powoduje awarii ani nie wyświetla dużego zużycia pamięci, ale działa z prędkością 2 klatek na sekundę. Nie tylko element canvas, ale wszystko. Słyszałem, że istnieje pewien punkt, w którym stanie się to podczas ładowania obrazów (bitmapy o wartości 12000 x 12000). Nie potrzebuję wszystkich bitmap na raz, więc również próbuję twojej drugiej sztuczki z nadzieją na ponowne załadowanie w 8.2, to działa znowu, ale obrazy wydają się żeby gdzieś się trzymać i spowolnić wszystko. Jakieś sugestie? – bmanderscheid

+0

Cześć Nitzan, walczę z tym samym problemem. Dzięki za link do wtyczki! Jednakże, używając go faktycznie zgłosić problem wzrostu pamięci w procesie "com.apple.webkit", a aplikacja w końcu zawiesza się. (https://github.com/Telerik-Verified-Plugins/WKWebView/issues/112) Czy obserwujecie podobne zachowanie? Z góry dziękuję za pomoc. Pozdrowienia. – Marc

Powiązane problemy