¿Cómo puedo optimizar las redes en iOS?

He creado un proyecto en GitHub para aprender cómo optimizar la red para mis aplicaciones de iOS. He usado bloques y GCD en gran medida y, después de ver videos y videos de la WWDC 2012 de años anteriores, aprendí que puedo hacer más con NSOperationQueue. Específicamente, puedo controlar el número de operaciones simultáneas (conexiones de red), así como proporcionar cancelación de operaciones. Estoy experimentando con permitir 1, 2, 4, 8 y 16 operaciones concurrentes y estoy viendo resultados interesantes que no esperaba totalmente. Estoy midiendo los resultados, pero me pregunto si hay más que debería medir.

Puedes encontrar un proyecto de muestra aquí:

https://github.com/brennanMKE/OptimizedNetworking

Ya que estoy usando la API asíncrona de NSURLConnection, hay muchas ventajas al tener muchas conexiones concurrentes porque la API pasa bastante tiempo esperando paquetes HTTP. Anteriormente, mi código comenzaría con una serie de elementos para descargar y solicitarlos todos de forma secuencial, lo que evita los beneficios de la concurrencia. También he estado usando notificaciones para cancelar conexiones de red. Ahora puedo hacer eso con este proyecto a través de las operaciones y los he configurado para que utilicen un valor de prioridad y una categoría para que pueda priorizar y ordenar las descargas y cancelar una categoría de operaciones. Puedo elegir usar una categoría para cada vista y cuando un usuario deja una vista, todas las operaciones para esa vista se cancelarán usando la categoría. Esto liberará recursos para la vista activa.

Una de las preocupaciones sobre el uso de más operaciones concurrentes es el uso de la CPU y la E / S, pero no conozco una forma de medir estos valores con iOS. El equivalente del comando "w" en iOS para mostrar el uso de la CPU podría ser útil. Estoy menos preocupado por la E / S pero la medición sería más completa.

Mi principal problema con la forma en que hacía redes era una IU receptiva. Descubrí que lo que he estado haciendo ha hecho que la interfaz de usuario sea lenta. Este nuevo enfoque puede ser de gran ayuda, pero solo si mantengo el número de operaciones concurrentes hacia abajo. El número óptimo de operaciones puede variar según el tipo de conexión (3G, WiFi, etc.), por lo que la verificación del tipo de conexión puede llevar a algunas optimizaciones.

Si está interesado en encontrar mejores formas de acelerar las comunicaciones de red en su aplicación, pruebe este proyecto de muestra y sugiera otras formas en las que pueda medir el rendimiento y ofrezca formas de optimizar aún más las comunicaciones. (También tenga en cuenta que estoy haciendo referencia al proyecto de ejemplo de Apple MVCNetworking, así como al proyecto ASIHTTPRequest.

Lo que puedo hacer a continuación es sumar la cantidad de datos descargados y mantener un registro de esa cantidad junto con el tiempo total para completar la descarga.

El archivo README debería ayudar a explicar el proyecto y cómo funciona.

Respuestas a la pregunta(1)

Su respuesta a la pregunta