Moin zusammen,
bei iOS (iPad, iPhone) kommt es bei der Installation der Visu als WebApp (Icon auf dem Homescreen) immer wieder mal zu Cache Problemen.
Diese äußern sich so, dass Änderungen am Code der Visu (html, js, usw.) auf dem iPad nicht angezeigt werden.
Grund hierfür ist, dass der Cache in iOS nach Änderungen nicht aktualisiert wird.
Um dies zu umgehen, ist es notwendig iOS mitzuteilen, dass sich Dateien geändert haben. Eine Möglichkeit hierfür ist eine cache Manifest Datei anzulegen. Diese enthält eine Versionsnummer/Hash. Sobald sich diese Datei ändert wird ein Neuladen des Cache in iOS erzwungen.
Der Trick dabei ist, dass die Datei auch über einen php Aufruf erzeugt werden kann. Mit diese php Datei können Hash-Werte aus allen Datei, die gecacht werden, berechnet werden.
Die cache.manifest Datei muss im html-Tag der Seite mit aufgerufen werden.
Hierfür ist die Datei root.html anzupassen.
cache.manifest.php Datei erstellen
Optimierungspotential:
Aktuell arbeite ich mit einer angepassten root.html und habe die cache.manifest Datei in meinem Pages Ordner.
Wenn ich es richtig verstehe, wird der Cache daher auch nur erneuert, wenn sich Dateien in meinem Pages Ordner ändern. Änderungen am JS des SV-Core bekommt mein Manifest nicht mit.
Andererseits werden IMHO auch nur Dateien gecacht, die in der Manifest Datei explizit erwähnt sind. Dann würde das aber bedeuten, dass ich aktuell beim Neuladen einer Seite viel zu viel lade, da die Core Dateien bei mir nicht gecacht werden.
Gruß, Sebastian
bei iOS (iPad, iPhone) kommt es bei der Installation der Visu als WebApp (Icon auf dem Homescreen) immer wieder mal zu Cache Problemen.
Diese äußern sich so, dass Änderungen am Code der Visu (html, js, usw.) auf dem iPad nicht angezeigt werden.
Grund hierfür ist, dass der Cache in iOS nach Änderungen nicht aktualisiert wird.
Um dies zu umgehen, ist es notwendig iOS mitzuteilen, dass sich Dateien geändert haben. Eine Möglichkeit hierfür ist eine cache Manifest Datei anzulegen. Diese enthält eine Versionsnummer/Hash. Sobald sich diese Datei ändert wird ein Neuladen des Cache in iOS erzwungen.
Der Trick dabei ist, dass die Datei auch über einen php Aufruf erzeugt werden kann. Mit diese php Datei können Hash-Werte aus allen Datei, die gecacht werden, berechnet werden.
Die cache.manifest Datei muss im html-Tag der Seite mit aufgerufen werden.
Hierfür ist die Datei root.html anzupassen.
HTML-Code:
<!DOCTYPE html> <html manifest="pages/{{ config_pages }}/cache.manifest.php" type="text/cache-manifest"> <head>
PHP-Code:
<?php
/**
* Iterates through every directory and generate a manifest file.
* If any file change occurs, the manifest changes and the browser triggers an
* application refresh.
*/
header("Cache-Control: max-age=0, no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
header("Expires: Wed, 11 Jan 1984 05:00:00 GMT");
header('Content-type: text/cache-manifest');
$hashes = "";
function printFiles($path = '.', $subDir = ''){
global $hashes;
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
foreach($objects as $name => $file) {
if ($file->isFile() && $file->getFilename() !== 'cache.manifest.php') {
echo substr($name, 2) . "\n";
$hashes .= md5_file($file);
}
}
}
?>
CACHE MANIFEST
<?php
printFiles();
// version hash changes automatically when files are modified
echo "#VersionHash: " . md5($hashes) . "\n";
?>
NETWORK:
*
Aktuell arbeite ich mit einer angepassten root.html und habe die cache.manifest Datei in meinem Pages Ordner.
Wenn ich es richtig verstehe, wird der Cache daher auch nur erneuert, wenn sich Dateien in meinem Pages Ordner ändern. Änderungen am JS des SV-Core bekommt mein Manifest nicht mit.
Andererseits werden IMHO auch nur Dateien gecacht, die in der Manifest Datei explizit erwähnt sind. Dann würde das aber bedeuten, dass ich aktuell beim Neuladen einer Seite viel zu viel lade, da die Core Dateien bei mir nicht gecacht werden.
Gruß, Sebastian
Kommentar