Код написан в Hack быстрее, чем код, написанный на PHP на HHVM?

Можно ли ожидать увеличения скорости, перейдя с PHP на Hack на HHVM?

Я думаю о сильно типизированных параметрах / типах возвращаемых данных, в частности скалярах, что позволяет HHVM лучше выполнять компиляцию кода с помощью собственного кода, или это увеличение скорости незначительно по сравнению с использованием классического PHP и его смешанных типов ?

Я ответил на Reddit несколько месяцев назад . Я скопировал свой ответ ниже, поскольку с тех пор состояние мира не сильно изменилось. Но имейте в виду, что HHVM все еще развивается, довольно быстро на самом деле, и поэтому это может быть легко устаревшим через месяц или два.

Я работаю над командой Hack в Facebook. Ответ на этот вопрос несколько тонкий.

Перемещение вашего PHP-кода с PHP5 на HHVM, скорее всего, приведет к значительному ускорению, как говорили другие. Насколько существенное значение зависит от тонны факторов. Если вы уже привязаны к IO, вы можете не видеть много всего; если вы ближе к привязке к процессору, сообщается об ускорениях до примерно 5x, хотя вы, вероятно, получите что-то где-то между ними. Вы должны пойти и попробовать его по своему собственному коду с реальной рабочей нагрузкой. В HHVM есть множество факторов, в частности, большее время запуска, которые делают это не так хорошо на микрообъектах, но при реальных нагрузках он должен превзойти PHP5. Для максимальной пользы, рефакторинг вашего кода, чтобы вывести вещи из верхнего уровня и в функции / классы, поможет тонну (мы не можем JIT-код на уровне), а также установим режим авторизации репо .

Но это просто PHP на HHVM, а не Hack на HHVM. Какое ускорение вы получаете от конвертации кода в Hack? Это зависит от того, как вы делаете конверсию, но ответ, по крайней мере, прямо сейчас, «не очень». Если вы просто запустите <?hh в верхней части каждого файла вместо <?php и исправьте любые несовместимости, возникающие при запуске typechecker , то ваш код, скорее всего, будет работать так же, как и раньше. Hack и PHP-код имеют одно и то же представление во время выполнения, поэтому вы мало что изменили.

Если вы это сделаете, то вы не в полной мере воспользуетесь Hack! Если вы входите и начинаете добавлять аннотации типов, вы можете создавать все больше и больше информации для HHVM для использования во время выполнения. Этот процесс позволяет ускорить ваш код. HHVM может генерировать специализированный (то есть более быстрый) код во многих случаях, когда до этого он не смог бы вывести тип. Не ожидайте также огромного ускорения здесь – это в настоящее время теоретически, и есть много мест, где мы можем лучше использовать информацию о типе для генерации более быстрого кода. (Например, мы не много делаем с типами возвращаемых данных во время выполнения). Но это та часть, которая может помочь, и может помочь больше, поскольку HHVM становится более умным.

Но, конечно, имейте в виду, что скорость выполнения не была точкой Hack – речь шла о эффективности разработчика. Любое увеличение производительности, вероятно, не будет стоить усилий, исходящих от PHP на HHVM, чтобы взломать HHVM. Однако выигрыш в производительности разработчиков, вероятно, есть.

Так что переезд с PHP5 на HHVM ускоряет ваш код? Скорее всего. Делает ли быстрое преобразование в Hack ускорить его? Нет. Увеличивает ли добавление аннотаций типа? Может быть, немного, может быть, больше в будущем, но это не совсем так.