Ho un'app Web che contiene un'enorme quantità di JavaScript generato. Il consumo di memoria varia di un fattore 6 tra l'esecuzione dell'applicazione Web in Chrome su un desktop rispetto all'esecuzione dell'applicazione Web in un UIWebView
su un iPad (aggiornato).Costrutti/modelli JavaScript da evitare su iOS Safari?
Quali costrutti o modelli dovrei evitare di ottenere il consumo di memoria su iOS alla pari con quello di Chrome?
Caratterizzazione del JavaScript generato:
- Il codice è generato da Haxe.
- Il codice è "orientato agli oggetti" in quanto fa un uso pesante di
prototype
, ma in un civilized way. - Il codice fa un uso pesante degli indici denominati sugli oggetti JavaScript per implementare le tabelle hash.
- Ci sono molte stringhe, ma quasi nessuna concatenazione di stringhe.
Non sembrano esserci perdite di memoria; l'eccessivo consumo di memoria su iOS viene visualizzato immediatamente dopo la costruzione degli oggetti Javascript (set fisso di).
noti che UIWebView utilizza un motore JavaScript più vecchio, esso esegue JS più lento di Safari su iOS. Se esegui il codice in Safari, viene eseguito abbastanza velocemente? –
L'app Web dovrebbe essere eseguita da Safari, utilizzo solo UIWebView per consentire a XCode di vedere il consumo di memoria, che è il problema (ad esempio Safari ricarica la pagina di tanto in tanto). La velocità di esecuzione non è davvero un problema. –
Safari mobile utilizza WKWebView così la tua app dovrebbe istanziare uno di quelli invece di fare il confronto. Si potrebbe anche voler aggiungere 'v8' e' javascriptcore' ai tag in modo che gli esperti in questi due motori JS possano pesare. –