Domanda

devo generare alcuni rapporti di vario tipo di file (excel, pdf, png), in base agli ingressi di un'applicazione web. L'applicazione è scritta in PHP su un server web Apache.

Bancomat, quando gli utenti visitano la sezione di rapporti, essi innescare l'evento che verifica che non siano presentati nuovi dati nel database e sulla base di queste informazioni, vengono generati i nuovi file di report. Questo rende l'utente di attendere fino a quando i file vengono generati (3-10seconds), ciò che non è un approccio va bene a tutti quindi ho bisogno di qualche consiglio che mi può dare.

È stato utile?

Soluzione

Naturalmente in realtà dipende la vostra applicazione e il sistema, ma in genere quello che faccio è che ho un job di cron che esegue uno script PHP per generare periodicamente report. L'uscita potrebbe essere salvato al file system o in un database. In questo modo i miei rapporti sono generati solo una volta (piuttosto che ogni volta che un utente tenta di scaricare loro) e sono generati solo quando necessario (lo script potrebbe verificare se ha bisogno di generare un rapporto basato su qualunque criteri cambiamento si ha, o si può basta configurarlo per generare interi nuovi report periodicamente). Per farla molto semplice basta chiamare la tua pagina web corrente con wget o curl, e creare una nuova pagina sul tuo server web per scaricare i report salvati.

L'unico problema di questo approccio è utenti potrebbero scaricare i rapporti "stantio" (dati è cambiato, ma i rapporti non sono stati aggiornati). Se questo è davvero un problema un altro approccio sarebbe quello di mantenere uno script PHP in esecuzione in controllo sfondo per i dati modificati e generazione di report in base alle esigenze.

Un altro approccio è che si può solo continuare a generare rapporti quando gli utenti tentano di scaricarli, ma cache i risultati. Anche in questo caso utilizzando i propri criteri di applicazione-specifici che si controlla se il report memorizzato nella cache è abbastanza buono per il download immediato, o generare un nuovo report e la cache di esso. Si potrebbe anche combinare questo con il primo approccio generando periodicamente nuovi report, ma se un utente tenta di scaricare un rapporto che non è aggiornato immediatamente generare una nuova (rendendo l'utente attesa 3-10 secondi).

In ultima analisi, dipende dal sistema e la vostra applicazione.

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