Первый запрос UIWebView слишком медленный - программирование

Первый запрос UIWebView слишком медленный

Я использую UIWebView для рендеринга веб-контента в своем приложении. Я заметил, что первоначальный запрос при запуске приложения, т.е. loadRequest, занимает много времени, чтобы отобразить содержимое. Однако последующие запросы, которые я не отслеживаю, намного быстрее.
Чтобы подтвердить это, я создал автономное приложение, которое имеет только UIWebView. Это единственная строка кода, которую я добавил:

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

Результат такой же. Для загрузки страницы требуется 15-20 секунд. Однако при нажатии любой ссылки на веб-странице для загрузки следующей страницы требуется 3-5 секунд. Я положил функцию делегата UIWebView didFailLoadWithError, но никогда не было ошибки.
Вопрос:

  • Почему первый веб-запрос настолько медленный?
  • Как я могу сделать это быстрее, чем кеширование?
4b9b3361

Ответ 1

Основная причина заключается в том, что при вызове запроса на первый раз сервер на принимающей стороне пытается отобразить информацию в соответствии с запрошенным браузером устройств (например, мобильным, рабочим). Здесь вы видите небольшую задержку.

  • Серверу потребуется время , чтобы разрешить тип поиска источника запроса и ответить в соответствии с типом браузера. Это значение внутренне отправляется из браузера. Существует разница в сафари для мобильных сафари и рабочего стола.
  • Сервер после получения запроса отвечает на вас с помощью страницы, совместимой с типом устройства (в основном все серверы домена реализуют это внутренне, реагирующие страницы).
  • Если вам нужна "ситуация с отсутствием задержки", попробуйте вызвать конкретную мобильную версию портала, вызывающего беспокойство.
  • Подсекционные запросы обрабатываются с помощью известного браузера, что позволяет уменьшить задержку в ответе.

Надеюсь, это устранит сомнения.

Ответ 2

Ответ на ваш первый вопрос следующий:
Когда вы загружаете запрос в первый раз, веб-просмотр загружает и кэширует все файлы, такие как css, изображения и т.д. После того, как вы нажмете на URL-адрес, который приведет вас на другую страницу того же веб-сайта, он в основном загружает он из кэша вместо загрузки снова, и это экономит много времени.

Ответ 3

Существует несколько причин, по которым первая загрузка может быть медленнее последующих нагрузок.

Прежде всего, ваше приложение привязывается к динамическим фреймворкам. Динамическое разрешение линии выполняется лениво. Поэтому всякий раз, когда вы впервые используете UIWebView, есть очень небольшие накладные расходы, связанные с разрешением символов, которые вы использовали из динамической библиотеки. Сам UIWebView может зависеть от некоторых внутренних библиотек, которые должны быть связаны динамически, добавляя эти служебные данные.

Тогда существует также реализация самого UIWebView. Внутренний UIWebView, скорее всего, включает структуры данных, которые инициализируются лениво.

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

Кто-то предположил, что между вашими двумя страницами могут быть кэшированные ресурсы. Даже если обе страницы разные и загружаются в первый раз, они могут совместно использовать общий файл css или общий файл javascript, такой как jQuery. Затем браузер может повторно использовать эти кэшированные ресурсы.

В целом, существует множество факторов, которые объясняют, почему загрузка первой страницы может быть медленнее, чем последующие загрузки страниц. Вы можете узнать больше о том, что действительно делает UIWebView, профилируя приложение во время загрузки страниц.

Ответ 4

Ответ на ваш первый вопрос: Когда вы загружаете запрос в первый раз, веб-просмотр загружает и кэширует все файлы, такие как css, изображения и т.д. После того, как вы нажмете на URL-адрес, который приведет вас на другую страницу того же веб-сайта, он в основном загружает он из кэша вместо загрузки снова, и это экономит много времени.

Ответ 5

Одна вещь, которую вы можете сделать здесь, чтобы увидеть, что происходит, - это реализовать NSURLProtocol, подобный следующей ссылке: http://www.raywenderlich.com/59982/nsurlprotocol-tutorial p >

и перехватите ваши запросы в методе canInitWithRequest.

Это покажет вам, что происходит с вашими запросами.