2009-11-21 11 views
8

Scrivo da anni PHP e ho usato ogni framework sotto il sole, ma una cosa mi ha sempre infastidito ... e questo è che tutta la cosa insanguinata deve essere interpretata ed eseguita ogni volta che qualcuno dice al mio server che loro vuoi che la pagina sia pubblicataAccelerando seriamente PHP?

Ho sperimentato il caching, FastCGI, la coda dei lavori di Zend (e i plug-in di symfony che fanno simili, così come le mie soluzioni basate su DB che implementano la classe System_Daemon per eseguire processi in background) e ho è riuscito a rendere le mie app abbastanza veloci usando tutte quelle cose ... ma non riesco a superare il blocco mentale che i miei file di impostazioni, funzioni di controllo di sistema/ambiente e tutte le cose che dovrebbero essere realmente caricate UNA VOLTA ... carichi ogni dannato tempo qualcuno colpisce la mia pagina.

Quindi, la mia passeggiata conduce al seguente Q--

C'è qualche metodo/tecnica per caricare alcuni aspetti di PHP in RAM in modo che quando viene richiesta la pagina, tutti i miei file settings.yml, i controlli di sistema, i file framework, le pagine memorizzate nella cache ecc. possono essere caricati direttamente dalla memoria senza nemmeno toccare l'HD ... o dover passare attraverso lo stesso meccanismo di caricamento 50.000 volte al giorno per avviare il programma?

Se non c'è niente in PHP ... ci sono altri linguaggi "web" che possono essere compilati in questo modo, per consentire le vere app init-once?

risposta

9

Penso che dovresti dare una prova a memcached, se stai parlando di dati di cache. Penso che PHP sia abbastanza abile nel caching di pagine php compilate se usi cose come mod_php in apache (che non muore tra una richiesta e l'altra).

+0

memcached utilizzato anche da Facebook per il loro caching –

2

Creare una cache a pagina intera sul disco ram e fare in modo che il server Web serva la pagina da lì. Questo è un metodo che usa il plugin per wordpress supercache e funziona benissimo se il tuo sito web è adatto per la memorizzazione nella cache a pagina intera. Questo perché non stai nemmeno invocando l'interprete PHP.

Per gli utenti che hanno effettuato l'accesso (una sessione aperta) è possibile creare una condizione di riscrittura che reindirizzerà la richiesta al motore PHP.

Inoltre, utilizzare sempre una cache di opcode come APC e utilizzarlo per memorizzare i file di configurazione nella cache (anche memcache va bene).

1

Se si richiede un server applicazioni JVM/Tomcat, la risposta è probabile no. Per quanto ne so, nulla (utilizzabile) come questo esiste per PHP. PHP usa un'architettura a zero condiviso, quindi è di progettazione che tutto è configurato su tutte le richieste. Ma in realtà, questo rende la scala di PHP piuttosto buona.

Per quanto riguarda l'accelerazione delle app, provare a utilizzare memcached e un code accelerator. Forse guarda in Zend Server per ottenere un pacchetto completo.

0

Per quanto riguarda la tua ultima domanda, credo che la maggior parte dei framework web Python e Ruby funzionino in questo modo.

Le applicazioni Web di Ruby sono costruite al giorno d'oggi in modo che l'applicazione sia inizializzata solo una volta per processo del server. Quando arrivano le richieste, il server (ad esempio Apache) le passa all'applicazione Web (tramite l'interfaccia Rack) in esecuzione sullo sfondo.

Ecco come funzionano i framework Web basati su Rack. Le versioni precedenti di Ruby on Rails erano simili, sebbene usassero un'interfaccia diversa per comunicare con il server web.

+0

Esiste un equivalente per PHP? –

8

Dai un'occhiata a APC (Alternative PHP Cache), conserva una cache di file compilati (Opcode PHP) e ti consente anche di memorizzare variabili casuali in memoria con apc_fetch, apc_store.

L'installazione è molto semplice e migliora le prestazioni.

+0

+1 perché apc è più di una cache di opcode – gpilotino

+0

Anche questo verrà integrato in PHP 6 –

0

Vorrei tenere d'occhio la ppage di Facebook Engineering (http://www.facebook.com/notes.php?id=9445547199), di tanto in tanto vengono pubblicati post su come mantengono le cose veloci/ottimizzate/scalabili. Penso che l'uso di php sia davvero impressionante.