16

Ora sono su iOS, ma la domanda si applica anche ad Android. Sto guardando il grafico della memoria in Xcode e la mia app si blocca ogni volta che raggiunge circa 240 MB, credo che iOS lo stia uccidendo perché sta richiedendo troppa memoria.Come è possibile controllare l'utilizzo della memoria in Cordova?

È possibile farlo in modo anomalo spostandolo tra le pagine nell'app. (È una SPA, rendering HTML lato client.) Se smetto di navigare per un minuto, la memoria scenderà a 140 MB.

Ecco stessa pagina in OSX Chrome:

enter image description here

In questo caso, dopo la cessazione di navigazione, la memoria non diminuisce su di essa la propria. Invece, il precipizio alla fine del grafico mi sta premendo il pulsante Garbage Collection (lo abbassa da 170 MB a 60 MB).

Come si blocca la mia app?

  1. Esiste un equivalente del pulsante di garbage collection che posso chiamare in Cordova?
  2. Posso ottenere iOS per assegnare alla mia app uno spazio di memoria speciale?
  3. Se l'utente naviga tra le pagine X volte nell'arco di un minuto, posso attivare una schermata di timeout che indica loro che non è possibile utilizzare l'app per il minuto successivo mentre la raccolta dati inutili passa XD
  4. Qualsiasi modo per ridurre l'utilizzo della memoria in salita, dato che JS sta eseguendo il rendering HTML?

Inoltre, ecco il grafico Chrome con nodi HTML: cresce proporzionalmente ma i nodi rimangono allo stesso livello dopo la garbage collection.

enter image description here

+0

hai profilato questo su iOS, soprattutto per le perdite? sembra una gran quantità di memoria quando si considera ciò che rimane per le app dopo che la memoria affamata di iOS prende il suo chilo di carne nel dispositivo. E non conosco alcun modo per far sì che iOS ti assegni memoria extra, anche per le app "native". – YvesLeBorg

+0

Correggetemi se ho torto, ma credo che poiché tutto sta accadendo in UIWebView, la creazione di profili in devtools dovrebbe catturare le stesse cose che il profiling di iOS avrebbe catturato? E dal momento che il cumulo è passato alla linea di base dopo la raccolta dei rifiuti, ciò significa che non ci sono perdite? – Loren

+1

duh, mio ​​male. Ho cercato nel codice iOS nativo e ho trovato qualcosa di strano. Pubblicando una domanda su github, tornerà con la risposta. – YvesLeBorg

risposta

4

Si potrebbe provare a utilizzare il plugin WKWebView, che a volte può ridurre l'utilizzo della memoria per iOS apps Cordova.

+0

Felice di sentire che ha funzionato così bene! Questo è un miglioramento fantastico. – Reubend

+0

In realtà, penso che la memoria di WKWebView non debba essere inclusa nel grafico di memoria XCode [1], perché ricevo ancora avvertimenti di memoria e arresto anomalo. Penso meno spesso però. [1] https://github.com/practicalmeteor/meteor-wkwebview/issues/1#issuecomment-130521832 – Loren

+0

@Reubend Esiste qualcosa del genere per Android? – VaTo

Problemi correlati