Ha senso minimizzare PHP?


101

So che puoi minimizzare PHP, ma mi chiedo se ci sia un punto. PHP è un linguaggio interpretato, quindi verrà eseguito un po 'più lentamente di un linguaggio compilato. La mia domanda è: i clienti vedrebbero un miglioramento visibile della velocità nei caricamenti delle pagine e simili se dovessi minimizzare il mio PHP?

Inoltre, c'è un modo per compilare PHP o qualcosa di simile?


Un punto ovvio è l'offuscamento, per rendere il codice meno portabile, il che può essere un obiettivo valido.
John

Risposte:


161

PHP viene compilato in bytecode, che viene quindi interpretato sopra qualcosa di simile a una VM. Molti altri linguaggi di scripting seguono lo stesso processo generale, inclusi Perl e Ruby. Non è proprio un linguaggio interpretato tradizionale come, diciamo, BASIC.

Non ci sarebbe alcun aumento di velocità effettivo se si tentasse di "minimizzare" la fonte. Si otterrebbe un notevole aumento utilizzando una cache bytecode come APC .

Facebook ha introdotto un compilatore chiamato HipHop che trasforma il sorgente PHP in codice C ++. Rasmus Lerdorf, uno dei grandi ragazzi di PHP, ha fatto una presentazione per Digg all'inizio di quest'anno che copre i miglioramenti delle prestazioni forniti da HipHop. In breve, non è molto più veloce dell'ottimizzazione del codice e dell'utilizzo di una cache del bytecode. HipHop è eccessivo per la maggior parte degli utenti.

Facebook ha anche recentemente presentato HHVM , una nuova macchina virtuale basata sul loro lavoro per la creazione di HipHop. È ancora piuttosto nuovo e non è chiaro se fornirà un notevole aumento delle prestazioni al pubblico in generale.

Solo per assicurarti che sia dichiarato espressamente, ti preghiamo di leggere integralmente la presentazione . Indica numerosi modi per confrontare e profilare il codice e identificare i colli di bottiglia utilizzando strumenti come xdebug e xhprof , anche da Facebook.


2
Nota che l'intera faccenda di bytecode / vm in realtà non ti compra nulla senza una cache di bytecode esterna (!). Non capisco perché PHP continua a buttare via il bytecode per impostazione predefinita ...

Immagino che sia un problema di hosting condiviso. APC è incluso in PHP per impostazione predefinita a partire dal vecchio trunk basato su 6.0. Non sono sicuro se lo vedremo di default in 5.4 o qualunque altra cosa il nuovo trunk finirà per essere chiamato ...
Charles

Grazie mille per l'informazione. Purtroppo non ho un controllo completo del mio server (è affittato). È probabile che gli host web utilizzino APC?
Bojangles

3
La maggior parte dei provider di hosting condiviso non utilizza APC. Dovresti esaminare un server privato virtuale in modo da poter controllare la configurazione. I VPS sono spesso più costosi del normale hosting condiviso, ma molto meno costosi di un vero server dedicato. I provider VPS più diffusi includono Slicehost e Linode. Non dimenticate che si dovrebbe essere benchmarking e profiling del codice di prima !
Charles il

15

Rinuncia all'idea di minimizzare PHP a favore dell'utilizzo di una cache opcode, come PHP Accelerator, o APC.

O qualcos'altro come memcached


18
Ho detto "qualcos'altro".
Stephen

3
non è chiaro che tu intenda qualcosa di diverso da una cache del codice operativo.
Treffynnon

5
memcached è un modo perfettamente cromulento per migliorare le prestazioni ... dopo aver eseguito benchmarking e profiling e stabilito che il caching stesso sarà il miglior guadagno di prestazioni possibile.
Charles il

1
se stai usando PHP 5.5, non è necessario installare alcuna cache del codice operativo perché ora viene fornito con esso per impostazione predefinita.
firewall

1
In realtà ho cercato cromulent :(. Sono d'accordo con gli altri, l'uso di memcached in questo contesto è fuorviante. La memorizzazione nella cache dei dati come parte del processo di compilazione non è la stessa del codice operativo risultante.
Mike Purcell

3

Con alcune riscritture (nomi di variabili più brevi) potresti risparmiare alcuni byte di memoria, ma è anche raramente significativo.

Tuttavia progetto alcune delle mie applicazioni in un modo che consenta di concatenare gli script include insieme. Con php -wesso può essere compattato in modo significativo, aggiungendo un piccolo guadagno di velocità per l'avvio dello script. Su un server abilitato per codice operativo, tuttavia, questo salva solo alcuni controlli mtime dei file.


3

Questa è meno una risposta che una pubblicità. Sto lavorando a un'estensione PHP che traduce i codici operativi Zend da eseguire su una VM con digitazione statica. Non accelera il codice PHP arbitrario. Ti consente di scrivere codice che viene eseguito molto più velocemente di quanto consentito da PHP normale. La chiave qui è la digitazione statica. Su una moderna CPU, un linguaggio dinamico mangia la penalità di previsione errata dei rami a destra ea sinistra. Il fatto che gli array PHP siano tabelle hash impone anche costi elevati: molte previsioni errate sui rami, uso inefficiente della cache, scarso prefetch della memoria e nessuna ottimizzazione SIMD. Le previsioni errate di filiale e gli errori di cache in particolare sono il tallone d'Achille per i processori odierni. La mia piccola VM elude questi problemi utilizzando tipi statici e array C invece di tabelle hash. Il risultato finisce per essere circa dieci volte più veloce. Questo utilizza l'interpretazione del bytecode. L'estensione può facoltativamente compilare una funzione tramite gcc. In tal caso, ottieni da due a cinque volte più velocità.

Ecco il link per chiunque sia interessato:

https://github.com/chung-leong/qb/wiki

Di nuovo, l'estensione non è un acceleratore PHP generale. Devi scrivere codice specifico per questo.


2

Sì, c'è un punto (non tecnico).

Il tuo hoster può spiare il tuo codice sul suo server. Se lo minimizzi e lo sminuisci, è per gli spioni più difficile rubarti le idee.

Una delle ragioni per minimizzare e sminuire il php potrebbe essere la protezione dalle spie. Penso che il codice brutto dovrebbe un passo in una distribuzione automatica.


1

Ci sono compilatori PHP ... vedi questa domanda precedente per un elenco; ma (a meno che tu non abbia le dimensioni di Facebook o non stia mirando alla tua applicazione per eseguire sul lato client) sono generalmente molti più problemi di quanto valgano

La semplice memorizzazione nella cache del codice operativo ti darà maggiori vantaggi per lo sforzo richiesto. Oppure profilare il codice per identificare i colli di bottiglia e quindi ottimizzarlo.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.