Pregunta

Estoy construyendo una aplicación para el iPhone con jQTouch y utilizar un cachemanifest para almacenar en caché todos los archivos estáticos (imágenes, CSS, JavaScript) para que se cargue más rápido. Sin embargo, los usos página PHP para el contenido dinámico y no quieren que almacenar en caché. Así que estoy generando el cachemanifest con este 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";
?>

En realidad, esto funciona muy bien, excepto por una cosa irritante:

Por lo que he leído en alguna parte del archivo que llama a la cachemanifest automaticamente se incluye en el manifiesto y se almacena en caché beeing. Wich medios que mi index.php puesta en página, donde me llamo la cachemanifest es beeing caché. Esto lleva a problemas muy irritante.

¿hay alguna manera de hacer frente a este o cualquier solución inteligente? La página está en la lista como cachemanifest red, pero parece que este es el beeing invalidado por el hecho de que el cachemanifest se llama desde el archivo.

¿Fue útil?

Solución

idea

de futta es correcto, pero lo que probablemente encontrará es que sólo una sección de su primera página cambia a menudo. Deja que desembocan, a continuación, dejar que el resto de la página se almacene en caché y no se preocupe de ello. Cuando visita la página, la versión en caché se llama al instante, y se puede ejecutar una secuencia de comandos para agarrar el fragmento de página dinámica desde el servidor y configurarlo con innerHTML para completar la página. El efecto es que todavía hay una petición HTTP (más uno para el manifiesto), por lo que no es más lenta, y además se puede mostrar parte de su aplicación, mientras que la sección dinámica está siendo descargado. Si alguna vez desea actualizar la página entera, tienen un comentario en el manifiesto que marca la versión, y el incremento que para volver a cargar toda la aplicación.

limpia y ordenada. Creo que así es como está destinado a ser utilizado, sin tratar de evitar un poco de Javascript el sistema, ya que es después de todo, la única forma en que puede jugar con la línea y hacer cosas útiles con la aplicación cuando esté desconectado.

Otros consejos

tengo la misma experiencia, pero tienen la siguiente solución posible en mi todo-list:

  • crear un manifiesto con todos los activos estáticos
  • incluir una referencia a que se manifiestan en una sola página HTML (buildCache.php)
  • window.applicationCache de verificación si es compatible y si es así:
    • redirección una vez por sesión a cache.html para crear / Actualización / comprobación de la memoria caché
    • tiene buildCache.php mostrar algo de información acerca de lo que se está haciendo (usando los procesadores de eventos applicationCache)
    • tener de nuevo redirección buildCache.php al índice normal (donde no está definido el manifiesto)

I esperanza ( y alguien afirmó que esto es el caso en un comentario en mi blog ) que todas las páginas en el mismo dominio utilizarán los activos estáticos en el applicationCache, incluso si no se hace referencia al manifiesto en todos ellos.

Otra solución sería la de mantener su index.php como carga de la página en blanco o pantalla de presentación de algún tipo, a continuación, redirigir al usuario a la página real dinámico php. Desde el manifiesto está en index.php index.php y redirecciones a bienes-index.php el problema podría ser menos anoying.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top