Je remarque que le safari de l'iphone met en cache le contenu de sorte que votre page de chargement pour plus tard est beaucoup plus rapide, tout comme un navigateur 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 paramètres? Comment puis-je faire en sorte que UIWebView mette automatiquement en cache le contenu sans passer par le tracas d'enregistrer moi-même le contenu?Comment mettre en cache du contenu dans UIWebView pour un chargement plus rapide plus tard?
Répondre
Basé sur this discussion thread il semblerait qu'il n'y ait aucune mise en cache au niveau du système d'exploitation 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 bouton de retour dans Safari ne recharge pas l'ancienne page à partir d'un cache).
La clé est: 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];
La documentation iOS indique que NSURLRequestReturnCacheDataElseLoad "Spécifie que les données de cache existantes doivent être utilisées pour satisfaire une requête, quel que soit son âge ou sa date d'expiration." Ce n'est généralement pas ce que vous voulez, car il ignore les en-têtes de politique de cache comme max-age et ainsi de suite. Donc, cela ne semble pas être une bonne réponse générale. Le meilleur choix semble être "NSURLRequestUseProtocolCachePolicy" mais cela semble ne rien faire. – Yetanotherjosh
Je l'ai fait quelques applications que les pages de cache dans le dossier Documents, puis comparer les horodatages des mises en cache & pages web avant de charger la nouvelle page Web . Ainsi, le débit de base est:
if (fileIsInCache)
if (cacheFileDate > webFileDate)
getCachedFile
else
getFileFromWeb
saveFileToCache
else
getFileFromWeb
saveFileToCache
stuffFileIntoUIView
maybeReduceCache
Vous avez encore de frapper le Web pour obtenir les en-têtes, mais qui est généralement beaucoup plus rapide que le téléchargement d'une page entière/image/fichier.
Avez-vous un code d'exemple de ceci? – Tudorizer
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];
Il va charger une première fois url recherche alors que pour les changements de contenu .., s'il n'y a aucune mise à jour du contenu URL il charge à partir du cache (stockage local).
- 1. Est-ce possible de mettre UIWebView en cache dans l'iPhone?
- 2. L'impression InfModel plus tôt modifie la représentation imprimée plus tard?
- 3. plus rapide pour remplacer la chaîne dans un modèle
- 4. Logique d'abord, sécurité WCF plus tard?
- 5. Accessoire UITableViewCellAffiche n'apparaît que beaucoup plus tard
- 6. se souvenir de la classe d'un élément pour plus tard
- 7. Fonction DirectoryExists plus rapide?
- 8. mise en cache du contenu Web (images) sur l'iPhone
- 9. Comment puis-je pré-mettre en cache des images pour un affichage rapide avec javascript?
- 10. Implémentation CompareText plus rapide pour D2009
- 11. L'alternative la plus rapide à Datatable.Select() pour restreindre les données en cache?
- 12. Comment lire JSP un fichier de WEB-INF dans une variable pour plus tard "impression"
- 13. Mise en cache et évitement du contenu mis en cache
- 14. comment concevoir le modèle de dépôt pour être facile passer à un autre ORM plus tard?
- 15. Le moyen le plus rapide/le plus court de construire un arbre unique en Ruby?
- 16. Sérialisation de la liste Python - méthode la plus rapide
- 17. Comment faire une boucle de tableau plus rapide en PHP
- 18. Existe-t-il un moyen de mettre en pause une animation de base et de la reprendre plus tard?
- 19. Plugin jQuery pour "plus d'alerte de contenu"?
- 20. Chargement des URL dans UIWebView
- 21. Comment faire apparaître une div plus haut sur la page en amont du contenu plus haut dans le flux?
- 22. Meilleur/le plus simple/le moyen le plus rapide d'obtenir un chemin relatif entre deux fichiers?
- 23. Code C# le plus rapide pour télécharger une page Web
- 24. remplacer les caractères dans un fichier (méthode plus rapide)
- 25. NSMutableArray. Quel est le moyen le plus rapide pour le convertir en un tableau C simple?
- 26. Chargement d'une nouvelle page Web dans un UIWebView existant
- 27. iPhone UITableView "Plus" Cellule? Comment mettre en œuvre?
- 28. Méthode la plus rapide pour calculer la convolution
- 29. Comment rendre cette tâche SQL plus rapide à terminer
- 30. changement de licence de GPL à BSD plus tard
La mémoire cache ne fonctionne que sur le manifeste HTML 5 utilisé hors connexion. – jianhua