Testy deweloperskiej wersji PHP 5.7 NG

Ostatnio obiło mi się o uszy że trwają pracę na nową wersją PHP oznaczoną jako NG, czyli New Generation. Nowa generacja to przede wszystkim radykalna różnica w szybkości pomiędzy starymi wersjami a wcześniej wspomnianą, nową, wersją. Zaciekawiony tematem postanowiłem sprawdzić jak to wygląda na prawdę.

Postawiłem sobie wirtualkę z Ubuntu 12.04 i przystąpiłem do kompilacji źródeł PHP NG.

Pierw potrzebny jest git, czyli wstukujemy

1
sudo apt-get install git-core

tworzymy folder o nazwie tmp i klonujemy sobie repozytorium:

1
2
3
4
git clone https://git.php.net/repository/php-src.git
cd php-src
git branch phpng origin/phpng
git checkout phpng

Ściągniemy tymi komendami źródła PHP. Następnie budujemy konfigurację

1
./buildconf

i zlecamy skonfigurowanie się

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
./configure \
    --prefix=$HOME/tmp/usr \
    --with-config-file-path=$HOME/tmp/usr/etc \
    --enable-mbstring \
    --enable-zip \
    --enable-bcmath \
    --enable-pcntl \
    --enable-ftp \
    --enable-exif \
    --enable-calendar \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-wddx \
    --with-curl \
    --with-mcrypt \
    --with-iconv \
    --with-gmp \
    --with-pspell \
    --with-gd \
    --with-jpeg-dir=/usr \
    --with-png-dir=/usr \
    --with-zlib-dir=/usr \
    --with-xpm-dir=/usr \
    --with-freetype-dir=/usr \
    --with-t1lib=/usr \
    --enable-gd-native-ttf \
    --enable-gd-jis-conv \
    --with-openssl \
    --with-mysql=/usr \
    --with-pdo-mysql=/usr \
    --with-gettext=/usr \
    --with-zlib=/usr \
    --with-bz2=/usr \
    --with-recode=/usr \
    --with-mysqli=/usr/bin/mysql_config

Podczas tego procesu miałem mnóstwo błędów, ale wszystkie były spowodowane brakiem deweloperskich wersji bibliotek i rozwiązanie każdego problemu znalazłem na 1 stronie w Google, gdy wpisałem komunikat błędu. Gdy uporamy się z tym wpisujemy

1
make

a następnie

1
make install

Gdy się to wykona tworzymy katalog:

1
mkdir $HOME/tmp/usr/etc

a w nim plik

1
sudo touch $HOME/tmp/usr/etc/php.ini

i otwieramy go ulubionym edytorem po czym umieszczamy w nim konfiguracje PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
max_execution_time=600
memory_limit=128M
error_reporting=0
display_errors=0
log_errors=0
user_ini.filename=
realpath_cache_size=2M
cgi.check_shebang_line=0

zend_extension=opcache.so
opcache.enable_cli=1
opcache.save_comments=0
opcache.fast_shutdown=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.use_cwd=1
opcache.max_accelerated_files=100000
opcache.max_wasted_percentage=5
opcache.memory_consumption=128
opcache.consistency_checks=0

I na koniec weryfikujemy całość, wklepując:

1
sapi/cli/php -v

i modląc się żeby otrzymać w wyniku coś podobnego do:

1
2
3
4
PHP 5.7.0-dev (cli) (built: Apr 28 2014 11:13:04)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.7.0-dev, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies

Jeszcze dodam – 512MB pamięci na wirtuace to było za mało dla poprawnej kompilacji PHP.

Poza PHP NG zainstalowałem także PHP 5.3 aby móc pokazać jak to jest z tą szybkością.

Zacznijmy od prostego skryptu:

1
2
3
4
5
<?php
for($i=0;$i<1000000;$i++)
{}

?>

Oto jakie czasowe wyniki zaprezentował PHP w werji 5.3

1
2
3
4
5
6
7
8
9
[email protected]:~/tmp/php-src# /usr/bin/php5-cgi -T 1 t1.php > /dev/null

