Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Я ответил на 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 ускорить его? Нет. Увеличивает ли добавление аннотаций типа? Может быть, немного, может быть, больше в будущем, но это не совсем так.