Comment mettre en cache du contenu dans UIWebView pour un chargement plus rapide plus tard?

Je remarque que le safari d'iphone met en cache le contenu de sorte que votre chargement de page pour plus tard soit beaucoup plus rapide un peu comme un browser de bureau. Donc, prenez la page web mobile gmail par exemple, la première charge est assez lente (5 à 10 secondes). Mais si je ferme l'onglet et rouvre la page, c'est très rapide (1 seconde).

Toutefois, ce comportement n'est pas identique si vous chargez le contenu via un UIWebView dans votre application. Ai-je manqué quelques parameters? Comment puis-je faire en sorte que UIWebView mette automatiquement en cache le contenu sans passer par le tracas d'save moi-même le contenu?

La key est: NSURLRequestReturnCacheDataElseLoad

 NSData *urlData; NSSsortingng *baseURLSsortingng = @"mysite.com"; NSSsortingng *urlSsortingng = [baseURLSsortingng ssortingngByAppendingPathComponent:@"myfile"]; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithSsortingng:urlSsortingng] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval: 10.0]; NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:nil]; if (connection) { urlData = [NSURLConnection sendSynchronousRequest: request]; NSSsortingng *htmlSsortingng = [[NSSsortingng alloc] initWithData:urlData encoding:NSUTF8SsortingngEncoding]; [webView loadHTMLSsortingng:htmlSsortingng baseURL:baseURLSsortingng]; [htmlSsortingng release]; } [connection release]; 
 NSSsortingng *ssortingngurl=[NSSsortingng ssortingngWithFormat:@"http://www.google.com"]; NSURL *url=[NSURL URLWithSsortingng:ssortingngurl]; NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:15.0]; [uiwebview loadRequest:theRequest]; 

Il chargera une URL la première fois puis cherchera seulement les changements de contenu .., s'il n'y a pas de mises à jour dans le contenu de l'URL, il chargera à partir du cache (stockage local).

Sur la base de ce fil de discussion, il semblerait qu'il n'y ait pas de caching au niveau du operating system possible avec UIWebView . Basé sur l'expérience, j'ai remarqué que Safari sur mon iPhone OS ne met pas en cache ses pages web (par exemple, appuyer sur le button de return dans Safari ne recharge pas l'ancienne page à partir d'un cache).

J'ai fait quelques applications qui mettent en cache les pages dans le dossier Documents, puis comparez les horodatages des pages mises en cache et des pages Web avant de charger la nouvelle page Web. Donc, le stream de base est:

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

Vous devez toujours cliquer sur le Web pour get les en-têtes, mais c'est généralement beaucoup plus rapide que de download une page / image / file entière.