Elapsed time: 0.055548 sec
[email protected]:~/tmp/php-src# /usr/bin/php5-cgi -T 1 t1.php > /dev/null

Elapsed time: 0.055730 sec
[email protected]:~/tmp/php-src# /usr/bin/php5-cgi -T 1 t1.php > /dev/null

Elapsed time: 0.064851 sec

No i wyniki dla tego samego skryptu ale dla PHP NG:

1
2
3
4
5
6
7
8
9
[email protected]:~/tmp/php-src# sapi/cgi/php-cgi -T 1 t1.php > /dev/null

Elapsed time: 0.018371 sec
[email protected]:~/tmp/php-src# sapi/cgi/php-cgi -T 1 t1.php > /dev/null

Elapsed time: 0.020443 sec
[email protected]:~/tmp/php-src# sapi/cgi/php-cgi -T 1 t1.php > /dev/null

Elapsed time: 0.018044 sec

No ok.. Faktycznie sporo szybciej. Ale spróbujmy inny skrypt, może taki:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$n=100000;
for($i=0;$i<$n+1;$i++) $d[$i]=$i;

for($a=2;$a<=$n+1;$a++)
{
  for ($b=2*$a;$b<=$n+1;$b=$b+$a)
  {
    $d[$b]=0;

  }
}
?>

Czyli testujemy szybkość Sitem Eratostenesa ;)

Dla PHP 5.3:

1
2
3
4
5
6
7
8
9
[email protected]:~/tmp/php-src# /usr/bin/php5-cgi -T 1 t2.php > /dev/null

Elapsed time: 0.287300 sec
[email protected]:~/tmp/php-src# /usr/bin/php5-cgi -T 1 t2.php > /dev/null

Elapsed time: 0.335140 sec
[email protected]:~/tmp/php-src# /usr/bin/php5-cgi -T 1 t2.php > /dev/null

Elapsed time: 0.279990 sec

No i to samo dla PHP NG:

1
2
3
4
5
6
7
8
9
[email protected]:~/tmp/php-src# sapi/cgi/php-cgi -T 1 t2.php > /dev/null

Elapsed time: 0.094711 sec
[email protected]:~/tmp/php-src# sapi/cgi/php-cgi -T 1 t2.php > /dev/null

Elapsed time: 0.103434 sec
[email protected]:~/tmp/php-src# sapi/cgi/php-cgi -T 1 t2.php > /dev/null

Elapsed time: 0.083793 sec

Również sporo szybciej ;) Spróbujmy teraz wykonać ten 2 skrypt 100 razy i porównajmy wyniki

PSP 5.3:

1
2
3
[email protected]:~/tmp/php-src# /usr/bin/php5-cgi -T 100 t2.php > /dev/null

Elapsed time: 31.618812 sec

Mnóstwo czasu. Teraz PHP NG:

1
2
3
[email protected]:~/tmp/php-src# sapi/cgi/php-cgi -T 100 t2.php > /dev/null

Elapsed time: 8.965470 sec

Zróbmy jeszcze jeden test. Dla sortowania bąbelkowego – algorytm. Uruchommy to 10 razy.

Oto wyniki:

1
2
3
[email protected]:~/tmp/php-src# /usr/bin/php5-cgi -T 10 t3.php > /dev/null

Elapsed time: 0.003565 sec
1
2
3
[email protected]:~/tmp/php-src# sapi/cgi/php-cgi -T 10 t3.php > /dev/null

Elapsed time: 0.001543 sec

Jak widać w każdym teście PHP NG jest trochę lub dużo szybszy.

Trzymam kciuki za tę gałąź projektu, rozwijanie jej może wskrzesić PHP jako język skryptowy. Jest to też szansa dla dzielonych hostingów na znaczące zmniejszenie obciążenia maszyn a co za tym idzie, cięcie kosztów :)

Dzięki za wizytę,
Mateusz Mazurek
Podziel się na:
    Facebook email PDF Wykop Twitter

Dodaj komentarz

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subskrybuj  
Powiadom o