Как кэшировать контент в UIWebView для более быстрой загрузки в дальнейшем? - PullRequest
22 голосов
/ 28 августа 2009

Я заметил, что сафари на iphone кэширует контент, так что загрузка вашей страницы на потом будет намного быстрее, чем в настольном браузере. Например, возьмем мобильную веб-страницу Gmail: первая загрузка происходит довольно медленно (5-10 секунд). Но если я закрою вкладку и снова открою страницу, это будет очень быстро (1 секунда).

Однако, это поведение не то же самое, если вы загружаете контент через UIWebView в вашем приложении. Я пропускаю некоторые настройки? Как сделать так, чтобы UIWebView автоматически кэшировал содержимое, не пытаясь самостоятельно сохранить содержимое?

Ответы [ 4 ]

23 голосов
/ 15 сентября 2009

Ключ: NSURLRequestReturnCacheDataElseLoad

NSData *urlData;
NSString *baseURLString =  @"mysite.com";
NSString *urlString = [baseURLString stringByAppendingPathComponent:@"myfile"];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval: 10.0]; 
NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:nil]; 

if (connection)
{ 
    urlData = [NSURLConnection sendSynchronousRequest: request];

    NSString *htmlString = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];
    [webView loadHTMLString:htmlString baseURL:baseURLString];
    [htmlString release];
}

[connection release];
4 голосов
/ 03 октября 2014
NSString *stringurl=[NSString stringWithFormat:@"http://www.google.com"];
NSURL *url=[NSURL URLWithString:stringurl];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:15.0];
[uiwebview loadRequest:theRequest];

Он будет загружать URL-адрес в первый раз, а затем будет искать только изменения содержимого .., если в содержимом URL-адресов нет обновлений, которые он будет загружать из кэша (локальное хранилище).

2 голосов
/ 28 августа 2009

На основе этой ветки обсуждения может показаться, что с UIWebView невозможно кэширование на уровне ОС. Исходя из опыта, я заметил, что Safari на моем устройстве iPhone OS не кэширует свои веб-страницы (например, нажатие кнопки «Назад» в Safari не перезагружает старую страницу из кэша).

0 голосов
/ 25 октября 2009

Я сделал несколько приложений, которые кэшируют страницы в папку «Документы», затем сравнивают метки времени кэшированных и веб-страниц перед загрузкой новой веб-страницы. Итак, основной поток:

if (fileIsInCache)
    if (cacheFileDate > webFileDate)
        getCachedFile
    else
        getFileFromWeb
        saveFileToCache
else
    getFileFromWeb
    saveFileToCache

stuffFileIntoUIView

maybeReduceCache

Вам все еще нужно попасть в Интернет, чтобы получить заголовки, но это обычно намного быстрее, чем загрузка всей страницы / изображения / файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...