2012-03-23 33 views
8

Stiamo lavorando all'applicazione HTML5 per dispositivi mobili (Android + iOS). Ma il grande problema è il consumo di memoria - l'utilizzo della quantità di memoria sta aumentando molto velocemente e l'app si affievolisce.Consumo di memoria del webkit mobile

Quali sono le migliori pratiche, suggerimenti, strumenti, soluzioni, ecc. Per combattere le perdite di memoria nelle applicazioni HTML (JavaScript)?

P.S. Abbiamo scelto come target solo i browser Webkit

risposta

7

Recentemente ci sono stati degli articoli davvero fantastici su questo argomento. Ci sono alcune fonti davvero sorprendenti di creazione di oggetti che non attirano la tua attenzione a meno che tu non sia sintonizzato su di esso. In genere, il problema non è l'utilizzo della memoria, in realtà sono i cicli di raccolta dei dati inutili necessari per raccogliere la memoria che l'app sta lentamente perdendo.

Questo articolo è la migliore che ho letto di recente sul tema: http://www.scirra.com/blog/76/how-to-write-low-garbage-real-time-javascript

quanto riguarda gli strumenti per combattere/diagnosticare il problema, Speedtracer di Google Chrome viene in mente. Ovviamente, la messa a punto per Chrome non garantisce l'ottimizzazione per tutti i browser, ma la maggior parte delle cose che determinano la creazione di oggetti in Chrome sono comuni alle specifiche JS in quanto implementate da tutti i browser.

Una cosa importante da considerare è che l'utilizzo della RAM e l'utilizzo della RAM video non sono gli stessi. Una buona pratica consiste nel determinare quali porzioni della tua interfaccia utente vengono accelerate dall'hardware e assicurarsi che siano di dimensioni ridotte (ad esempio si adattano allo schermo tutte in una volta). Se si ha un'enorme porzione di scorrimento dello schermo accelerata, si otterrà lo strappo/piastrellatura della GPU e lo scorrimento lento. È possibile rilevare questo in parte utilizzando il simulatore iOS. Questo articolo illustra brevemente l'idea: http://devinsheaven.com/turn-your-iphone-wacky-and-make-your-iphone-application-better/

Infine, ci sono un sacco di schemi di perdita di memoria molto comuni in JavaScript che ogni ingegnere incontra di tanto in tanto. IBM ha una buona lista di loro. Non posso pubblicare più di due link perché sono un n00b, ma puoi usare Google per "Common JavaScript Memory Leaks" ed è probabilmente il primo risultato.

3

Alcuni altri strumenti diagnostici che le persone potrebbero trovare utili in Chrome sono Task Manager, Pannello Timeline e Heap Profiler.

Browser - Chrome Canary (27.0.1447.3 canarino)

  • Task Manager: Vai Strumenti -> Task Manager // Fare clic sulla scheda delle rubriche e controllare 'JavaScript memoria' tab

  • Timeline: Strumenti -> Developer Strumenti- -> Timeline // fare clic su Registra, fare un po 'di interazione, quindi arrestare la registrazione

  • Heap Profiler: Strumenti -> Strumenti di sviluppo -> Profili // fare clic sul 'Take Heap Snapshot'

  • debug remoto

  • profonda Memory Profiler

"3 istantanea" tecnica // Presentation "Eliminare perdite di memoria in Gmail"

Problemi correlati