Статьи

Начало работы с HHVM и WordPress

Всего несколько месяцев назад HHVM (виртуальная машина HipHop) была популярным модным словом в сообществе PHP. Многим из нас было любопытно узнать об этой технологии, особенно сообщения об улучшении производительности. Раньше Zend PHP был единственной альтернативой — пока Facebook не представил миру HHVM.

HHVM и WordPress

Хорошие новости, HHVM больше не является модным словом. Многим людям (в том числе и мне) не нравятся раскрученные технологии, но я с радостью напишу это как пост-модное слово.

Итак, давайте погрузимся!

В этой статье я расскажу:

  1. Что такое HHVM?
  2. Что такое хак?
  3. В чем разница с традиционным PHP?
  4. Почему так важно, что оно существует сегодня (а может и нет)?
  5. Каковы некоторые критерии, чтобы увидеть, как HHVM отличается от PHP 5 и PHP 7?

Что такое HHVM?

Чтобы понять, что такое HHVM, нам сначала нужно осветить, что такое Zend Engine (в настоящее время мы находимся в версии 3 с PHP 7). Лучшее объяснение этому можно найти в этой статье в Википедии :

Zend Engine — это механизм сценариев с открытым исходным кодом, который интерпретирует язык программирования PHP. Первоначально он был разработан Энди Гутмансом и Зеэвом Сураски, когда они были студентами Техниона — Израильского технологического института. Позже они основали компанию под названием Zend Technologies в Рамат-Гане, Израиль. Имя Zend является комбинацией их имен, Zeev и Andi.

Это язык или переводчик? Это постоянные дебаты со всеми языками сценариев. Однако, допустим, что PHP — это абстрактный язык, это проект интерпретатора (парсера). Это скорее философская дискуссия, чем настоящая дискуссия. HHVM похож на Zend Engine, но для анализа и запуска исходного кода требуется другой подход.

В итоге оба интерпретатора / синтаксического анализатора могут (теоретически) выполнить один и тот же исходный код и обеспечить одинаковый вывод с одинаковыми побочными эффектами. HHVM использует другой подход. Команда HHVM описывает ее как виртуальную машину, которая использует JIT- компиляцию (как раз вовремя), чтобы получить больше скорости и гибкости, чем Zend.

Еще одна причина рассмотреть HHVM это скорость. До PHP 5. * тесты были на стороне HHVM. Я знаю, что тесты также обсуждаются, но если все сделано правильно, они могут показать некоторую правду. Короче говоря, HHVM оказался лучше PHP, но не так сильно после PHP 7. Разрыв стал более размытым, когда вышел PHP 7. Вот почему сегодня мы проведем несколько тестов, сравнивая их.

HHVM — все еще новая, классная и отличная от Zend технология. Это полностью отличается с технической точки зрения. Некоторые вещи начинаются как эксперимент и могут быть частью ежедневного набора инструментов для некоторых разработчиков. Я упоминал, что он испечен из Facebook и что они также используют его в производстве (хотя не уверен, какие части Facebook). HHVM был построен на основе реальной проблемы Facebook — скорости (плюс некоторые другие сложные проблемы, с которыми большинство разработчиков никогда не столкнется).

HHVM также поддерживает Hack . Hack — это язык программирования для HHVM. Однако не является ли PHP языком, который анализирует HHVM? Да, но есть и Хак. В основном Hack — это PHP плюс некоторые другие функции, которые в настоящее время не являются частью PHP или не запланированы в ближайшем будущем. Поэтому, когда вы пишете PHP, HHVM может анализировать и выполнять его, но вы также можете использовать Hack, который является PHP с некоторыми дополнительными функциями. Это твой выбор. Но не забывайте, что Hack не на 100% совместим с PHP. Специальные функции Hack не работают на Zend Engine, они работают только на HHVM.

Настройка HHVM и WordPress в Docker

Я не хотел делать всю статью только о моей настройке, поэтому я создал WP_Dock (WordPress + Docker). Если вы хотите узнать больше о Docker и WordPress, обязательно прочитайте эти статьи:

Вы можете установить все в своей ОС, но использование Docker облегчает установку для всех в каждой ОС. Это также избавляет от необходимости устанавливать PHP, HHVM, nginx или MySQL на вашу настольную ОС. При этом вы можете следовать собственному руководству HHVM по установке HHVM и WordPress, если хотите.

Сначала вы должны загрузить Docker Toolbox, если вы еще этого не сделали. Затем скачайте или клонируйте этот проект.

git clone https: //github.com/AleksanderKoko/WP_Dock wpdock 

Загрузите WordPress, скопируйте его в папку и переименуйте в «app». Перейдите в папку Docker, cd wpdock/docker .

По умолчанию nginx запускает php-fpm, поэтому вам придется это изменить. В ‘ docker-compose.yml ‘ измените links ‘nginx’ на ‘ hhvm ‘. Это должно выглядеть примерно так:

 nginx: build: ./nginx volumes: -  ./../storage/logs/ nginx: /var/log/nginx -  ./../ app: /var/www/app ports: - "80:80" - "443:443" links: -  hhvm по теме nginx: build: ./nginx volumes: -  ./../storage/logs/ nginx: /var/log/nginx -  ./../ app: /var/www/app ports: - "80:80" - "443:443" links: -  hhvm 

Также в docker/nginx/config/upstream.conf измените php на hhvm . Это должно выглядеть так:

 upstream fastcgi-upstream { server hhvm: 9000 ; } 

Затем выполните docker-compose up -d nginx . Это создает контейнеры Docker, используя в качестве конфигурации docker-compose.yml. Теперь вы будете знать, на каком IP-адресе находятся ваши контейнеры, запишите это для следующего шага.

 docker -machine ip default 

Теперь откройте в браузере IP-адрес, указанный выше, и вы увидите руководство по установке WordPress. Последний шаг — изменить конфигурацию базы данных WordPress. По умолчанию учетные данные указываются в docker-compose.yml . Если вы посмотрите на раздел MySQL, вы увидите:

 mysql: build: ./mysql volumes: -  ./../storage/data/ mysql: /var/lib/mysql -  ./../storage/logs/ mysql: /var/log/mysql ports: - "3306:3306" environment: MYSQL_DATABASE: databasename MYSQL_USER: username MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: root 

Если вы хотите изменить имя базы данных, имя пользователя и пароль, измените эти значения и затем:

 docker -compose down docker -compose up -d -- build nginx 

Примечание: хост MySQL должен быть IP-адресом машины. Тот, который вы использовали в браузере, чтобы увидеть установку WordPress.

Чтобы переключиться обратно на PHP, сначала запустите docker-compose down затем измените конфигурацию обратно на PHP. Поэтому удалите « hhvm » как link nginx и добавьте « PHP ». Также обновите docker/nginx/configuration/upstream.conf для:

 upstream fastcgi-upstream { server php: 9000 ; } 

Выполните docker-compose up -d --build nginx чтобы использовать вместо него PHP.

HHVM + WordPress против PHP 7 + WordPress

Теперь для сравнения, это правила. Я буду использовать базовые контейнеры такими, какие они есть. HHVM также можно использовать отдельно, но я использовал его как fpm для сравнения. Я знаю, что оба могут быть настроены для большей оптимизации, но это статья для другого дня. Поскольку HHVM нуждается в разогреве, чтобы полностью раскрыть свой потенциал, я должен сначала сделать несколько запросов, чтобы HHVM скомпилировал свои вещи (мы сделаем то же самое для PHP, чтобы сделать вещи более ровными). Для теста мы будем использовать Apache Bench (ab). Проверьте их документы для установки или как использовать его, если вы хотите запустить тесты на вашем компьютере. Кроме того, у Бруно Скворца есть отличная статья о Apache Bench, которая поможет вам начать работу.

Моя команда скамейке: ab -n 500 -c 100 http://192.168.99.100 . Всего 500 запросов с 100 одновременными запросами.

Результаты PHP

Результаты PHP

Результаты HHVM

Результаты HHVM

79 секунд против 18 секунд звучит как большое обещание, даже если 79 секунд — PHP 7. Но я должен признать, что я не оптимизировал PHP или HHVM. Может быть, HHVM быстрее из коробки, так что не принимайте мои слова как должное — примите это с крошкой соли, проверьте сами. В реальном мире PHP 7 может быть даже быстрее, чем HHVM.

Несколько заключительных советов

HHVM кажется крутой технологией (вот почему я упаковал ее в Docker). Тем не менее, я должен предупредить вас, используйте его с осторожностью. Zend Engine — это зрелый, проверенный в бою инструмент. PHP в целом проверен в бою и не страдает от шумихи. Это не значит, что вы не можете экспериментировать с этим. Это не единственная проблема. В WordPress многие плагины и темы могут не работать с HHVM. Они были построены на PHP, и HHVM не на 100% совместим с PHP.

Вывод

В этой статье мы увидели, что такое HHVM и как настроить WordPress с помощью HHVM.

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

Сам PHP заимствовал много вещей из Java или Laravel из Ruby on Rails. Кроме того, что команда HHVM отличается крутостью, быстротой и новым подходом, она также подтолкнула команду позади Zend Engine к тому, чтобы стать еще лучше. PHP 7 был одним из лучших обновлений для сообщества PHP. Поскольку сам PHP в сочетании с Zend, конкуренция со стороны других команд — это хорошо. Кроме того, некоторые могут знать, что HHVM — не единственная виртуальная машина в игре. Tagua VM — это новая виртуальная машина, написанная на Rust. Кроме того, их подход отличается, где основная идея должна была быть безопасной для памяти.

Будучи любопытным, эксперименты и постановки в большинстве случаев различны. Однако, если это случилось, что вы сами попробовали HHVM, я хочу услышать от вас. Какой у вас опыт работы с HHVM? Вы пытались сравнить его на реальном сайте? Какие (если есть) проблемы возникли?