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

Как кешировать содержимое в UIWebView для более быстрой загрузки позже?

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

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

4b9b3361

Ответ 1

Ключ: 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];

Ответ 2

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-адреса нет обновлений, он будет загружаться из кеша (локальное хранилище).

Ответ 3

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

Ответ 4

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

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

stuffFileIntoUIView

maybeReduceCache

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