2015-07-23 11 views
5

Sto sviluppando un'applicazione offline con un insieme di pagine .php. Attualmente ho messo quei file php in un file manifest .appcache e funziona perfettamente. Ma il problema è che, anche se sono online, quando provo ad accedere a una pagina php, carica la versione cache. Ciò che preferisco è una funzionalità come questa,Caching di pagine PHP in HTML5 appcache

  • Se in linea: connettersi al server e caricare le informazioni aggiornate e sovrascrivere quello memorizzato nella cache con nuove informazioni.
  • Se non in linea - mostra l'ultima pagina html statica aggiornata.

Ecco il mio .appcache contenuto del file manifest

CACHE MANIFEST 
#2 
taskmanager.php 
public/css/bootstrap.css.map 
public/css/bootstrap.min.css 
public/css/bootstrap-theme.css.map 
public/css/bootstrap-theme.min.css 
public/css/main.css 
public/css/task-manager.css 
public/js/app.js 
public/js/taskmanager.js 
public/js/offlink.js 
public/js/jquery-2.1.4.js 
public/js/bootstrap.min.js 

NETWORK: 
* 
http://* 

Che taskmanager.php fare è leggere le attività da un database e vederlo. Quando lo metto in cache come sopra, mostrerà sempre l'elenco delle attività quando è stato caricato per la prima volta. Anche quando sono online, non chiama il database e ottiene le nuove voci. Invece è caricato dalla cache. Quindi, la mia soluzione era di metterlo nella sezione FALLBACK come menzionato dalla prima risposta. Anche se ho messo il file taskmanager.php nella sezione FALLBACK come qui di seguito,

FALLBACK 
taskmanager.php static_taskmanager.php 

Ora, se ho la connessione internet, taskmanager.php verrà eseguito e mi mostrerà gli ultimi compiti. Ma voglio rendere static_taskmanager in modo tale che sia sincronizzato con quelle ultime serie di attività. Il che significa che quando l'utente va offline, static_taskmanager.php mostrerà l'elenco più recente di compiti che è stato restituito da taskmanager.php quando l'utente era online). Ma al momento funziona come una pagina statica completa.

  1. È possibile farlo?
  2. Come posso risolvere questo problema?

EDIT

Come ho capito cerchiamo SO e Google, un modo per raggiungere questo è caricare il contenuto dinamico utilizzando AJAX. Ma mi chiedo che sia possibile farlo usando solo il file manifest stesso.

risposta

1

E l'utilizzo di FALLBACK?

FALLBACK

La sezione FALLBACK dice al browser cosa servire quando l'utente tenta di accedere una risorsa memorizzata nella cache in modalità offline. Per questo motivo, sembra leggermente diverso da CACHE e NETWORK. Contiene due valori per riga, separati da uno spazio. Il primo valore è la richiesta URI da abbinare e la seconda è la risorsa inviata al momento della corrispondenza. Lo memorizza nella cache la risorsa a destra per l'utilizzo offline, quindi questo dovrebbe essere un percorso esplicito . (http://html5doctor.com/go-offline-with-application-cache/)

FALLBACK: 
/main.php /static.php 

Con questa configurazione, le richieste di /main.php sarà servita meno che l'utente non è in linea, nel qual caso l'utente vedrà l'ultima versione memorizzata nella cache /static.php.

Ricordare che l'aggiornamento delle risorse sul server non attiverà un aggiornamento della cache. È necessario modificare il file manifest. In tal caso, potresti voler aggiornare il manifest con una versione o un commento data/ora quando viene creata una nuova versione di static.php.

# Generated: 2015-07-23 10:34a 

tardi nota

In questo caso, mi sento di raccomandare la rimozione main.php dalla cache, o avere un ripiego statica che consente all'utente di sapere che stanno guardando i vecchi contenuti. La ragione è che anche se static.php viene aggiornato, se l'utente è offline e non ottiene quell'aggiornamento, vedranno comunque il vecchio contenuto.

Se state vedendo i problemi di prestazioni e vorrebbe ridurre il carico sul server, è possibile creare una versione statica di main.php utilizzando wget, in questo modo:

wget http://example.com/main.php -O main.html 

Questo sarà memorizzare il contenuto della pagina come HTML. Eseguito come cron job, potrebbe essere aggiornato ogni cinque minuti circa.

L'alternativa è aggiornare static.php e l'appcache ogni volta che probabilmente causerà il ricaricamento di tutte le risorse, vanificando così l'intento della cache.

+0

Grazie per la risposta. Sì, il fallback risolverà un'intera parte della mia soluzione. Vorrei anche fare lo static.php sincronizzato con main.php. Il che significa che ogni volta che cambia il contenuto di main.php, voglio che sovrascriva lo static.php nella cache (in tal modo, staticwind static mostrerà le ultime informazioni possibili). È possibile farlo dal lato del cliente? – arunatebel

+0

Aggiornare il timestamp ogni volta che le modifiche di main.php dovrebbero indurre i browser a richiedere una nuova versione di manifest e static.php – user2182349

+0

In realtà per "modifiche" intendiamo principalmente le modifiche al database. Per esempio, per esempio: main.php stampa i nomi di animali da un database. Quindi, quando viene caricato per la prima volta, leggerà i nomi degli animali e la pagina html verrà memorizzata nella cache in appcache. Successivamente, ogni volta che ricarico la pagina (anche quando sono online) mostrerà lo stesso insieme di nomi, ** anche se il database viene modificato **. Quello che voglio è tenere traccia di queste modifiche al database aggiornare la versione della cache sincronizzando comunque tali modifiche. Spero che tu capisca il punto? – arunatebel

Problemi correlati