SlideShare a Scribd company logo
1 of 52
Download to read offline
Компиляция скриптов
       PHP

 Алексей Романенко (РБК)
Зачем?
Как работает PHP
     Server API (SAPI)
 (mod_php, FastCGI, CLI...)
Как работает PHP
                      Server API (SAPI)
                  (mod_php, FastCGI, CLI...)


       PHP Core
(Request management,
    files, network)
Как работает PHP
                      Server API (SAPI)
                  (mod_php, FastCGI, CLI...)


       PHP Core                                   Zend Engine
(Request management,                           (Compile & execute,
    files, network)                            memory management)
Как работает PHP
                       Server API (SAPI)
                   (mod_php, FastCGI, CLI...)


       PHP Core                                     Zend Engine
(Request management,                             (Compile & execute,
    files, network)                              memory management)


                          Extensions
             (date, dom, mysql, reflection, session...)
Процесс выполнения скрипта

    Лексический анализ
     Процесс конвертации кода из набора символов в набор
       токенов
Процесс выполнения скрипта

    Лексический анализ

    Синтаксический анализ
     Происходит анализ токенов для определения их
       грамматической структуры
Процесс выполнения скрипта

    Лексический анализ

    Синтаксический анализ

    Генерация байткода
     На основе лексического и синтаксического анализа генерится
       байт код
Процесс выполнения скрипта

    Лексический анализ

    Синтаксический анализ

    Генерация байткода

    Выполнение байткода
