Como posso otimizar a rede no iOS?

Eu criei um projeto no GitHub para aprender como otimizar a rede para meus aplicativos iOS. Eu usei muito os blocos e o GCD e depois de assistir a vídeos e vídeos da WWDC 2012 dos anos anteriores, aprendi que talvez eu possa fazer mais com o NSOperationQueue. Especificamente eu posso controlar o número de operações simultâneas (conexões de rede), bem como fornecer o cancelamento de operações. Eu estou experimentando com permissão de 1, 2, 4, 8 e 16 operações simultâneas e estou vendo resultados interessantes que eu não esperava totalmente. Estou medindo os resultados, mas me pergunto se há mais que eu deveria medir.

Você pode encontrar um exemplo de projeto aqui:

https://github.com/brennanMKE/OptimizedNetworking

Como estou usando a API assíncrona de NSURLConnection, há muitos benefícios em ter muitas conexões simultâneas porque a API gasta um bom tempo aguardando pacotes HTTP. Anteriormente, meu código começava com uma matriz de itens para download e os solicitava sequencialmente, o que evita os benefícios da simultaneidade. Eu também tenho usado notificações para cancelar conexões de rede. Agora posso fazer isso com este projeto por meio de operações e configurá-las para usar um valor para prioridade e uma categoria, para que eu possa priorizar e classificar os downloads e cancelar uma categoria de operações. Posso optar por usar uma categoria para cada visualização e, quando um usuário deixar uma visão, todas as operações dessa visualização serão canceladas usando a categoria. Isso liberará recursos para a exibição ativa.

Uma preocupação com o uso de mais operações simultâneas é o uso da CPU, bem como E / S, mas não estou ciente de uma maneira de medir esses valores com o iOS. O equivalente ao comando "w" no iOS para mostrar o uso da CPU pode ser útil. Estou menos preocupado com a E / S, mas medi-la seria mais abrangente.

Minha principal questão sobre como eu estava fazendo networking era uma interface de usuário responsiva. Descobri que o que tenho feito tornou a interface do usuário lenta. Essa nova abordagem pode ajudar bastante, mas somente se eu mantiver o número de operações simultâneas inativo. O número ideal de operações pode variar de acordo com o tipo de conexão (3G, WiFi, etc), portanto, a verificação do tipo de conexão pode levar a algumas otimizações.

Se você estiver interessado em maneiras melhores de acelerar as comunicações de rede em seu aplicativo, experimente este projeto de amostra e sugira outras maneiras de medir o desempenho e oferecer maneiras de otimizar ainda mais as comunicações. (Observe também que estou fazendo referência ao projeto de amostra da Apple, MVCNetworking, bem como ao projeto ASIHTTPRequest.

O que posso fazer a seguir é totalizar a quantidade de dados baixados e manter um registro desse valor junto com o tempo total para concluir o download.

O arquivo README deve ajudar a explicar o projeto e como ele funciona.

questionAnswers(1)

yourAnswerToTheQuestion