Come non memorizzare nella cache un file php in cui una cache manifest viene chiamato?
-
26-09-2019 - |
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.
Soluzione
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.