Каждый раз одно и то же!

    Это медленно :-(
Ускоряем

    Кеш байткода (APC, eAccelerator, Xcache, Zend Accelerator)

    Написание расширений (C)

    Переписать все на C/C++

    Компилировать php-код куда-то и во что-то
А давайте что-нибудь
   скомпилируем!
Компиляция

    Native code

    Non-native code
Native code

    Roadsend PHP

    Raven

    PHC (PHP Open Source compiler)

    HipHop
Non-native code
Java bytecode

    Quercus

    Project Zero


.NET

    Phalanger
Roadsend PHP

    Разработка началась в 2002

    OpenSource с 2007

 Использует компилятор Bigloo для языка
Scheme

    Не использует Zend Engine
Roadsend PHP

    Standalone binaries

    Модуль для Apache

    Standalone web-server
Roadsend PHP

  Не работает!
Raven (rphp)

Это Roadsend, переписанный на C++ и
использующий LLVM в качестве генератора
кода.
Raven (rphp)

Under construction
phc

    OpenSource с 2005

    Использует PHP embeded SAPI

    Standalone binary executables

    PHP-code → PHP-extension, C
phc / cli-app
$ phc -c helloworld.php -o helloworld
$ ./helloworld


$ phc --generate-c helloworld.php > helloworld.c
$ phc -O2 -c helloworld.php -o helloworld
$ phc -c -O2 helloworld.php -o helloworld -C-fno-inline
phc / web-app
$ phc --extension=helloworld --generate-c helloworld.php > ext/helloworld.c
$ phpize --with-php-config=/usr/bin/php-config
$ ./configure —enable-helloworld
$ make
$ sudo make install
phc

Плюсы:

    Совместимость с “обычным” PHP

    Поддержка расширений

    Хорошая документация
phc

Минусы:

    Не полноценный binary executable

    Зависит от Zend Engine

    Сложность подключения для web-проектов
HipHop

    Разработан в Facebook

    OpenSource с февраля 2010

    Транслирует код php в код C++

    100% php-кода компилируется через HipHop

    Заявлено снижение CPU на 50%
HipHop

    Standalone binary executables

    Multi-threaded Web server

    Встроенный debuger (local и remote)
HipHop: hphp --help
--config=FILE
       Опции из конфигурационного файла. Файл в формате HDF

--db-config=STRING
       Читает конфигурацию из DB. Строка в формате :@:/.

-l, --log=INT
         Устанавливает уровень логирован в stdout:
         0: No logging
         1: Only errors
         2: The same as 1 plus warnings.
         3: The same as 2 plus extra information.
         4: All log messages.

--input-list=FILE
        Устанавливает путь к файлу со списком PHP-скриптов, которые будут компилироваться.
HipHop: hphp
$ hphp hello.php --keep-tempdir=1 –log=3

running hphp...
creating temporary directory /tmp/hphp_AZ4F7V ...
parsing inputs...
parsing inputs took 0'00" (55 ms) (null)
pre-optimizing...
pre-optimizing took 0'00" (325 ms) (null)
inferring types...
inferring types took 0'00" (134 ms) (null)
post-optimizing...
post-optimizing took 0'00" (72 ms) (null)
creating CPP files...
creating CPP files took 0'00" (634 ms) (null)
compiling and linking CPP files...

compiling and linking CPP files took 2'19" (139099 ms) (null)
HipHop
$ ls -lh /tmp/hphp_AZ4F7V
total 29M
-rw-r--r-- 1 santiago santiago 24K 2010-10-24 23:49 CMakeCache.txt
drwxr-xr-x 6 santiago santiago 4.0K 2010-10-24 23:51 CMakeFiles
-rw-r--r-- 1 santiago santiago 1.6K 2010-10-24 23:49 cmake_install.cmake
-rw-r--r-- 1 santiago santiago 3.2K 2010-10-24 23:49 CMakeLists.txt
-rw-r--r-- 1 santiago santiago 23K 2010-10-24 23:49 Makefile
drwxr-xr-x 3 santiago santiago 4.0K 2010-10-24 23:49 php
-rwxr-xr-x 1 santiago santiago 28M 2010-10-24 23:51 program
-rw-r--r-- 1 santiago santiago 57 2010-10-24 23:49 sep_extensions.mk
drwxr-xr-x 2 santiago santiago 4.0K 2010-10-24 23:49 sys
HipHop
$ cat /tmp/hphp_AZ4F7V/php/hello.cpp
#include <php/hello.h>
#include <php/hello.fws.h>
#include <runtime/ext/ext.h>

namespace HPHP {

/* preface starts */
extern CallInfo ci_;
/* preface finishes */
Variant pm_php$hello_php(bool incOnce /* = false */,
         LVariableTable* variables /* = NULL */,
         Globals *globals /* = get_globals() */) {
  PSEUDOMAIN_INJECTION(run_init::hello.php, pm_php$hello_php);
  LVariableTable *gVariables __attribute__((__unused__)) = (LVariableTable *)g;
  echo(NAMSTR(s_ss49e671b1, "Hello world!"));
  return true;
} /* function */

}
HipHop: ./program --help
-m, --mode
       run: (default) directly executes the program from command line.
       debug: starts debugger.
       server: starts an HTTP server from command line.
       daemon: starts an HTTP server and runs it as a daemon.
       replay: replays a previously recorded HTTP request file.
       translate: translates a hex-encoded stacktrace.

-c, --config=FILE
-p, --port
--admin-port
--debug-host
--debug-port
HipHop: admin server
GET http://localhost:9999

/stop: stop the web server
/status.xml: show server status in XML
/status.json: show server status in JSON
/status.html: show server status in HTML
/prof-cpu-on: turn on CPU profiler
/prof-cpu-off: turn off CPU profiler
/stats-malloc: turn on/off malloc statistics
/leak-on: start leak detection
etc
HipHop: status
GET http://[server]:9999/status.[xml|json|html]

Показывает статус запущенных процессов сервера и воркеров.

[process]
     [id]
     [build]
     ...
  [threads]
     [thread]
         [id]
         [req]
         ...
     [thread]
     ...
HipHop: stats
Статистика сервера:
GET http://[server]:9999/stats.[fmt]?from=[t1]&to=[t2]&keys=...

Доступные ключи:
     SQL Stats
     MemCache Stats
     APC Stats
     Memory Stats
     Page Sections
     evhttp Stats:
     Application Stats ( hphp_stats($key, $count); )
HipHop: debug
$ ./hphpi -f test.php
$ ./hphpi -m debug -f test.php

hphpd> break test.php:5
hphpd> break foo()
hphpd> run
hphpd> print $a
hphpd> <?php print $a; ?>
hphpd> continue
hphpd> quit
HipHop: RPC-server
http://[server]:[port]/function_name?params=...
      params – json-массив

http://[server]:[port]/function_name?p=[json value]&p=[json value]...

Return:
    array {
        "return" => [function's return]
    }
HipHop
Не поддерживается:

    eval()

    create_function()

    preg_replace() c /e
HipHop
Плюсы:

    Активно развивается + поддержка Facebook

    Native code

    Прирост производительности, снижение CPU

    Гибкость в конфигурации, администрированию и debug

    Много дополнительных возможностей

    Неплохая документация

    Production-ready
HipHop
Минусы:

    Сложность сборки, ряд ограничений

    32bit support experimental

    Поддержка модулей ограничена

    Нет поддежки PHP 5.3 (скоро)
HipHop


    Не ускоряет ваши SQL-запросы

    Не ускоряет загрузку картинок и статического контента

    Не улучшает отладку

    Это не silver bullet для PHP
HipHop


    Снижение CPU → уменьшение кол-во серверов
Benchmark #1
<?php
$r = 0;
for ($i = 0; $i < 10000; $i++) {
    for ($j = 0; $j < 10000; $j++) {
        $r = ($r + ($i * $j) % 100) % 47;
    }
}
echo 'answer: ' . $r . "n";

?>
Benchmark #1
$ uname -srvmo
Linux 2.6.32-21-generic #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686
GNU/Linux


1. HipHop — 15,68 сек
2. PHP 5.3.2 — 24,79 сек
3. phc — 31,2 сек
Benchmark #2
http://svn.php.net/viewvc/php/php-src/trunk/Zend/bench.php


1. HipHop — 2,879 сек
2. phc — 5,66 сек
3. PHP 5.3.2 — 8,49 сек
Benchmark #3
1. Apache/2.2.14 + php-5.3.2
2. Apache/2.2.14 + php-5.3.2 + APC 3.1.3
3. Nginx 0.7.65 + php-fpm 5.3.3
4. Nginx 0.7.65 + php-fpm 5.3.3 + APC 3.1.4
5. HipHop
Benchmark #3
HTML-страница, 10 include “*.php”, rps
Так что же выбрать?
Компилировать или нет?
1. Упираемся в CPU 100%
2. Автономность вашего приложения
3. Снижение кол-ва серверов
4. Много php-кода, который лень переписывать
Ссылки
Roadsend   http://code.roadsend.com/pcc
phc        http://www.phpcompiler.org/
HipHop     http://github.com/facebook/hiphop-php/wiki
СПАСИБО!

     Вопросы?

   Алексей Романенко
E-mail: aromanenko@rbc.ru

More Related Content

What's hot

Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Ontico
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Alexey Lesovsky
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Ontico
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Ontico
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Stas Vyschepan
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays HighloadYehor Herasymchuk
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Yandex
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаAlexei Smolyanov
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ruNikolay Samokhvalov
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)Ontico
 
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Fwdays
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussiaNikolay Samokhvalov
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Timur Shemsedinov
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Ontico
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан КупреевOpenVZ
 
Perl Debugger и mod_perl
Perl Debugger и mod_perlPerl Debugger и mod_perl
Perl Debugger и mod_perlИван mrRico
 

What's hot (20)

Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
 
Problem my sql_2
Problem my sql_2Problem my sql_2
Problem my sql_2
 
Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.Highload 2014. PostgreSQL: ups, DevOps.
Highload 2014. PostgreSQL: ups, DevOps.
 
Install denwer
Install denwerInstall denwer
Install denwer
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)Движение по хрупкому дну / Сергей Караткевич (servers.ru)
Движение по хрупкому дну / Сергей Караткевич (servers.ru)
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
 
