iPhone UIWebView медленная загрузка в локальные файлы HTML

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

При просмотре файла HTML офлайн, UIWebView занимает много времени для загрузки страницы, учитывая, что я уже в режиме офлайн, и файл находится на диске наряду с его CSS и изображениями.

Я использую этот код для загрузки файла:

  NSData *htmlData = [NSData dataWithContentsOfFile:htmlFilePath];
  [wView loadData:htmlData MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL fileURLWithPath:self.htmlFolderPath isDirectory:YES]];

Есть ли любое другое средство загрузки файла к UIWebView это может загрузить его быстрее?

P.S.: это загружается очень быстро на средстве моделирования (офлайн), но на устройстве требуется много времени (рассмотрение уже офлайновый кэшируемый файл)

Спасибо за справку.

28
задан jszumski 20 April 2013 в 03:18
поделиться

4 ответа

Является ли ваше решение на самом деле кэшированием других вещей, кроме html-файла, то есть картинок, css и т.д., И перелинковкой их в html-странице? Я предполагаю, что вы загружаете и кэшируете html-страницу и внешние ресурсы, затем UIWebView загружает этот html-файл и продолжает загружать внешние ресурсы. Это объясняет быструю производительность на симуляторе и более медленную производительность на устройстве.

Вот библиотека, предназначенная для выполнения именно того, что вы пытаетесь сделать: ASIWebPageRequest.

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

6
ответ дан 28 November 2019 в 03:55
поделиться

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

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

Если он ничего не делает, не будучи видимым, уменьшите размер до 1x1, установите непрозрачность = 0 и поместите этот пиксель в такое место, где он не может мешать обработке событий касания.

Не идеально, но может сработать.

3
ответ дан 28 November 2019 в 03:55
поделиться

Я могу дать вам представление об альтернативных способах загрузки HTML из файла в UIWebView. В небольшом проекте, который у меня есть, Objective-C используется в качестве чистой оболочки для UIWebView

Проект находится здесь, но основной код ниже: http://github.com/robb1e/iWeb

- (void)viewDidLoad {
    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html" inDirectory:@"."]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];
    [super viewDidLoad];
}

I Я также изучаю способы улучшить воспринимаемую производительность, показывая изображение, пока DOM готовится. Вот некоторые ответы, которые я получил:

Отображение фонового изображения в UIWebView

0
ответ дан 28 November 2019 в 03:55
поделиться

Я почти уверен, что вы никогда не сможете это сделать. UIWebView просто нужно некоторое время, чтобы обработать вашу веб-страницу, даже если это локальная страница.

Помня об этом, вы можете попробовать предварительно загрузить страницу перед ее отображением. Например, если вы показываете его после того, как пользователь нажимает кнопку, предварительно загрузите страницу, когда вы показываете кнопку, а не когда пользователь действительно нажимает кнопку. Пользователь не замечает медленную загрузку, потому что она обрабатывается в фоновом режиме, поэтому, когда пользователь нажимает кнопку, страница уже загружена.

1
ответ дан 28 November 2019 в 03:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: