Пользователь
102,0
рейтинг
28 июля 2013 в 04:39

Разработка → Facebook ускорил PHP в девять раз благодаря HipHop VM

PHP*
Компания Facebook продолжает работу по повышению производительности кода PHP. В 2010 году они выпустили компилятор HipHop (HPHPc), который транслировал PHP в C++, жертвуя некоторыми редко используемыми функциями PHP вроде eval(), но повышая производительность.

С активной аудиторией в 1,1 млрд человек, Facebook крайне заинтересован в увеличении производительности веб-приложений. Поскольку многие программисты хорошо знакомы с PHP, компания решила не отказываться от этого «медленного» языка, а постараться максимально оптимизировать его. Кстати, так же делает и «Вконтакте» с недавно представленной технологией kPHP.

Впрочем, прежний подход по трансляции кода PHP в C++ пришлось оставить. Вместо этого выпущены виртуальная машина, окружение и JIT-компилятор для PHP под названием HipHop VM for PHP или просто HHVM. Здесь речь идёт о повышении производительности в пять-девять раз.

В мае серверы Facebook почти полностью перешли с HPHPc на HHVM. На Github выложен исходный код виртуальной машины и уже готовые собранные пакеты для Ubuntu 12.04, Debian 7 (wheezy) и Centos 6.4. Скоро обещают добавить пакет для FreeBSD 9.

По словам представителя Facebook, который недавно выступал на конференции O'Reilly Open Source Conference (OSCON), для стандартного веб-сайта, например, на хостинге Wordpress, повышение производительности будет небольшим: всего в пять раз. Другое дело, если речь идёт о большой кодовой базе PHP, именно для такой оптимизирована виртуальная машина HHVM, так что здесь возможен рост производительности в девять раз.

«Если вы возьмёте какой-то код PHP и запустите его на HipHop, то CPU не будет ограничивающим фактором производительности, — говорит Джоэл Побар (Joel Pobar), менеджер по разработке Facebook. — Скорее вы увидите, что система тратит больше времени на запросы к базе данных или общение с memcache».

