Wie kann ich das Netzwerk unter iOS besser optimieren?

Ich habe ein Projekt auf GitHub erstellt, damit ich lernen kann, wie ich das Netzwerk für meine iOS-Apps optimiere. Ich habe stark mit Blöcken und GCD gearbeitet und nach dem Ansehen von WWDC 2012-Videos und Videos aus den letzten Jahren habe ich gelernt, dass ich möglicherweise mehr mit NSOperationQueue anfangen kann. Insbesondere kann ich die Anzahl gleichzeitiger Vorgänge (Netzwerkverbindungen) steuern und Vorgänge abbrechen. Ich experimentiere mit dem Zulassen von 1, 2, 4, 8 und 16 gleichzeitigen Operationen und sehe interessante Ergebnisse, die ich nicht völlig erwartet habe. Ich messe die Ergebnisse, aber ich frage mich, ob ich mehr messen sollte.

Ein Beispielprojekt finden Sie hier:

https://github.com/brennanMKE/OptimizedNetworking

Da ich die asynchrone API von NSURLConnection verwende, sind viele gleichzeitige Verbindungen von großem Vorteil, da die API ziemlich lange auf HTTP-Pakete wartet. Früher begann mein Code mit einer Reihe von Elementen, die nacheinander heruntergeladen und abgefragt werden mussten, was die Vorteile der Parallelität vermeidet. Ich habe auch Benachrichtigungen verwendet, um Netzwerkverbindungen abzubrechen. Jetzt kann ich das mit diesem Projekt über Vorgänge tun, und ich habe sie so eingerichtet, dass sie einen Wert für die Priorität und eine Kategorie verwenden, damit ich Downloads priorisieren und sortieren und eine Kategorie von Vorgängen abbrechen kann. Ich kann eine Kategorie für jede Ansicht verwenden. Wenn ein Benutzer eine Ansicht verlässt, werden alle Vorgänge für diese Ansicht mit der Kategorie abgebrochen. Dadurch werden Ressourcen für die aktive Ansicht freigegeben.

Ein Problem bei der Verwendung von mehr gleichzeitigen Vorgängen ist die CPU-Auslastung sowie die E / A. Es ist mir jedoch nicht bekannt, wie diese Werte mit iOS gemessen werden können. Das Äquivalent des "w" -Befehls in iOS zum Anzeigen der CPU-Auslastung kann hilfreich sein. Ich mache mir weniger Sorgen um die Ein- / Ausgabe, aber die Messung wäre umfassender.

Mein Hauptproblem bei der Vernetzung war eine ansprechende Benutzeroberfläche. Ich stellte fest, dass das, was ich getan habe, die Benutzeroberfläche träge gemacht hat. Dieser neue Ansatz kann sehr hilfreich sein, aber nur, wenn ich die Anzahl der gleichzeitigen Vorgänge niedrig halte. Die optimale Anzahl von Vorgängen kann je nach Art der Verbindung (3G, WiFi usw.) variieren, sodass die Überprüfung des Verbindungstyps zu Optimierungen führen kann.

Wenn Sie an besseren Möglichkeiten zur Beschleunigung der Netzwerkkommunikation in Ihrer App interessiert sind, probieren Sie dieses Beispielprojekt aus und schlagen Sie andere Möglichkeiten vor, mit denen ich die Leistung messen und Möglichkeiten zur weiteren Optimierung der Kommunikation anbieten kann. (Beachten Sie auch, dass ich sowohl auf das Apple-Beispielprojekt MVCNetworking als auch auf das ASIHTTPRequest-Projekt verweise.

Als Nächstes kann ich die heruntergeladene Datenmenge aufsummieren und ein Protokoll dieser Menge zusammen mit der Gesamtzeit für den Abschluss des Downloads führen.

Die README-Datei soll helfen, das Projekt und seine Funktionsweise zu erklären.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage