Domanda

Sto costruendo un'applicazione iPhone con jQTouch e io uso un cachemanifest per mettere in cache tutti i file statici (immagini, CSS, JavaScript) per renderlo caricare più velocemente. Tuttavia gli usi pagina PHP per il contenuto dinamico e io non voglio mettere in cache questo. Quindi io sono la generazione del cachemanifest con questo script in 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";
?>

Questo in realtà funziona molto bene tranne per una cosa irritante:

Da quello che ho letto da qualche parte il file che chiama il cachemanifest è automaticly incluso nel manifesto ed è beeing memorizzato nella cache. Quale significa che la mia start-page index.php, dove io chiamo la cachemanifest è beeing memorizzato nella cache. Questo porta a problemi molto irritante.

esiste un modo per affrontare questo o qualsiasi soluzione intelligente? La pagina è in cachemanifest elencato come rete, ma sembra che questo è beeing annullato dal fatto che il cachemanifest viene chiamata dal file.

È stato utile?

Soluzione

idea

di futta è giusto, ma ciò che probabilmente troverete è che solo una sezione del vostro frontpage cambia spesso. Lasciare che vuoto, poi lasciare che il resto della pagina da memorizzare nella cache e non ti preoccupare. Quando si visita la pagina, la versione in cache viene richiamato immediatamente, ed è possibile eseguire uno script per afferrare il frammento di pagina dinamica dal server e impostarlo con innerHTML per completare la pagina. L'effetto è che c'è ancora una richiesta HTTP (più uno per il manifesto), in modo che non più lento è, e inoltre è possibile mostrare una parte della vostra applicazione, mentre la sezione dinamica in corso. Se vi capitasse di voler aggiornare l'intera pagina, avere un commento nel manifesto che segna la versione e incremento che per ricaricare l'intera applicazione.

pulita e ordinata. Penso che sia come il sistema è destinato ad essere utilizzato, senza cercare di evitare un po 'di javascript, dal momento che è in fondo l'unico modo è possibile giocare con l'offline e fare cose utili con l'applicazione in modalità offline.

Altri suggerimenti

ho la stessa esperienza, ma hanno la seguente soluzione possibile sulla mia todo-list:

  • creare un manifesto con tutte le attività statiche
  • includere un riferimento a tale manifesta in una sola pagina HTML (buildCache.php)
  • di controllo se window.applicationCache è supportato e in caso affermativo:
    • redirect una volta per sessione per cache.html per creare / controllo / aggiornare la cache
    • ha buildCache.php visualizzare alcune informazioni su ciò che viene fatto (utilizzando i eventlisteners applicationCache)
    • avere buildCache.php reindirizzamento torna all'indice normale (dove il manifesto non è definito)

I speranza ( e qualcuno ha sostenuto questo è il caso in un commento sul mio blog ) che tutte le pagine sullo stesso dominio utilizzeranno i beni statici nel applicationCache, anche se il manifesto non è fatto riferimento in tutti loro.

Un'altra soluzione potrebbe essere quella di mantenere il vostro index.php come una pagina di caricamento vuota o schermata di avvio di qualche tipo, quindi reindirizzare l'utente alla pagina effettiva dinamica php. Dal momento che il manifesto è in index.php e index.php reindirizza a real-index.php il problema potrebbe essere meno anoying.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top