PHP
PHPPHP
PHP
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
 
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
 
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
2014.10.15 Мурат Кабилов, Avito.ru #PostgreSQLRussia
 
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
Примеры быстрой разработки API на масштабируемом сервере приложений Impress д...
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
 
Perl Debugger и mod_perl
Perl Debugger и mod_perlPerl Debugger и mod_perl
Perl Debugger и mod_perl
 

Viewers also liked

Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPOleg Poludnenko
 
Преимущества PHP 7: от D7 до новой виртуальной машины
Преимущества PHP 7:  от D7 до новой виртуальной машиныПреимущества PHP 7:  от D7 до новой виртуальной машины
Преимущества PHP 7: от D7 до новой виртуальной машины1С-Битрикс
 
DDоS практическое руководство к выживанию (Александр Лямин)
DDоS практическое руководство к выживанию (Александр Лямин)DDоS практическое руководство к выживанию (Александр Лямин)
DDоS практическое руководство к выживанию (Александр Лямин)Ontico
 
How PHP Works ?
How PHP Works ?How PHP Works ?
How PHP Works ?Ravi Raj
 
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Ontico
 
Современные технологии сайтостроения для решения бизнес-задач
Современные технологии сайтостроения для решения бизнес-задачСовременные технологии сайтостроения для решения бизнес-задач
Современные технологии сайтостроения для решения бизнес-задач1С-Битрикс
 

