2014-09-28 19 views
9

Ho un'app PhoneGap. Un gioco Canvas HTML5. Sembra utilizzare molta più memoria in iOS 8 (compreso 8.0.2) vs iOS 7.PhoneGap che utilizza più memoria in iOS8 che in iOS7

Oltre a utilizzare più memoria, il JS Garbage Collector non sembra mai liberare la memoria che contiene. Raccoglie correttamente la memoria "liberata", ma non la rilascia mai indietro per iOS.

Ecco l'utilizzo della memoria utilizzando Allocazioni strumenti in iOS 7 con un iPhone 5S. Come puoi vedere, va su e giù mentre carico e scarica un livello. Anche l'utilizzo della memoria è molto bassa, intorno ai 23 MB, maxing a 41.81mb

PhoneGap Canvas app running under iOS 7

qui è la stessa applicazione in esecuzione su un iPhone 5S con iOS 8.0.2. Come puoi vedere, l'utilizzo della memoria non diminuisce mai e utilizza molta più memoria. In realtà l'utilizzo della memoria continua a salire per sempre mentre carico e scarica lo stesso livello. Non sale più in alto, il che mi fa pensare che JS sta riutilizzando correttamente la memoria dal Garbage Collector, ma il GC non sembra mai liberare la memoria che sta trattenendo sul sistema operativo. Anche l'intera app sembra utilizzare più memoria di prima.

L'app è anche molto più lenta e ha raggiunto 121mb quando l'ho interrotta.

PhoneGap Canvas app running under iOS 8

devo aggiungere che, quando lo scarico del livello ho ri-caricare la pagina, che curiosamente non liberare alcuna memoria sotto iOS 8.

Qualcuno ha qualche idea che cosa potrebbe causare questo problema e quale potrebbe essere la soluzione? Si tratta di un bug in iOS 8?

In 8.0 (ma non in 8.1) è possibile liberare utilizzando una soluzione alternativa: chiamare window.location.reload(true); prima di forzare una pagina di ricaricamento utilizzando window.location.href =. Da 8.1 questo hack/workaround non funziona.

+1

Può essere correlato (o uguale) a questo problema: https://issues.apache.org/jira/browse/CB-8002 Se è possibile, si prega di check it out e farci sapere se quello potrebbe essere lo stesso problema. Se è così, penso che ci sia una versione patch disponibile (vedi le note nel ticket di jira). – sandstrom

risposta

4

Finalmente risolto.

PhoneGap utilizza automaticamente UIWebView a causa di un errore di caricamento del file in WKWebView. L'errore precedente si verifica solo in UIWebView.

Ho installato il seguente plug-in che corregge il bug di caricamento del file in WKWebView. Questo mi permette di usare WKWebView che non ha l'errore di memoria sopra.

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

+1

Sto usando questo plugin che hai suggerito, che mantiene basso l'utilizzo della memoria, ma dopo un certo punto di caricamento dei fogli di calcolo, l'app va a rotoli. Non si blocca o mostra un utilizzo elevato della memoria, ma funziona a 2 fps. Non solo l'elemento canvas, ma tutto. Ho sentito che c'è un punto in cui questo accadrà durante il caricamento in immagini (12000 x 12000 valore di bitmap) Non ho bisogno di tutte le bitmap contemporaneamente quindi sto anche provando il tuo altro trucco con la ricarica che spera in 8.2 funziona di nuovo ma le immagini sembrano aggrapparsi da qualche parte e rallentare tutto. Eventuali suggerimenti? – bmanderscheid

+0

Ciao Nitzan, sto lottando con lo stesso problema. Grazie per il link del plugin! Tuttavia, il suo utilizzo segnala effettivamente il problema di crescita della memoria nel processo "com.apple.webkit" e l'app alla fine si arresta in modo anomalo. (https://github.com/Telerik-Verified-Plugins/WKWebView/issues/112) Stai osservando un comportamento simile? Grazie in anticipo per il vostro aiuto. Saluti. – Marc

Problemi correlati