Может войдёшь?
Черновики Написать статью Профиль

Laravel на HHVM

перевод

Заинтригованный заявлением команды HHVM о том, что набор тестов Laravel при запуске на HHVM дает 100% положительный результат, я решил сделать базовое Laravel-приложение, работающее на HHVM.

Что такое HHVM?

Для начала история из «Великой книги интернета»:

Сначала PHP был не языком программирования, а набором CGI Perl скриптов, используемых для поддержания личной странички Расмуса. Прошло время, и в конце концов ядро интерпретатора PHP было переписано и названо Zend Engine. Если вам, как и мне, всегда было интересно, что означает «Zend», теперь вы это знаете.

Сегодня на PHP написаны горы сайтов. Об одном вы наверняка слышали — Facebook. И у Facebook, одного из крупнейших сайтов в мире, есть проблема: как взять весь этот PHP-код и сделать его как можно более быстрым?

Программисты сейчас должны подпрыгнуть и закричать: «Я знаю! Я знаю! Скомпилировать его в C(++)!» Это именно то, что сделал Facebook в проекте, который они назвали HipHop for PHP, или короче — «HPHP». Используя компилятор HPHP Facebook может компилировать весь свой PHP-код в бинарный, загружать его на свои серверы, и значительно увеличивать свою производительность. На самом деле Facebook добился 6-кратного увеличения скорости относительно Zend PHP. Потрясающе!

К сожалению, шаг «загружать его на свои серверы» был не таким потрясающим. Скомпилированный бинарный код превысил 1 Гб. К тому же, поддержание компилятора HPHP, как и необходимой HPHPi (среды разработки) и HPHPd (среды отладки), было серьезной задачей. Возможно, самая большая проблема была в том, что HPHPc, будучи компилятором для интерпретируемого языка, не мог поддерживать некоторые возможности PHP, такие как PHPeval() и PHPcreate_function().

Чтобы обойти это, Facebook отказался от HPHPc и создал виртуальную машину PHP под названием HHVM. HHVM преобразует PHP-код в машиночитаемый байт-код, как это делается в JVM. Этот байт-код затем транслируется в 64-битный машинный код во время выполнения, используя JIT-компилятор (Just-In-Time). Теперь у Facebook нет длительного этапа сборки, и он может загружать на серверы только измененные файлы вместо бинарника размером 1 Гб, сохраняя при этом преимущества производительности HPHPc.

Как же?

Отлично! Давайте запустим на ней Laravel.

Сначала я установил HHVM на свой Macbook Air с OS X 10.9, но она работала не совсем хорошо. Когда я попытался получить доступ к серверу через HTTP, он загрузил мой процессор и просто сидел там.

Затем я установил HHVM на свой сервер с Ubuntu 13.10 x64, используя инструкцию на вики HHVM, которая отлично сработала. После этого я закончил с бинарным кодом hhvm, расположенным здесь:

~/dev/hhvm/hphp/hhvm/hhvm

Довольно странная иерархия директорий, но какая разница. Для простого доступа вы легко можете сделать символьную ссылку в /usr/local/bin.

Теперь очередь особенностей Laravel. Тейлор Отвелл выложил в Twitter конфигурацию, которую он использовал, и я использовал её. К сожалению, во время написания статьи Laravel Pastebin был недоступен, поэтому я сделал её зеркало в gist:

Сделайте wget в свою домашнюю директорию:

Server {
  Port = 80
  SourceRoot = /Users/dan/hhvm-test/public/
}

VirtualHost {
 * {
   Pattern = .*
   RewriteRules {
      * {
        pattern = .?

  # app bootstrap
        to = index.php

        # append the original query string
        qsa = true
      }
   }
 }
}

StaticFile {
  Extensions {
    css = text/css
    gif = image/gif
    html = text/html
    jpe = image/jpeg
    jpeg = image/jpeg
    jpg = image/jpeg
    png = image/png
    tif = image/tiff
    tiff = image/tiff
    txt = text/plain
  }
}
shell$ wget https://gist.github.com/jazzdan/8262454/raw/5d190c4de5252399cb421f344a789aeb56bb4ebd/config.hdf

Теперь давайте установим Laravel.

Установите composer, если вы еще этого не сделали:

shell$ curl -sS https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer
$ sudo apt-get install php5-mcrypt

Проверьте наличие mcrypt.

shell$ php -m | grep mcrypt

Установите Laravel:

shell$ composer create-project laravel/laravel hhvm-test --prefer-dist
$ cd hhvm-test
$ composer install

Когда с этим покончено, вы сможете запустить Laravel на HHVM этой командой:

shell$ cd ~/dev/hhvm/hphp/hhvm
$ sudo ./hhvm -m server -c  ~/config.hdf
mapping self...
mapping self took 0'00" (214686 us) wall    time
loading static content...
searching all files under source root.source..
analyzing 5 files under source root...
..loaded 25 bytes of txt firstles
loaded 25 bytes of static content in total
loading static content took 0'00" (15735 us) wall time
page server started
all servers started

Если вы увидите подобный результат, значит у вас все получилось!

Я прошел все шаги из Быстрого старта Laravel на HHVM, и похоже всё работает, включая доступ к базе данных MySQL. Позже я расскажу, как у меня получится разрабатывать Laravel-приложения на ней.

Чем больше глаз, тем меньше от них ускользнёт багов, так говорят. Пожалуйста, проверьте ваши более развитые Laravel-проекты на HHVM, и сообщите об ошибках командам Laravel и HHVM. Я представляю себе будущее, когда благодаря HHVM у всех будут более мощные, более простые в развертывании PHP-приложения.

Как вы считаете, полезен ли этот материал? Да Нет

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.