Frage

Ich baue eine iphone app mit jQTouch und ich verwende eine cachemanifest alle statischen Dateien zwischenzuspeichern (Bilder, CSS, JavaScript), um es schneller zu laden. Doch die Seite verwendet PHP für den dynamischen Inhalt und ich möchte nicht, dass cachen. Also ich bin Erzeugung der cachemanifest mit diesem PHP-Skript (Manifest.php):

<?php
header('Content-Type: text/cache-manifest');
echo "CACHE MANIFEST\n";

$hashes = "";
$lastFileWasDynamic = FALSE;

$dir = new RecursiveDirectoryIterator(".");
foreach(new RecursiveIteratorIterator($dir) as $file) {
  if ($file->IsFile() && $file != "./manifest.php" &&
    substr($file->getFilename(), 0, 1) != ".") {
    if(preg_match('/.php$/', $file)) {
      if(!$lastFileWasDynamic) {
        echo "\n\nNETWORK:\n";
      }
      $lastFileWasDynamic = TRUE;
    } else {
      if($lastFileWasDynamic) {
        echo "\n\nCACHE:\n";
        $lastFileWasDynamic = FALSE;
      }
    }
    echo $file . "\n";
    $hashes .= md5_file($file);
  }
}

echo "\nNETWORK:\nhttp://chart.apis.google.com/\n\n# Hash: " . md5($hashes) . "\n";
?>

Das funktioniert wirklich gut, außer für einen Ärgerliche:

Von dem, was ich irgendwo die Datei lesen, die die cachemanifest nennt wird automatisch im Manifest enthalten und zwischengespeichert wird beeing. Wich bedeutet, dass mein Start-Seite index.php, wo ich die cachemanifest nennen zwischengespeichert wird beeing. Dies führt zu sehr zu reizen Probleme.

ist es eine Möglichkeit, mit dieser oder einer intelligenten Abhilfe umgehen? Die Seite ist in der cachemanifest als NETWORK aufgeführt, aber es sieht aus wie dies durch die Tatsache außer Kraft gesetzt wird gerade, dass der cachemanifest aus der Datei aufgerufen wird.

War es hilfreich?

Lösung

futta Idee ist richtig, aber was werden Sie wahrscheinlich feststellen, dass nur ein Abschnitt Ihrer Titelseite oft ändert. Überlassen Sie das leer ist, dann lassen Sie den Rest der Seite im Cache gespeichert werden und keine Sorge darüber. Wenn Sie die Seite besuchen, wird die Cache-Version nach oben sofort aufgerufen, und Sie können ein Skript ausführen, die dynamische Seite Fragment vom Server zu greifen und es mit innerHTML- stellen Sie die Seite zu vervollständigen. Der Effekt ist, dass es noch eine HTTP-Anforderung ist (plus ein für das Manifest), so dass es nicht langsamer, und es zusätzlich Sie einen Teil Ihrer Anwendung zeigen können, während der dynamische Abschnitt heruntergeladen wird. Wenn Sie jemals die ganze Seite aktualisieren wollen, müssen Sie einen Kommentar in der Manifest-Kennzeichnung der Version und Zuwachs, dass die ganze App neu zu laden.

Sauber und ordentlich. Ich denke, das ist, wie das System soll verwendet werden, ohne zu versuchen, ein wenig Javascript zu vermeiden, da dies doch der einzige Weg ist, können Sie mit dem Offline spielen, um und tun nützliche Dinge mit der App im Offline-Modus.

Andere Tipps

Ich habe die gleiche Erfahrung, aber die folgende mögliche Abhilfe auf meiner To-do-Liste:

  • erstellen Manifest mit allen statischen Vermögenswerte
  • einen Verweis auf dieses Manifest nur in einer html-Seite (buildCache.php)
  • Überprüfen Sie, ob window.applicationCache unterstützt wird, und wenn ja:
    • Umleitung einmal pro Sitzung zu cache.html erstellen / prüfen / aktualisiert den Cache
    • haben buildCache.php einige Informationen über angezeigt werden, was getan wird (unter Verwendung der Application Ereignis-Listenern)
    • buildCache.php Umleitung wieder normal Index (wo das Manifest nicht definiert ist)

I Hoffnung ( und jemand behauptet dies der Fall in einem Kommentar auf meinem Blog ist), dass alle Seiten auf der gleichen Domäne die statischen Vermögenswerte in der Application verwenden, auch wenn das Manifest nicht in allen von ihnen verwiesen wird.

Eine andere Lösung wäre, um Ihre index.php als leere Lade Seite oder Splash-Screen von einer Art zu halten, dann den Benutzer auf die tatsächliche dynamische PHP-Seite umgeleitet werden. Da das Manifest ist in index.php und index.php Umleitungen Echt index.php das Problem weniger sein könnte anoying.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top