Viewers also liked (6)

Алексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHPАлексей Иванкин: Highload + PHP
Алексей Иванкин: Highload + PHP
 
Преимущества PHP 7: от D7 до новой виртуальной машины
Преимущества PHP 7:  от D7 до новой виртуальной машиныПреимущества PHP 7:  от D7 до новой виртуальной машины
Преимущества PHP 7: от D7 до новой виртуальной машины
 
DDоS практическое руководство к выживанию (Александр Лямин)
DDоS практическое руководство к выживанию (Александр Лямин)DDоS практическое руководство к выживанию (Александр Лямин)
DDоS практическое руководство к выживанию (Александр Лямин)
 
How PHP Works ?
How PHP Works ?How PHP Works ?
How PHP Works ?
 
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
Системный администратор Vkontakte. Как? / Антон Кирюшкин (Vkontakte)
 
Современные технологии сайтостроения для решения бизнес-задач
Современные технологии сайтостроения для решения бизнес-задачСовременные технологии сайтостроения для решения бизнес-задач
Современные технологии сайтостроения для решения бизнес-задач
 

Similar to Компиляция скриптов PHP (Алексей Романенко)

Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальBadoo Development
 
Highload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighLoad2009
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkOleksandr Torosh
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusCisco Russia
 
Vladimir V Perepelitsa Ae Highload
Vladimir V  Perepelitsa Ae HighloadVladimir V  Perepelitsa Ae Highload
Vladimir V Perepelitsa Ae Highloadrit2010
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)Sergey Skvortsov
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Alexey Kachayev
 
современная практика статического анализа безопасности кода веб приложений
современная практика статического анализа безопасности кода веб приложенийсовременная практика статического анализа безопасности кода веб приложений
современная практика статического анализа безопасности кода веб приложенийSergey Belov
 
Платформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаПлатформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаГеоргий Драк
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf Conference
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Ontico
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Nikita Borzykh
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_rumcroitor
 
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Igor Miniailo
 

Similar to Компиляция скриптов PHP (Алексей Романенко) (20)

Как мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон ДовгальКак мы делаем модули PHP в Badoo – Антон Довгаль
Как мы делаем модули PHP в Badoo – Антон Довгаль
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Enter: legacy code
Enter: legacy codeEnter: legacy code
Enter: legacy code
 
