Ответ 1
Если это помогает, Mugunth Kumar проверяет тип соединения с использованием класса достижимости, прежде чем устанавливать размер соединения NSOperationQueue max в MKNetworkKit
Я создал проект на GitHub, чтобы научиться оптимизировать работу сетей для своих приложений iOS. Я использовал блоки и GCD сильно, и после просмотра видео и видео WWDC 2012 из прошлых лет я узнал, что я могу сделать больше с NSOperationQueue. В частности, я могу контролировать количество параллельных операций (сетевых подключений), а также обеспечивать отмену операций. Я экспериментирую с возможностью одновременной работы 1, 2, 4, 8 и 16, и я вижу интересные результаты, которых я не ожидал полностью. Я измеряю результаты, но мне интересно, есть ли еще что-то, что я должен измерить.
Здесь вы можете найти пример проекта:
https://github.com/brennanMKE/OptimizedNetworking
Поскольку я использую асинхронный API NSURLConnection, есть много преимуществ для того, чтобы иметь много параллельных подключений, потому что API тратит много времени, ожидая HTTP-пакетов. Раньше мой код начинался с массива элементов для загрузки и запрашивать их все последовательно, что предотвращает преимущества concurrency. Я также использовал уведомления для отмены сетевых подключений. Теперь я могу сделать это с помощью этого проекта с помощью операций, и я установил их для использования значения для приоритета и категории, чтобы я мог определять приоритеты и сортировать загрузки и отменять категорию операций. Я могу выбрать категорию для каждого представления, и когда пользователь покидает представление, все операции для этого вида будут отменены с использованием категории. Это освободит ресурсы для активного просмотра.
Одной из проблем использования более параллельных операций является использование ЦП, а также ввод-вывод, но я не знаю, как измерить эти значения с помощью iOS. Может оказаться полезным эквивалент команды "w" в iOS, чтобы показать использование ЦП. Меня меньше беспокоит ввод-вывод, но измерение будет более полным.
Моя основная проблема с тем, как я занимаюсь сетью, - это гибкий интерфейс. Я обнаружил, что то, что я делаю, делает UI вялым. Этот новый подход может многое помочь, но только если я оставлю количество одновременных операций. Оптимальное количество операций может варьироваться в зависимости от типа соединения (3G, WiFi и т.д.), Поэтому проверка типа соединения может привести к некоторым оптимизации.
Если вас интересуют лучшие способы ускорения сетевых коммуникаций в вашем приложении, попробуйте этот образец проекта и предложите другие способы, с помощью которых я могу измерить производительность и предложить способы дальнейшей оптимизации связи. (Также обратите внимание, что я ссылаюсь на образец MVCNetworking проекта Apple, а также проект ASIHTTPRequest.
Что я могу сделать дальше, это суммировать объем загружаемых данных и вести журнал этой суммы вместе с общим временем для завершения загрузки.
Файл README должен помочь объяснить проект и как он работает.
Если это помогает, Mugunth Kumar проверяет тип соединения с использованием класса достижимости, прежде чем устанавливать размер соединения NSOperationQueue max в MKNetworkKit