Jak mogę lepiej zoptymalizować pracę w sieci na iOS?

Stworzyłem projekt na GitHub, abym mógł dowiedzieć się, jak zoptymalizować pracę w sieci dla moich aplikacji na iOS. Użyłem mocno bloków i GCD, a po obejrzeniu filmów i filmów WWDC 2012 z ostatnich lat dowiedziałem się, że mogę być w stanie zrobić więcej z NSOperationQueue. W szczególności mogę kontrolować liczbę współbieżnych operacji (połączenia sieciowe), a także zapewnić anulowanie operacji. Eksperymentuję z dopuszczeniem 1, 2, 4, 8 i 16 jednoczesnych operacji i widzę interesujące wyniki, których nie spodziewałem się całkowicie. Zmierzam wyniki, ale zastanawiam się, czy powinienem mierzyć więcej.

Przykładowy projekt znajdziesz tutaj:

https://github.com/brennanMKE/OptimizedNetworking

Ponieważ używam async API NSURLConnection, jest wiele korzyści z posiadania wielu jednoczesnych połączeń, ponieważ API spędza sporo czasu czekając na pakiety HTTP. Poprzednio mój kod zaczynał się od tablicy elementów do pobrania i żądał ich wszystkich sekwencyjnie, co zapobiega korzyściom związanym z współbieżnością. Korzystałem również z powiadomień, aby anulować połączenia sieciowe. Teraz mogę to zrobić za pomocą tego projektu poprzez operacje i ustawiłem je tak, aby używały wartości dla priorytetu i kategorii, dzięki czemu mogę priorytetyzować i sortować pliki do pobrania oraz anulować kategorię operacji. Mogę wybrać kategorię dla każdego widoku, a gdy użytkownik opuści widok, wszystkie operacje dla tego widoku zostaną anulowane przy użyciu kategorii. Spowoduje to zwolnienie zasobów dla aktywnego widoku.

Jedną z obaw związanych z użyciem większej liczby operacji współbieżnych jest użycie procesora, a także I / O, ale nie wiem, w jaki sposób mierzyć te wartości w systemie iOS. Przydatny może być odpowiednik polecenia „w” w iOS, aby pokazać użycie procesora. Mniej martwię się we / wy, ale pomiar jest bardziej kompleksowy.

Moim głównym problemem związanym z tym, jak robiłem networking, był responsywny interfejs użytkownika. Odkryłem, że to, co robiłem, sprawiło, że interfejs użytkownika jest powolny. To nowe podejście może bardzo pomóc, ale tylko wtedy, gdy ograniczę liczbę jednoczesnych operacji. Optymalna liczba operacji może się różnić w zależności od rodzaju połączenia (3G, WiFi itp.), Więc sprawdzenie typu połączenia może prowadzić do pewnych optymalizacji.

Jeśli jesteś zainteresowany lepszymi sposobami przyspieszenia komunikacji sieciowej w swojej aplikacji, wypróbuj ten przykładowy projekt i zasugeruj inne sposoby pomiaru wydajności i zaproponuj sposoby dalszej optymalizacji komunikacji. (Zauważ również, że odwołuję się do przykładowego projektu Apple MVCNetworking, a także projektu ASIHTTPRequest.

Co mogę teraz zrobić, to zsumować ilość pobranych danych i zachować dziennik tej kwoty wraz z łącznym czasem do ukończenia pobierania.

Plik README powinien pomóc wyjaśnić projekt i sposób jego działania.

questionAnswers(1)

yourAnswerToTheQuestion