Question

Je construis une application iPhone avec jQTouch et j'utiliser un cachemanifest pour mettre en cache tous les fichiers statiques (images, css, javascript) pour en faire charger plus rapidement. Cependant la page utilise PHP pour le contenu dynamique et je ne veux pas cache. Je suis donc générer le cachemanifest avec ce script PHP (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";
?>

Cela fonctionne vraiment bien fait, sauf pour une chose irritante:

D'après ce que je l'ai lu quelque part le fichier qui appelle le cachemanifest est inclus dans le automaticly manifeste et est beeing mis en mémoire cache. Wich signifie que mon index.php démarrage page où je l'appelle cachemanifest est beeing mis en mémoire cache. Cela conduit à des problèmes très irritants.

est-il possible de traiter ce ou toute solution intelligente? La page est dans le cachemanifest répertorié comme réseau, mais il semble que ce beeing infirmée par le fait que le cachemanifest est appelé à partir du fichier.

Était-ce utile?

La solution

L'idée de

futta est juste, mais ce que vous trouverez probablement que seule une partie de votre frontpage change souvent. Laissez-vide, puis laisser le reste de la page en cache et ne vous inquiétez pas à ce sujet. Lorsque vous visitez la page, la version en cache est appelée instantanément, et vous pouvez exécuter un script pour récupérer le fragment de page dynamique du serveur et définir avec innerHTML pour compléter la page. L'effet est qu'il ya encore une requête HTTP (plus un pour le manifeste), il est donc pas plus lent, et plus vous pouvez montrer une partie de votre application tandis que la section dynamique est en cours de téléchargement. Si jamais vous voulez rafraîchir la page, un commentaire dans le manifeste marquant la version, et incrément pour recharger l'application ensemble.

Propre et soigné. Je pense que c'est la façon dont le système est destiné à être utilisé, sans essayer d'éviter un peu de javascript, puisque c'est après tout la seule façon que vous pouvez jouer avec la ligne et faire des choses utiles avec l'application en mode hors connexion.

Autres conseils

J'ai la même expérience, mais ont la solution de contournement possible sur ma todo-list suivante:

  • créer un manifeste avec tous les actifs statiques
  • inclure une référence à ce manifeste en une seule page html (buildCache.php)
  • contrôle
  • si window.applicationCache est pris en charge et si oui:
    • redirect une fois par session cache.html pour créer / vérifier / mettre à jour le cache
    • ont buildCache.php afficher quelques informations sur ce qui est fait (en utilisant les EventListeners applicationCache)
    • ravoir redirect buildCache.php à l'index normal (où n'est pas défini le manifeste)

Je espère ( et quelqu'un demande c'est le cas dans un commentaire sur mon blog ) que toutes les pages du même domaine utiliseront les actifs statiques dans applicationCache, même si le manifeste est pas référencé dans tous.

Une autre solution serait de garder votre index.php comme une page de chargement vide ou écran de démarrage de quelque sorte, rediriger ensuite l'utilisateur vers la page php dynamique réelle. Étant donné que le manifeste est en index.php et index.php redirige vers réel index.php le problème pourrait être moins anoying.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top