Ist in Hack geschriebener Code schneller als in PHP geschriebener Code auf HHVM?

Lesezeit: 5 Minuten

Können wir einen Geschwindigkeitsgewinn erwarten, wenn wir auf HHVM von PHP zu Hack wechseln?

Ich denke an die stark typisierten Parameter / Rückgabetypen, insbesondere Skalare, die es HHVM ermöglichen, den Code besser in nativen Code zu kompilieren, oder ist der Geschwindigkeitsgewinn im Vergleich zur Verwendung von klassischem PHP und seinen gemischten Typen unbedeutend ?

  • @Mark Ich könnte natürlich ein paar kleine Benchmarks machen, aber ich habe keine Ahnung, ob die repräsentativ wären. Ich interessiere mich mehr für die Theorie dahinter, von jemandem, der Einblicke in die Funktionsweise des HHVM JIT-Compilers im Kern hat.

    – BenMorel

    29. September 2014 um 10:38 Uhr


  • Nun, wenn Sie sowohl über das Wechseln der Plattform als auch über das Wechseln der Sprache sprechen … es ist schwierig, eine ehrliche Messung von der einen oder anderen zu erhalten, wenn Sie zwei große Änderungen vergleichen … Sie würden mit ziemlicher Sicherheit eine Änderung der Geschwindigkeit sehen von sagen wir Apache/mod_php zu hhvm/php

    – Markus Bäcker

    29. September 2014 um 10:43 Uhr


  • Der beste Weg, um herauszufinden, ob eine Methode schneller ist, besteht darin, die Geschwindigkeit zu testen. Messen Sie jedes Vorkommen und sehen Sie, was schneller ist. Ich mache es mit fast jeder Idee, die ich ausprobieren möchte.

    – backend_dev_123

    29. September 2014 um 10:58 Uhr

  • Nun, was Sie beide sagen, ist wahr, aber ich mag nicht nur Benchmarks, sondern auch ein bisschen Theorie. @Mark, ich bin zuversichtlich, dass der Geschwindigkeitsgewinn von mod_php zu HHVM enorm ist. Was mich interessiert, ist: Wenn ich auf HHVM umsteige, wäre Geschwindigkeit ein entscheidender Faktor bei der Wahl zwischen der Hack-Sprache und der PHP-Sprache?

    – BenMorel

    29. September 2014 um 11:30 Uhr

  • Ich habe unten eine vollständige Antwort gegeben, von der ich denke, dass sie sowohl “wie sieht die Beschleunigung theoretisch aus” als auch “wäre Geschwindigkeit ein entscheidender Faktor bei der Wahl zwischen Hack und PHP” sind. Aber wie bei jeder Leistungsfrage ist der Ratschlag, eigene Benchmarks für Dinge durchzuführen, die für Sie wichtig sind, selbst angesichts dessen, was ich unten sage, ein guter Ratschlag.

    – Josh Watzman

    29. September 2014 um 12:42 Uhr


Ich habe vor ein paar Monaten auf Reddit darauf geantwortet. Ich habe meine Antwort unten kopiert, da sich der Zustand der Welt seitdem nicht wesentlich geändert hat. Aber denken Sie daran, dass sich HHVM immer noch weiterentwickelt, eigentlich ziemlich schnell, und daher könnte dies in ein oder zwei Monaten leicht veraltet sein.

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

Das Verschieben Ihres PHP-Codes von PHP5 auf HHVM wird wahrscheinlich zu einer erheblichen Beschleunigung führen, wie andere bereits gesagt haben. Wie signifikant, hängt von einer Menge Faktoren ab. Wenn Sie bereits an IO gebunden sind, sehen Sie möglicherweise überhaupt nicht viel; Wenn Sie näher an der CPU gebunden sind, wurden Beschleunigungen von bis zu etwa dem 5-fachen gemeldet, obwohl Sie wahrscheinlich etwas dazwischen bekommen werden. Sie sollten es an Ihrem eigenen Code mit einer echten Arbeitslast ausprobieren – HHVM hat eine Reihe von Faktoren, insbesondere eine längere Startzeit, die dazu führen, dass es bei Mikrobenchmarks nicht so gut abschneidet, aber bei echten Arbeitslasten sollte es PHP5 übertreffen. Um den größtmöglichen Nutzen zu erzielen, hilft das Refactoring Ihres Codes, um Dinge aus der obersten Ebene in Funktionen/Klassen zu bringen, eine Menge (wir können auf oberster Ebene keinen JIT-Code erstellen), ebenso wie die Einrichtung autoritativer Repo-Modus.

