UIWebView primera request demasiado lenta

Estoy usando UIWebView para hacer contenido web en mi aplicación. Observé que la request inicial cuando la aplicación se inicia, es decir, loadRequest , tarda mucho time en mostrar el contenido. Sin embargo, las requestes subsiguientes de las que no tengo conocimiento son mucho más rápidas.
Para confirmar esto, creé una aplicación independiente que solo tiene una UIWebView . Esta es la única línea de código que he agregado:

 [wkBrowser loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.yahoo.com"]]]; 

El resultado es el mismo. Se tarda unos 15-20 segundos en cargar la página. Sin embargo, al tocar cualquier enlace en la página web, tarda de 3 a 5 segundos en cargar la siguiente página. Puse la function de delegado UIWebView didFailLoadWithError, pero nunca hubo un error.
Pregunta :

  1. ¿Por qué la primera request web es tan lenta?
  2. ¿Cómo puedo hacer que sea más rápido que no sea el almacenamiento en caching?

La razón principal es porque, cuando invoca la primera request de URL, el server en el extremo receptor intenta mostrar la información según el browser del dispositivo solicitado , (como el mobile, el escritorio). Aquí es donde ves un poco de retraso.

  • El server demora un time para resolver el tipo de búsqueda de origen de la request y responde de acuerdo con el tipo de browser . Este valor se envía internamente desde el browser. Hay una diferencia en Safari mobile y Safari de escritorio .
  • El server al recibir la request, responde de nuevo con la página compatible con el tipo de dispositivo, (la mayoría de los serveres de dominio están implementando esto internamente, las páginas receptivas).
  • Si desea una "situación sin demora", trate de llamar a la versión mobile exacta del portal en cuestión.
  • Las requestes secundarias se tratan desde un browser de tipo conocido , networkinguciendo así el retraso en la respuesta.

Espero que esto resuelva la duda.

La respuesta de su primera pregunta es la siguiente:
Cuando carga la request por primera vez, la vista web descarga y almacena en caching todos los files como CSS, imágenes, etc. Luego, cuando hace clic en una URL que le lleva a otra página del mismo website, básicamente se carga De la caching en lugar de download de nuevo, y ahorra mucho time.

Existen múltiples razones para que la primera carga sea más lenta que las cargas posteriores.

En primer lugar, su aplicación se vincula a frameworks dynamics. La resolución de enlace dynamic se realiza perezosamente. Entonces, cada vez que usa UIWebView por primera vez, hay una sobrecarga muy pequeña involucrada en la resolución de los símbolos que ha utilizado de la biblioteca dinámica. El UIWebView sí mismo podría depender de algunas bibliotecas internas más que necesitan estar vinculadas dinámicamente, lo que se sum a esa sobrecarga.

Luego está también la implementación del UIWebView sí. El UIWebView de UIWebView probablemente involucra estructuras de datos que se inicializan perezosamente.

Luego está el aspecto de asignación de memory. Cada vez que realiza la carga de su primera página, el uso de memory de su aplicación aumenta mucho más de lo que lo hace con la carga de la segunda página. La asignación de suficiente memory para procesar la carga de una página se agrega a la sobrecarga, pero una vez hecho esto, iOS confiará esta memory a su aplicación por un período de time que excede el punto en que la memory fue desasignada para hacer que su aplicación sea más rápida cuando alcanza picos en su uso de memory.

Alguien sugirió que podría haber resources almacenados en caching entre sus dos páginas. Incluso si ambas páginas son diferentes y se están cargando por primera vez, podrían compartir un file css común o un file javascript común como jQuery. Entonces, el browser puede reutilizar esos resources almacenados en caching.

En general, hay muchos factores como estos que explican por qué la carga de la primera página puede ser más lenta que la carga posterior de la página. Podría get más información sobre lo que realmente está haciendo UIWebView al perfilar la aplicación durante ambas cargas de página.

La respuesta de su primera pregunta: cuando carga la request por primera vez, la vista web descarga y almacena en caching todos los files como css, imágenes, etc. Luego, cuando hace clic en una URL que le lleva a otra página de el mismo website, básicamente lo carga del caching en lugar de downloadlo nuevamente, y ahorra mucho time.

Una cosa que puede hacer aquí para ver lo que está sucediendo es implementar un NSURLProtocol similar al siguiente enlace: http://www.raywenderlich.com/59982/nsurlprotocol-tutorial

e intercepte sus requestes en el método canInitWithRequest.

Esto solo le mostrará lo que está sucediendo con sus requestes al less.