HHVM работает по образцу JVM (Java Virtual Machine): JIT-компилятор транслирует исходный код в машинные коды, когда это нужно, и позволяет учитывать различные факторы при генерации машинного кода. Например, если там вызов к базе данных MySQL, то JIT-компилятор посмотрит, какой тип данных вызывается, и сгенерирует соответствующий код на лету.
Анатолий Ализар @alizar
карма
744,5
рейтинг 102,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (39)

  • –20
    Я вчера браузер открыл, а они как ломанутся, как ломанутся!..
    • –7
      м… судя по минусам с черепахами спутал, sorry
  • –14
    А, Ализар.

    Ждал я говна в сторону Kitten PHP, видимо, начать придется мне.
  • –15
    Паша, ты утренние новости уже видел?
  • –16
    ВК, твой выход!
  • 0
    Оффтоп, но недавно словил себя на том, что медленно и незаметно переползаю в Google+ по одной простой причине: оно не тормозит. Речь в первую очередь, конечно, о мобильных приложениях, но и на десктопе Facebook тормозит ровно столько, сколько я им пользуюсь.
    • +36
      +100 не знаю, что они там ускорили, но, по сравнению с контактом например, фейсбук крайне тормознут
      • +8
        Там проблема по большей части с фронтэндом, он безбожно тормознутый
        • +1
          Я бы даже сказал, что проблема в CDN с которого этот фронт доставляется. Как на странно, в каком-то горном шуле во Франции тормозит почти все, кроме Гугла и Фейсбука. А в СНГ ужас, странно что у них вообще получается какую-то аудиторию отвоевывать.
          • 0
            Хотите сказать, что где-нибудь в США Facebook, может, и не тормозит совсем?
            • +2
              Намного меньше, чем у нас. Ну, по крайней мере, фронт. Учитывая задержки фронта, мне сложно оцениить как часто там тупит сервер.
            • 0
              Ну вот я в США и Facebook у меня практически не тормозит.
      • –3
        С моей стороны, судя по таймингам ответов с домена facebook.com (203ms) — весьма быстро еще. Но вся радость заканчивается вот этим: oi43.tinypic.com/xb0dck.jpg
        • +2
          *.channel.facebook.com — это long polling сервера, они так и должны делать, держать коннект как можно дольше, ничего не отдавая.
          У гугла они тоже channel называются.
    • +5
      Не волнуйтесь, G+ тоже тормозит.
      • +2
        Да, последнее обновление веб-интерфейса разочаровывает, но Google+ уже год остается самым плавным и отзывчивым приложением на Android, что я встречал.
  • +3
    Судя по википедии и гитхабу сейчас почти полностью поддерживается PHP 5.4, но что-то никак не найду официальную информацию по этому поводу, может быть кто-нибудь подскажет где она?
  • +1
    eval() потенциально небезопасная штука, так что думаю не критично что ее выкинули…
    Кто нибудь на хабре освящал как работают эти оптимизаторы изнутри ??
    • 0
      www.hiphop-php.com/blog/ — тут некоторые моменты разъясняются, но в общих чертах — работает это все как и любой другой JIT-компилятор. Опять же свои нюансы (как и в V8 для JS)
  • +25
    Уж не знаю, может это просто сейчас модно ругать php, но, как мне кажется, сам по себе язык с хорошими возможностями, тем более что достаточно интуитивно понятный (в т.ч. даже для меня, кто не причастен к написанию web-страниц, но в некоторой степени владеет и пользуется c++).

    А то что fb тормозит, так, мне кажется, php здесь стоит меньше ругать. Основной затык у меня вечно происходит в тех местах, где в работу на странице подключаются скрипты. Или должны подключаться, но не подключаются. Например, развёртывание списка друзей. Шутка ли, в сумме больше 1,5 Мб скриптов на страницу. Вот где бы их силу для оптимизации применить надо.

    Неприятней всего то, что такому подходу стараются следовать многие.
    Нет, допустим на сайтах развлечений, бордах с изображениями очень удобно, чтобы комменты раскрывались/сворачивались тут же, без ухода со страницы, потому что количество постов на странице фиксировано. А когда начинаю листать в fb или vk страницу, то примерно через десяток page down, я начинаю выпадать в осадок. Самое неприятное ещё и то, что календаря как такового нет, от этого навигация становится просто отвратной.
    • +1
      Мне кажется что появление JIT-компилятора для PHP ждали многие, и кто это делал и для каких целей совершенно не важно.
    • 0
      Насчет JS они вроде работают. Недавно же совсем была новость про то, что они переписали все социальные плагины чуть ли не с нуля. С ними же теперь(может, около года) работает Стоян Стефанов.
    • 0
      Интересно, возможно ли такое — говорят их программистам — пользователи жалуются, что медленно сайт работает, а они прилагают уйму усилий, чтобы заставить страницу генерится вместо 0.3 секунд — 0.07 секунд и трубят по всему миру радостные. А все дело в аяксах и мегабайтах яваскрипта… И из полной загрузки страницы — ее генерация — капля в море…
      • 0
        Дело в нагрузке, js — статика, ее проще раздать, а сокращение времени на генерацию — это прямое сокращение процессорного времени, а значит экономия на серверах.
        • 0
          Ага, а ещё экономия на аудитории — народ уходит с тяжелых страниц и можно ещё меньше серверов покупать :)
  • –2
    Только мне кажется что разработчики фейсбука и контакта тратят время на какую-то ерунду?
    • –5
      Нет, не только вам.
    • +70
      На какую-то ерунду тратят время пользователи фэйсбука и вконтакта, а их программисты работают :)
    • НЛО прилетело и опубликовало эту надпись здесь
  • 0
    >>жертвуя некоторыми редко используемыми функциями PHP

    Огласите весь список, пожалуйста.
    • 0
      echo
  • +3
    Интересно было бы запихнуть HHVM и kPHP сюда: www.techempower.com/benchmarks
  • +3
    повышение производительности будет небольшим: всего в пять раз

    Нормально так «небольшим»…
    • 0
      Угу. Относительная разница между 1 и 5 много больше чем разница между 5 и 10.
      • 0
        Что это за математика?
        • 0
          5/1 == 5; 10/5 ==2; 5 > 2;

          Разница от простого перехода на HHVM больше чем от оптимизации кодовой базы под неё после перехода.
  • –3
    Название наверняка навеяно Дискотекой Аварией и их «Х.Х.Х. и Р.Н.Р.».

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.