2014-09-29 2 views
25

Können wir eine Geschwindigkeitsverbesserung durch den Übergang von PHP zu Hack auf HHVM erwarten?Wird Code in Hack schneller geschrieben als in PHP geschriebener Code auf HHVM?

Ich denke an die stark typisierten Parameter/Rückgabetypen, insbesondere Skalare, ermöglicht HHVM eine bessere Arbeit beim Kompilieren des Codes zu nativem Code, oder ist die Geschwindigkeitszunahme im Vergleich zur Verwendung von klassischem PHP unbedeutend und seine gemischten Typen?

+0

Warum versuchst du es nicht und siehst; können Sie eine Geschwindigkeitszunahme erwarten, die einfach auf PHP auf HHVM umstellt, ob Sie hacken oder nicht? –

+2

@Mark Ich könnte natürlich ein paar kleine Benchmarks machen, aber ich habe keine Ahnung, ob sie repräsentativ wären. Ich interessiere mich mehr für die Theorie, die dahinter steckt, wenn jemand Einblick hat, wie der HHVM JIT Compiler in seinem Kern funktioniert. – Benjamin

+0

Nun, wenn Sie sowohl über Switching-Plattform sprechen und Sprache wechseln ....schwer, eine ehrliche Messung von dem einen oder dem anderen zu bekommen, wenn Sie zwei große Änderungen vergleichen ... Sie würden fast sicher sehen, dass eine Geschwindigkeitsänderung von sagen Apache/mod_php zu hhvm/php –

Antwort

55

I answered this on Reddit a few months back. Ich habe meine Antwort unten kopiert, da sich der Zustand der Welt seitdem nicht sehr verändert hat. Aber bedenken Sie, dass sich HHVM immer noch entwickelt, ziemlich schnell, und das könnte in einem oder zwei Monaten einfach veraltet sein.

Ich arbeite an dem Hack-Team bei Facebook. Die Antwort auf diese Frage ist etwas subtil.

Das Verschieben Ihres PHP-Codes von PHP5 auf HHVM führt wahrscheinlich zu einer erheblichen Beschleunigung, wie andere bereits gesagt haben. Wie signifikant hängt von einer Menge Faktoren ab. Wenn Sie bereits IO-gebunden sind, sehen Sie möglicherweise nicht viel; Wenn Sie näher an der CPU-Grenze sind, wurden Beschleunigungen von bis zu 5x gemeldet, obwohl Sie wahrscheinlich etwas dazwischen haben. Sie sollten es auf Ihrem eigenen Code ausprobieren, mit einer echten Arbeitslast - HHVM hat eine Reihe von Faktoren, insbesondere eine größere Startzeit, die es auf Mikrobenben zwar nicht so gut machen, aber bei realen Workloads sollte es PHP5 übertreffen. Um den maximalen Nutzen zu erzielen, hilft das Refactoring des Codes, um Dinge aus dem Toplevel und in Funktionen/Klassen zu bringen, eine Tonne (wir können keinen JIT-Code bei Toplevel programmieren), ebenso wie das Einrichten von repo authoritative mode.

Aber das ist einfach PHP auf HHVM, nicht Hack auf HHVM. Welche Beschleunigung erhalten Sie von der Umwandlung Ihres Codes in Hack? Es hängt davon ab, wie Sie die Konvertierung durchführen, aber die Antwort ist, zumindest jetzt, "nicht sehr viel". Wenn Sie einfach <?hh oben an jeder Datei anstelle von <?php stecken und alle Inkompatibilitäten beheben, die come up when you run the typechecker sind, dann wird Ihr Code sehr wahrscheinlich dasselbe wie zuvor ausführen. Hack und PHP-Code haben die gleiche Laufzeitdarstellung, Sie haben sich also nicht wirklich verändert.

Wenn Sie das tun, dann nutzen Sie nicht alle Vorteile von Hack! Wenn Sie beginnen, Typanmerkungen hinzuzufügen, können Sie mehr und mehr Informationen für HHVM erstellen, die zur Laufzeit verwendet werden. Dieser Prozess kann Ihren Code beschleunigen - HHVM kann in vielen Situationen typspezifischen Code generieren (d. H. Schneller), in dem er zuvor möglicherweise nicht auf den Typ schließen konnte. Erwarten Sie auch hier keine große Beschleunigung - das ist jetzt weitgehend theoretisch und es gibt viele Stellen, an denen wir die Typinformationen besser nutzen können, um schnelleren Code zu generieren. (Zum Beispiel führen wir zur Laufzeit zur Zeit nicht viel mit Rückgabetypen durch.) Aber das ist der Teil, der helfen könnte, und könnte mehr helfen, wenn HHVM schlauer wird.

Aber denken Sie daran, dass die Ausführungsgeschwindigkeit nicht der Punkt von Hack war - es ging um die Effizienz des Entwicklers. Jeglicher Performance-Gewinn wird den Aufwand von PHP auf HHVM zu Hack auf HHVM wahrscheinlich nicht wert sein. Der Gewinn an Entwicklerproduktivität ist jedoch wahrscheinlich.

Wie beschleunigt der Wechsel von PHP5 zu HHVM Ihren Code? Sehr wahrscheinlich. Macht eine schnelle Konvertierung zu Hack es schneller? Nein. Beschleunigt das Hinzufügen von mehr Typ-Annotationen? Vielleicht ein bisschen, vielleicht mehr in der Zukunft, aber das ist nicht wirklich der Punkt.

+1

Ausgezeichnete und sehr informative Antwort. Vielen Dank! – Benjamin

+1

Ausgezeichnete Summe von einem Insider, so sicherlich gute Einblicke und Tipps in die Vorteile –

+4

Update Feb 2015: die obige Antwort ist immer noch weitgehend wahr. Die einzige Änderung ist, dass wir seit der Einführung von HHVM 3.5 bessere Renditentypen für Leistungsoptimierungen nutzen. –

Verwandte Themen