Highload2009 Rybak Badoo Os
Highload2009 Rybak Badoo OsHighload2009 Rybak Badoo Os
Highload2009 Rybak Badoo Os
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
Программируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco NexusПрограммируемость коммутаторов для ЦОД Cisco Nexus
Программируемость коммутаторов для ЦОД Cisco Nexus
 
Vladimir V Perepelitsa Ae Highload
Vladimir V  Perepelitsa Ae HighloadVladimir V  Perepelitsa Ae Highload
Vladimir V Perepelitsa Ae Highload
 
Catalyst – MVC framework на Perl (RIT 2008)
Catalyst – MVC framework на Perl  (RIT 2008)Catalyst – MVC framework на Perl  (RIT 2008)
Catalyst – MVC framework на Perl (RIT 2008)
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
современная практика статического анализа безопасности кода веб приложений
современная практика статического анализа безопасности кода веб приложенийсовременная практика статического анализа безопасности кода веб приложений
современная практика статического анализа безопасности кода веб приложений
 
Платформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчикаПлатформа .NET Core глазами PHP-разработчика
Платформа .NET Core глазами PHP-разработчика
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Chef
ChefChef
Chef
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
 
SAP hands on lab_ru
SAP hands on lab_ruSAP hands on lab_ru
SAP hands on lab_ru
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
 
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Компиляция скриптов PHP (Алексей Романенко)

  • 1. Компиляция скриптов PHP Алексей Романенко (РБК)
  • 3. Как работает PHP Server API (SAPI) (mod_php, FastCGI, CLI...)
  • 4. Как работает PHP Server API (SAPI) (mod_php, FastCGI, CLI...) PHP Core (Request management, files, network)
  • 5. Как работает PHP Server API (SAPI) (mod_php, FastCGI, CLI...) PHP Core Zend Engine (Request management, (Compile & execute, files, network) memory management)
  • 6. Как работает PHP Server API (SAPI) (mod_php, FastCGI, CLI...) PHP Core Zend Engine (Request management, (Compile & execute, files, network) memory management) Extensions (date, dom, mysql, reflection, session...)
  • 7. Процесс выполнения скрипта  Лексический анализ Процесс конвертации кода из набора символов в набор токенов
  • 8. Процесс выполнения скрипта  Лексический анализ  Синтаксический анализ Происходит анализ токенов для определения их грамматической структуры
  • 9. Процесс выполнения скрипта  Лексический анализ  Синтаксический анализ  Генерация байткода На основе лексического и синтаксического анализа генерится байт код
  • 10. Процесс выполнения скрипта  Лексический анализ  Синтаксический анализ  Генерация байткода  Выполнение байткода
  • 11. Каждый раз одно и то же! Это медленно :-(
  • 12. Ускоряем  Кеш байткода (APC, eAccelerator, Xcache, Zend Accelerator)  Написание расширений (C)  Переписать все на C/C++  Компилировать php-код куда-то и во что-то
  • 13. А давайте что-нибудь скомпилируем!
  • 14. Компиляция  Native code  Non-native code
  • 15. Native code  Roadsend PHP  Raven  PHC (PHP Open Source compiler)  HipHop
  • 16. Non-native code Java bytecode  Quercus  Project Zero .NET  Phalanger
  • 17. Roadsend PHP  Разработка началась в 2002  OpenSource с 2007  Использует компилятор Bigloo для языка Scheme  Не использует Zend Engine
  • 18. Roadsend PHP  Standalone binaries  Модуль для Apache  Standalone web-server
  • 19. Roadsend PHP Не работает!
  • 20. Raven (rphp) Это Roadsend, переписанный на C++ и использующий LLVM в качестве генератора кода.
  • 22. phc  OpenSource с 2005  Использует PHP embeded SAPI  Standalone binary executables  PHP-code → PHP-extension, C
  • 23. phc / cli-app $ phc -c helloworld.php -o helloworld $ ./helloworld $ phc --generate-c helloworld.php > helloworld.c $ phc -O2 -c helloworld.php -o helloworld $ phc -c -O2 helloworld.php -o helloworld -C-fno-inline
  • 24. phc / web-app $ phc --extension=helloworld --generate-c helloworld.php > ext/helloworld.c $ phpize --with-php-config=/usr/bin/php-config $ ./configure —enable-helloworld $ make $ sudo make install
  • 25. phc Плюсы:  Совместимость с “обычным” PHP  Поддержка расширений  Хорошая документация
  • 26. phc Минусы:  Не полноценный binary executable  Зависит от Zend Engine  Сложность подключения для web-проектов
  • 27. HipHop  Разработан в Facebook  OpenSource с февраля 2010  Транслирует код php в код C++  100% php-кода компилируется через HipHop  Заявлено снижение CPU на 50%
  • 28. HipHop  Standalone binary executables  Multi-threaded Web server  Встроенный debuger (local и remote)
  • 29. HipHop: hphp --help --config=FILE Опции из конфигурационного файла. Файл в формате HDF --db-config=STRING Читает конфигурацию из DB. Строка в формате :@:/. -l, --log=INT Устанавливает уровень логирован в stdout: 0: No logging 1: Only errors 2: The same as 1 plus warnings. 3: The same as 2 plus extra information. 4: All log messages. --input-list=FILE Устанавливает путь к файлу со списком PHP-скриптов, которые будут компилироваться.
  • 30. HipHop: hphp $ hphp hello.php --keep-tempdir=1 –log=3 running hphp... creating temporary directory /tmp/hphp_AZ4F7V ... parsing inputs... parsing inputs took 0'00" (55 ms) (null) pre-optimizing... pre-optimizing took 0'00" (325 ms) (null) inferring types... inferring types took 0'00" (134 ms) (null) post-optimizing... post-optimizing took 0'00" (72 ms) (null) creating CPP files... creating CPP files took 0'00" (634 ms) (null) compiling and linking CPP files... compiling and linking CPP files took 2'19" (139099 ms) (null)
  • 31. HipHop $ ls -lh /tmp/hphp_AZ4F7V total 29M -rw-r--r-- 1 santiago santiago 24K 2010-10-24 23:49 CMakeCache.txt drwxr-xr-x 6 santiago santiago 4.0K 2010-10-24 23:51 CMakeFiles -rw-r--r-- 1 santiago santiago 1.6K 2010-10-24 23:49 cmake_install.cmake -rw-r--r-- 1 santiago santiago 3.2K 2010-10-24 23:49 CMakeLists.txt -rw-r--r-- 1 santiago santiago 23K 2010-10-24 23:49 Makefile drwxr-xr-x 3 santiago santiago 4.0K 2010-10-24 23:49 php -rwxr-xr-x 1 santiago santiago 28M 2010-10-24 23:51 program -rw-r--r-- 1 santiago santiago 57 2010-10-24 23:49 sep_extensions.mk drwxr-xr-x 2 santiago santiago 4.0K 2010-10-24 23:49 sys
  • 32. HipHop $ cat /tmp/hphp_AZ4F7V/php/hello.cpp #include <php/hello.h> #include <php/hello.fws.h> #include <runtime/ext/ext.h> namespace HPHP { /* preface starts */ extern CallInfo ci_; /* preface finishes */ Variant pm_php$hello_php(bool incOnce /* = false */, LVariableTable* variables /* = NULL */, Globals *globals /* = get_globals() */) { PSEUDOMAIN_INJECTION(run_init::hello.php, pm_php$hello_php); LVariableTable *gVariables __attribute__((__unused__)) = (LVariableTable *)g; echo(NAMSTR(s_ss49e671b1, "Hello world!")); return true; } /* function */ }
  • 33. HipHop: ./program --help -m, --mode run: (default) directly executes the program from command line. debug: starts debugger. server: starts an HTTP server from command line. daemon: starts an HTTP server and runs it as a daemon. replay: replays a previously recorded HTTP request file. translate: translates a hex-encoded stacktrace. -c, --config=FILE -p, --port --admin-port --debug-host --debug-port
  • 34. HipHop: admin server GET http://localhost:9999 /stop: stop the web server /status.xml: show server status in XML /status.json: show server status in JSON /status.html: show server status in HTML /prof-cpu-on: turn on CPU profiler /prof-cpu-off: turn off CPU profiler /stats-malloc: turn on/off malloc statistics /leak-on: start leak detection etc
  • 35. HipHop: status GET http://[server]:9999/status.[xml|json|html] Показывает статус запущенных процессов сервера и воркеров. [process] [id] [build] ... [threads] [thread] [id] [req] ... [thread] ...
  • 36. HipHop: stats Статистика сервера: GET http://[server]:9999/stats.[fmt]?from=[t1]&to=[t2]&keys=... Доступные ключи: SQL Stats MemCache Stats APC Stats Memory Stats Page Sections evhttp Stats: Application Stats ( hphp_stats($key, $count); )
  • 37. HipHop: debug $ ./hphpi -f test.php $ ./hphpi -m debug -f test.php hphpd> break test.php:5 hphpd> break foo() hphpd> run hphpd> print $a hphpd> <?php print $a; ?> hphpd> continue hphpd> quit
  • 38. HipHop: RPC-server http://[server]:[port]/function_name?params=... params – json-массив http://[server]:[port]/function_name?p=[json value]&p=[json value]... Return: array { "return" => [function's return] }
  • 39. HipHop Не поддерживается:  eval()  create_function()  preg_replace() c /e
  • 40. HipHop Плюсы:  Активно развивается + поддержка Facebook  Native code  Прирост производительности, снижение CPU  Гибкость в конфигурации, администрированию и debug  Много дополнительных возможностей  Неплохая документация  Production-ready
  • 41. HipHop Минусы:  Сложность сборки, ряд ограничений  32bit support experimental  Поддержка модулей ограничена  Нет поддежки PHP 5.3 (скоро)
  • 42. HipHop  Не ускоряет ваши SQL-запросы  Не ускоряет загрузку картинок и статического контента  Не улучшает отладку  Это не silver bullet для PHP
  • 43. HipHop  Снижение CPU → уменьшение кол-во серверов
  • 44. Benchmark #1 <?php $r = 0; for ($i = 0; $i < 10000; $i++) { for ($j = 0; $j < 10000; $j++) { $r = ($r + ($i * $j) % 100) % 47; } } echo 'answer: ' . $r . "n"; ?>
  • 45. Benchmark #1 $ uname -srvmo Linux 2.6.32-21-generic #32-Ubuntu SMP Fri Apr 16 08:10:02 UTC 2010 i686 GNU/Linux 1. HipHop — 15,68 сек 2. PHP 5.3.2 — 24,79 сек 3. phc — 31,2 сек
  • 46. Benchmark #2 http://svn.php.net/viewvc/php/php-src/trunk/Zend/bench.php 1. HipHop — 2,879 сек 2. phc — 5,66 сек 3. PHP 5.3.2 — 8,49 сек
  • 47. Benchmark #3 1. Apache/2.2.14 + php-5.3.2 2. Apache/2.2.14 + php-5.3.2 + APC 3.1.3 3. Nginx 0.7.65 + php-fpm 5.3.3 4. Nginx 0.7.65 + php-fpm 5.3.3 + APC 3.1.4 5. HipHop
  • 48. Benchmark #3 HTML-страница, 10 include “*.php”, rps
  • 49. Так что же выбрать? Компилировать или нет?
  • 50. 1. Упираемся в CPU 100% 2. Автономность вашего приложения 3. Снижение кол-ва серверов 4. Много php-кода, который лень переписывать
  • 51. Ссылки Roadsend http://code.roadsend.com/pcc phc http://www.phpcompiler.org/ HipHop http://github.com/facebook/hiphop-php/wiki
  • 52. СПАСИБО! Вопросы? Алексей Романенко E-mail: aromanenko@rbc.ru