Как я могу лучше оптимизировать сеть на iOS?

Я создал проект на GitHub, чтобы узнать, как оптимизировать сеть для своих приложений iOS. Я активно использовал блоки и GCD, и после просмотра видеороликов WWDC 2012 и видеороликов прошлых лет я понял, что могу сделать больше с помощью NSOperationQueue. В частности, я могу контролировать количество одновременных операций (сетевых подключений ), а также обеспечивать отмену операций. Я экспериментирую с разрешением 1, 2, 4, 8 и 16 одновременных операций и вижу интересные результаты, которых совершенно не ожидал. Я измеряю результаты, но мне интересно, есть ли что-то еще, что я должен измерить.

Вы можете найти пример проекта здесь:

https://github.com/brennanMKE/OptimizedNetworking

Поскольку я использую асинхронный API NSURLConnection, наличие множества одновременных подключений дает много преимуществ, поскольку API тратит достаточное количество времени на ожидание HTTP-пакетов. Раньше мой код начинался с массива элементов для загрузки и запрашивал их все последовательно, что лишало преимуществ параллелизма. Я также использую уведомления для отмены сетевых подключений. Теперь я могу сделать это с этим проектом с помощью операций, и я настроил их для использования значения приоритета и категории, чтобы я мог расставлять приоритеты и сортировать загрузки и отменять категорию операций. Я могу использовать категорию для каждого представления, и когда пользователь покидает представление, все операции для этого представления будут отменены с использованием категории. Это освободит ресурсы для активного просмотра.

Одной из проблем с использованием большего количества одновременных операций является использование ЦП, а также ввод-вывод, но я не знаю, как измерить эти значения с помощью iOS. Эквивалент команды «w» в iOS для отображения загрузки ЦП может быть полезен. Меня меньше беспокоит ввод-вывод, но его измерение было бы более полным.

Моей главной проблемой в работе с сетью был адаптивный пользовательский интерфейс. Я обнаружил, что то, что я делал, сделало пользовательский интерфейс вялым. Этот новый подход может очень помочь, но только в том случае, если я уменьшу количество одновременных операций. Оптимальное количество операций может варьироваться в зависимости от типа подключения (3G, WiFi и т. д. ), поэтому проверка типа подключения может привести к некоторой оптимизации.

Если вы заинтересованы в более эффективных способах ускорения сетевых коммуникаций в своем приложении, попробуйте этот пример проекта и предложите другие способы, которыми я могу измерить производительность, и предложить способы дальнейшей оптимизации коммуникаций. (Также обратите внимание, что я ссылаюсь на образец проекта Apple MVCNetworking, а также на проект ASIHTTPRequest.

Что я могу сделать дальше, так это суммировать объем загруженных данных и вести журнал этого объема вместе с общим временем для завершения загрузки.

Файл README должен помочь объяснить проект и то, как он работает.

15
задан Brennan 18 July 2012 в 18:51
поделиться