Ich habe eine Web-App, die eine große Menge an generiertem JavaScript enthält. Der Speicherverbrauch unterscheidet sich zwischen dem Ausführen der Web-App in Chrome auf einem Desktop und dem Ausführen der Web-App in einem UIWebView
auf einem (aktualisierten) iPad um den Faktor 6.JavaScript-Konstrukte/-Muster, die auf iOS Safari zu vermeiden sind?
Welche Konstrukte oder Muster sollte ich vermeiden, um den Speicherverbrauch von iOS auf Augenhöhe mit dem von Chrome zu bringen?
Charakterisierung des erzeugten JavaScript:
- Der Code wird durch Haxe erzeugt.
- Der Code ist "objektorientiert", da er
prototype
, aber in einem civilized way stark verwendet. - Der Code verwendet stark benannte Indizes auf JavaScript-Objekte Hash-Tabellen zu implementieren.
- Es gibt eine Menge Strings, aber kaum String-Verkettungen.
Es scheint keine Speicherlecks zu geben; der übermäßige Speicherverbrauch auf iOS zeigt sich sofort beim Aufbau der (festen Menge) Javascript-Objekte.
Beachten Sie, dass UIWebView ein älteres Javascript-Engine verwendet, es führt JS langsamer als Safari auf iOS. Wenn Sie den Code in Safari ausführen, läuft das dann schnell genug? –
Die Web-App soll von Safari laufen, ich benutze nur UIWebView, damit XCode den Speicherverbrauch sehen kann, was das Problem ist (dh. Safari lädt die Seite hin und wieder neu). Die Ausführungsgeschwindigkeit ist nicht wirklich ein Problem. –
Mobile Safari verwendet WKWebView, also sollte Ihre App einen davon erstellen, um den Vergleich durchzuführen. Sie können auch 'v8' und' javascriptcore' zu den Tags hinzufügen, damit Experten in diesen beiden JS-Engines eingewogen werden können. –