¿El código escrito en Hack es más rápido que el código escrito en PHP en HHVM?


¿Podemos esperar una ganancia de velocidad al pasar de PHP a hackear en HHVM?

Estoy pensando en los parámetros fuertemente tipeados / tipos de retorno, en particular los escalares, ¿permiten que HHVM haga un mejor trabajo en la compilación del código a código nativo, o es la ganancia de velocidad insignificante en comparación con el uso de PHP clásico y sus tipos mixtos?

Author: Benjamin, 2014-09-29

1 answers

Respondí esto en Reddit hace unos meses. He copiado mi respuesta a continuación, ya que el estado del mundo no ha cambiado mucho desde entonces. Pero tenga en cuenta que HHVM todavía está evolucionando, bastante rápido en realidad, y por lo que esto podría estar fácilmente fuera de fecha en un mes o dos más.

Trabajo en el equipo de Hackeo en Facebook. La respuesta a esta pregunta es algo sutil.

Mover su código PHP de PHP5 a HHVM es probable que resulte en una aceleración significativa, ya que otros tienen manifestó. Cómo significativo depende de un montón de factores. Si ya está limitado por IO, es posible que no vea mucho en absoluto; si está más cerca de CPU bound, se han reportado aceleraciones de hasta algo como 5x, aunque es probable que obtenga algo en algún lugar intermedio. Deberías ir y probarlo en tu propio código, con una carga de trabajo real H HHVM tiene un montón de factores, notablemente un tiempo de inicio más grande, que hacen que no funcione tan bien en microbenchmarks, pero en cargas de trabajo reales debería superar a PHP5. Para el máximo beneficio, refactorizar su código para obtener cosas fuera del nivel superior y en funciones / clases ayudará a una tonelada (no podemos JIT código en el nivel superior), al igual que la configuración de repo autoritative mode.

Pero eso es PHP simple en HHVM, no hackear en HHVM. ¿Qué velocidad se obtiene a partir de entonces la conversión de su código para Hackear? Depende de cómo hagas la conversión, pero la respuesta es, al menos ahora mismo, "no mucho". Si simplemente vas a pegar <?hh en la parte superior de cada archivo, en lugar de <?php, y arreglas cualquier incompatibilidades que aparecen cuando se ejecuta el typechecker, entonces su código muy probablemente realizará lo mismo que antes. Hack y el código PHP tienen la misma representación de tiempo de ejecución, por lo que realmente no ha cambiado mucho.

Si haces eso, sin embargo, entonces usted no está aprovechando al máximo de Hack! Si entra y comienza a agregar anotaciones de tipo, puede crear más y más información para que HHVM la use en tiempo de ejecución. Este proceso es lo que puede acelerar su código can HHVM puede generar código especializado en tipos (es decir, más rápido) en muchas circunstancias en las que antes podría no haber sido capaz de inferir el tipo. No esperes un gran aumento de velocidad aquí tampoco this esto es en gran parte teórico en este momento, y hay muchos lugares en los que podemos aprovechar mejor la información de tipo para generar código más rápido. (No hacemos mucho con los tipos de retorno en tiempo de ejecución en este momento, por ejemplo. Pero esta es la parte que podría ayudar, y podría ayudar más a medida que HHVM se vuelve más inteligente.

Pero de por supuesto, tenga en cuenta que la velocidad de ejecución no era el punto de Hackear was se trataba de la eficiencia del desarrollador. Cualquier ganancia de rendimiento probablemente no valdrá la pena el esfuerzo que va desde PHP en HHVM hasta hackear en HHVM. La ganancia en la productividad del desarrollador, sin embargo, probablemente lo es.

Entonces, ¿pasar de PHP5 a HHVM acelera tu código? Muy probable. ¿Hacer una conversión rápida para Hackear acelerarlo? No. ¿Agregar más anotaciones de tipo lo acelera? Tal vez un poco, tal vez más en el futuro, pero ese no es realmente el punto.

 58
Author: Josh Watzman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-29 12:40:33