2014-09-29 16 views
25

Possiamo aspettarci un aumento di velocità passando da PHP a Hack su HHVM?Il codice scritto in Hack è più veloce del codice scritto in PHP su HHVM?

Sto pensando ai parametri fortemente tipizzati/tipi di ritorno, in particolare scalari, ciò consente a HHVM di fare un lavoro migliore durante la compilazione del codice in codice nativo, oppure il guadagno di velocità è insignificante rispetto all'utilizzo di PHP classico e i suoi tipi misti?

+0

Perché non provarlo e vedere; puoi aspettarti un guadagno di velocità semplicemente passando a PHP su HHVM, indipendentemente dal fatto che tu usi o meno un hack? –

+2

@ Mark potrei ovviamente fare alcuni piccoli benchmark, ma non ho idea se sarebbero rappresentativi. Sono più interessato alla teoria alla base di questo, da qualcuno che ha approfondimenti su come funziona il compilatore JIT HHVM al suo interno. – Benjamin

+0

Beh, se stai parlando sia della piattaforma di switching che della lingua di commutazione ....è difficile ottenere una misura onesta da uno o l'altro se si confrontano due grandi cambiamenti ... quasi sicuramente si vedrà un cambio di velocità passando da dire Apache/mod_php a hhvm/php –

risposta

55

I answered this on Reddit a few months back. Ho copiato la mia risposta qui sotto, dal momento che lo stato del mondo non è cambiato molto da allora. Ma tieni presente che HHVM si sta ancora evolvendo, abbastanza velocemente, e quindi potrebbe facilmente non essere aggiornato in un mese o due.

Lavoro con il team di Hack su Facebook. La risposta a questa domanda è piuttosto sottile.

È probabile che lo spostamento del codice PHP da PHP5 a HHVM comporti un notevole aumento della velocità, come altri hanno affermato. Quanto significativo dipende da una tonnellata di fattori. Se sei già legato all'IO, potresti non vedere molto; se sei più vicino al limite della CPU, sono stati segnalati aumenti di velocità fino a qualcosa come 5x, anche se è probabile che tu ottenga qualcosa da qualche parte tra di loro. Dovresti andare a provarlo sul tuo codice, con un carico di lavoro reale - HHVM ha un sacco di fattori, in particolare un tempo di avvio più ampio, che non fanno molto bene sui microbenchmark, ma su carichi di lavoro reali dovrebbe superare PHP5. Per ottenere il massimo vantaggio, il refactoring del codice per ottenere informazioni dal livello più alto e in funzioni/classi aiuterà un sacco (non è possibile codificare JIT al primo livello), così come impostare repo authoritative mode.

Ma questo è semplicemente PHP su HHVM, non Hack su HHVM. Che velocità ottieni dalla conversione del tuo codice in Hack? Dipende da come si fa la conversione, ma la risposta è, almeno in questo momento, "non molto". Se si passa semplicemente <?hh nella parte superiore di ogni file, anziché <?php e si risolvono eventuali incompatibilità da come up when you run the typechecker, il codice probabilmente eseguirà lo stesso comportamento di prima. Hack e il codice PHP hanno la stessa rappresentazione runtime, quindi non hai davvero cambiato molto.

Se lo fai, però, non stai sfruttando pienamente Hack! Se si entra e si iniziano ad aggiungere annotazioni di tipo, è possibile creare sempre più informazioni per HHVM da utilizzare in fase di runtime. Questo processo è ciò che può accelerare il codice - HHVM può generare codice specializzato in tipo (cioè, più veloce) in molte circostanze in cui prima non avrebbe potuto inferire il tipo. Non aspettatevi neanche un'enorme accelerazione - questo è in gran parte teorico in questo momento, e ci sono molti posti in cui possiamo sfruttare meglio le informazioni sul tipo per generare codice più veloce. (Ad esempio, non eseguiamo molto con i tipi restituiti in fase di esecuzione, ad esempio.) Ma questa è la parte che potrebbe essere di aiuto, e potrebbe aiutare di più man mano che HHVM diventa più intelligente.

Ma ovviamente, tenere a mente che la velocità di esecuzione non era il punto di Hack - si trattava di efficienza dello sviluppatore. Probabilmente non valuterà il guadagno in termini di prestazioni da PHP su HHVM a Hack su HHVM. Il guadagno nella produttività degli sviluppatori, però, probabilmente lo è.

Così lo spostamento da PHP5 a HHVM accelera il codice? Molto probabilmente. Fare una rapida conversione in Hack velocizzarlo? No. L'aggiunta di ulteriori annotazioni sul tipo lo accelera? Forse un po ', forse più in futuro, ma non è questo il punto.

+1

Risposta eccellente e molto informativa. Grazie! – Benjamin

+1

Eccellente sommario da parte di un addetto ai lavori, quindi sicuramente buona intuizione e consulenza sui vantaggi –

+4

Aggiornamento febbraio 2015: la risposta sopra è ancora per la maggior parte vera. L'unico cambiamento di nota è che abbiamo iniziato a sfruttare meglio i tipi di rendimento per le ottimizzazioni delle prestazioni, a partire da HHVM 3.5 o giù di lì. –

Problemi correlati