Подтвердить что ты не робот

Способы улучшения производительности прокрутки UIWebView?

Я создаю приложение, которое включает UIWebView, содержащее большое количество изображений, CSS, встроенное видео и обработчики дескриптора JavaScript. Производительность прокрутки - затворничество, и я ищу информацию о наиболее эффективных способах ее улучшения.

Что, если какая-либо из следующих характеристик приведет к прокрутке laggy UIWebView? Какие другие факторы могут препятствовать работе?

  • Количество изображений
    • Должен ли я удалять изображения из DOM, когда пользователь прокручивается мимо них и добавляет их обратно, если они прокручивают резервные копии?
  • Размер изображений
    • Будет ли качество изображения Retina в веб-представлении влиять на производительность прокрутки намного больше, чем на более мелкие версии?
  • Масштабирование изображения
    • Будет ли изменение размера изображений раньше времени иметь большую разницу, а не полагаться на веб-представление для масштабирования на основе объявлений типа width: 100%;?
  • CSS
    • Я избегал box-shadow, но существуют ли другие свойства CSS, которые также известны для неблагоприятного влияния на производительность прокрутки?

Если есть какие-либо другие ресурсы или инструменты, которые можно использовать для профилирования, я люблю их слышать.

4b9b3361

Ответ 1

Это ответ, который я получил от технической поддержки Apple Developer некоторое время назад:

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

Производительность зависит от загруженного содержимого. Если используются javascripts или плагины, это может помешать работе.

Я рекомендую вам опубликовать отчет об ошибке в http://developer.apple.com/bugreporter/, в котором подробно описывается ваша ситуация. Это также будет информировать вас о статусе вашего отчета об ошибке.

Возможной альтернативой UIWebView будет библиотека DTCoreText с открытым исходным кодом: https://github.com/Cocoanetics/DTCoreText, которая поддерживает приложение Float Reader: http://itunes.apple.com/us/app/float-reader/id447992005?mt=8

Ответ 2

Ребята из LinkedIn провели обширную работу с UIWebView и HTML5 на своем iPad-приложении. Весь их канал, который тяжел с изображениями, текстами и видео, отображается внутри UIWebView.

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

LinkedIn для iPad: 5 методов для плавной бесконечной прокрутки в HTML5

Ответ 3

У меня была аналогичная проблема некоторое время назад. Я обнаружил, что возможность веб-просмотра внутри прокрутки улучшает производительность прокрутки. После завершения загрузки веб-просмотра я отключил прокрутку в веб-просмотре, установил кадр webview и размер прокрутки viewSize в размере содержимого веб-просмотра.

-(void) webViewDidFinishLoad:(UIWebView *)webView {   
    float size = [[self.webView stringByEvaluatingJavaScriptFromString:@"document.body.offsetHeight"] floatValue];
    [self.scrollView setContentSize:CGSizeMake(self.view.frame.size.width, size)];
    [webView setFrame:CGRectMake(webView.frame.origin.x,
                                 webView.frame.origin.y,
                                 webView.frame.size.width,
                                 size)];

    [(UIScrollView*)[webView.subviews objectAtIndex:0] setScrollEnabled:NO];
}

Я предполагаю, что веб-просмотр не загружает изображение, пока оно не появится на экране, что вызвало заикание, и, поместив его в scrollview и установив кадр на размер содержимого, он должен загрузить их вперед времени, но я не уверен. Я также уверен, что это имеет последствия (т.е. Увеличение использования памяти спереди), но у меня никогда не было проблем с этим.