Wie kann ich Inhalte in UIWebView zwischenspeichern, um sie später schneller zu laden?
Lesezeit: 2 Minuten
erotsppa
Ich stelle fest, dass die iPhone-Safari Inhalte zwischenspeichert, sodass das Laden Ihrer Seite für später viel schneller ist, ähnlich wie bei einem Desktop-Browser. Nehmen Sie zum Beispiel die mobile Google Mail-Webseite, der erste Ladevorgang ist ziemlich langsam (5-10 Sekunden). Aber wenn ich den Tab schließe und die Seite erneut öffne, geht es sehr schnell (1 Sekunde).
Dieses Verhalten ist jedoch nicht dasselbe, wenn Sie den Inhalt über eine UIWebView in Ihre App laden. Übersehe ich einige Einstellungen? Wie lasse ich den Inhalt von UIWebView automatisch zwischenspeichern, ohne den Inhalt selbst speichern zu müssen?
zaph
Der Schlüssel ist: NSURLRequestReturnCacheDataElseLoad
Die iOS-Dokumentation sagt, dass NSURLRequestReturnCacheDataElseLoad “Gibt an, dass die vorhandenen Cache-Daten verwendet werden sollten, um eine Anfrage zu erfüllen, unabhängig von ihrem Alter oder Ablaufdatum.” Das ist im Allgemeinen nicht das, was Sie wollen, da es Cache-Richtlinien-Header wie max-age usw. ignoriert. Das klingt also nicht nach einer guten allgemeinen Antwort. Die scheinbar beste Wahl ist “NSURLRequestUseProtocolCachePolicy”, aber das scheint nichts zu tun.
Es wird beim ersten Mal eine URL geladen und dann nur nach Inhaltsänderungen gesucht. Wenn der URL-Inhalt keine Aktualisierungen enthält, wird er aus dem Cache (lokaler Speicher) geladen.
Kannst du es ein bisschen erklären?
– Michi
3. Oktober 14 um 7:07 Uhr
Es wird beim ersten Mal eine URL geladen und dann nur nach Inhaltsänderungen gesucht. Wenn der URL-Inhalt keine Aktualisierungen enthält, wird er aus dem Cache (lokaler Speicher) geladen.
– Rahul K Rajan
6. Oktober 14 um 4:45 Uhr
Ja, aber tun Sie dies als Antwort
– Michi
6. Oktober 14 um 4:49 Uhr
Beyogen auf diesen Diskussionsthread Es scheint, dass kein Caching auf Betriebssystemebene möglich ist UIWebView. Aufgrund meiner Erfahrung habe ich festgestellt, dass Safari auf meinem iPhone OS-Gerät seine Webseiten nicht zwischenspeichert (z. B. durch Drücken der Zurück-Schaltfläche in Safari wird die alte Seite nicht aus einem Cache neu geladen).
Anscheinend funktioniert der Cache nur mit HTML 5-Manifest, das offline verwendet wird.
– Jianhua
26. September 12 um 3:25 Uhr
Ich habe ein paar Apps erstellt, die Seiten im Ordner “Dokumente” zwischenspeichern und dann die Zeitstempel der zwischengespeicherten und Webseiten vergleichen, bevor die neue Webseite geladen wird. Der grundlegende Ablauf ist also:
if (fileIsInCache)
if (cacheFileDate > webFileDate)
getCachedFile
else
getFileFromWeb
saveFileToCache
else
getFileFromWeb
saveFileToCache
stuffFileIntoUIView
maybeReduceCache
Sie müssen immer noch ins Internet gehen, um die Header zu erhalten, aber das ist normalerweise viel schneller als das Herunterladen einer ganzen Seite/eines Bildes/einer ganzen Datei.
.
7579100cookie-checkWie kann ich Inhalte in UIWebView zwischenspeichern, um sie später schneller zu laden?yes