Gli script PHP di default vengono interpretati ogni volta che vengono chiamati dal server http, quindi ogni chiamata avvia l'analisi degli script e probabilmente la compilazione da parte di Zend Engine. È possibile eliminare questo collo di bottiglia utilizzando la memorizzazione nella cache di script, come APC. Mantiene lo script PHP compilato una volta in memoria/su disco e lo usa per tutte le richieste successive. I guadagni sono spesso significativi, specialmente nelle app PHP create con framework sofisticati come ZF.
Ogni richiesta per impostazione predefinita apre una connessione al database, quindi è necessario utilizzare una sorta di pool di connessioni al database o connessioni permanenti (che non sempre funzionano, a seconda della configurazione del server HTTP/php). Non ho mai provato, ma forse c'è un modo per usare memcache per mantenere gli handle di connessione al database.
È anche possibile utilizzare memcache per conservare i dati di sessione, se vengono utilizzati su ogni richiesta. La loro persistenza non è così importante e memcache aiuta a renderlo molto veloce.
L'attuale "problema" è che PHP funziona in modo un po 'diverso da altri framework, perché funziona in modo SSI (include lato server) - ogni richiesta viene gestita dal server http e se richiede l'esecuzione di uno script PHP, il suo interprete viene inizializzato e gli script caricati, analizzati, compilati ed eseguiti. Questo può essere paragonato a salire in macchina, avviare il motore e andare per 10 metri.
L'altro modo è, diciamo, un modo application-server, in cui l'applicazione Web gestisce le richieste nel proprio loop, condividendo sempre le connessioni del database e non inizializzando il runtime più e più volte. Questa soluzione offre una latenza molto più bassa. Questo d'altra parte può essere paragonato a essere già in una macchina da corsa e usarlo per guidare gli stessi 10 metri. ;)
Le precedenti soluzioni di cache/precompilatura e pooling sono le migliori per ridurre il sovraccarico di init.PHP/MySQL è ancora una soluzione basata su RDBMS, e c'è una buona ragione per cui BigTable è, beh, solo un hash grande, grosso, distribuito in maniera massiccia (un po 'di eccessiva semplificazione, lo so) - si legge su High Scalability.
non può essere fatto con PHP e MySQL ... –
200 ms = 0,2 secondi tra i due. Dovresti essere in grado di fare * that * in php? – krosenvold
In primo luogo, è il momento in cui Google visualizza il tempo effettivo impiegato per generare la pagina (conect, query, echo ...) o è solo il tempo necessario per eseguire la query? Credo che sia solo la domanda. Ho molte pagine che impiegano 0,05 secondi per caricare l'intera pagina. –