Aber das ist nur einfaches PHP auf HHVM, kein Hack auf HHVM. Welche Beschleunigung erhalten Sie, wenn Sie Ihren Code in Hack umwandeln? Es hängt davon ab, wie Sie die Konvertierung durchführen, aber die Antwort lautet zumindest im Moment “nicht sehr viel”. Wenn du einfach bleibst <?hh am Anfang jeder Datei, statt <?phpund beheben Sie alle Inkompatibilitäten, die kommen, wenn Sie den Typechecker ausführen, dann wird Ihr Code sehr wahrscheinlich genauso funktionieren wie zuvor. Hack- und PHP-Code haben dieselbe Laufzeitdarstellung, sodass Sie nicht wirklich viel geändert haben.

Wenn Sie dies jedoch tun, nutzen Sie Hack nicht voll aus! Wenn Sie anfangen, Typannotationen hinzuzufügen, können Sie immer mehr Informationen für HHVM zur Laufzeit erstellen. Dies Prozess ist das, was Ihren Code beschleunigen kann – HHVM kann in vielen Fällen typspezifischen (dh schnelleren) Code generieren, wo es zuvor möglicherweise nicht in der Lage war, den Typ abzuleiten. Erwarten Sie auch hier keine enorme Beschleunigung – dies ist im Moment weitgehend theoretisch, und es gibt viele Stellen, an denen wir die Typinformationen besser nutzen können, um schnelleren Code zu generieren. (Zum Beispiel machen wir derzeit nicht viel mit Rückgabetypen zur Laufzeit.) Aber das ist der Teil, der helfen könnte, und vielleicht mehr helfen, wenn HHVM intelligenter wird.

Aber denken Sie natürlich daran, dass die Ausführungsgeschwindigkeit nicht der Sinn von Hack war – es ging um die Effizienz der Entwickler. Jegliche Leistungssteigerung wird wahrscheinlich den Aufwand nicht wert sein, von PHP auf HHVM zu Hack auf HHVM zu wechseln. Der Gewinn an Entwicklerproduktivität ist es jedoch wahrscheinlich.

Beschleunigt der Wechsel von PHP5 zu HHVM also Ihren Code? Sehr wahrscheinlich. Beschleunigt eine schnelle Umstellung auf Hack? Nein. Beschleunigt es das Hinzufügen weiterer Typanmerkungen? Vielleicht ein bisschen, vielleicht mehr in der Zukunft, aber darum geht es nicht wirklich.

  • Hervorragende Zusammenfassung von einem Insider, also sicherlich guter Einblick und Beratung in die Vorteile

    – Markus Bäcker

    29. September 2014 um 14:42 Uhr

  • Update Februar 2015: Die obige Antwort ist immer noch größtenteils wahr. Die einzige bemerkenswerte Änderung ist, dass wir ab HHVM 3.5 oder so damit begonnen haben, Rückgabetypen für Leistungsoptimierungen besser zu nutzen.

    – Josh Watzman

    22. Februar 2015 um 23:09 Uhr

  • Jetzt, da PHP 7 skalare Typhinweise und Rückgabetypen hat, schätze ich, dass HHVM ähnliche Optimierungen durchführen kann, wenn PHP-Code ausgeführt wird?

    – BenMorel

    3. Mai 2016 um 8:20 Uhr


  • Ich bin mir nicht sicher, wie sehr HHVM PHP7-Typen optimiert – sie sind kniffliger, da sie basierend auf der Konfiguration von statt Fehler erzwingen können Anrufer. Das ist etwas komplizierter zu prüfen als in Hack.

    – Josh Watzman

    7. Mai 2016 um 13:49 Uhr

  • PHP 7 ist viel schneller als PHP 5, fast so schnell wie HHVM. Und es unterstützt skalare Hinweise, sodass Hack nicht verwendet werden muss.

    – Vahid Amiri

    27. März 2017 um 13:45 Uhr


1179340cookie-checkIst in Hack geschriebener Code schneller als in PHP geschriebener Code auf HHVM?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy