akhcelo (akhceloo) wrote,
akhcelo
akhceloo

Category:

Знакомьтесь — VLD — «Vulcan Logic Disassembler»

взяла отсюда, копирую чтобы не терять: http://www.pvsm.ru/php-2/54103

...перевод довольно старого поста Фабиена (Fabien Potencier) на тему print vs echo, примечательного, на мой взгляд, методом установления «истинны». В отличии от подавляющего большинства подобных исследований, в этом вы не найдете запуска скриптов с echo и print миллионы раз.



Дисклеймер: перевод не является буквально дословным равно как и литературным.


print vs echo, which one is faster?


Как большинство из нас, я устал читать блог-посты про бессмысленные микро-оптимизации типа замены print на echo, ++$I на $i++ или двойные кавычки на одинарные. Почему? Потому что в 99.999999% случаев, это не имеет значения. Почему? Потому что в 99.99% случаев было бы лучше с вашей стороны, если бы вы установили кешер опкода типа APC, или добавили недостающие в вашей базе индексы, или попробовали не делать те 1000 SQL запросов, которые у вас делаются на главной.


Но давайте притворимся, что вы действительно хотите знать ответ на этот вопрос. Вместо того, чтобы пытаться написать скрипт и запустить его миллионы раз, я хочу показать вам инструмент, который может быть полезен тем, что он помогает лучше понять наш php код.


Знакомьтесь — VLD — «Vulcan Logic Disassembler». VLD написан Дериком Ризансом (Derrick Rethans) и, как становится ясно при прочтении главной страницы проекта, «VLD цепляется за Zend Engine и делает дамп всех опкодов выполняемого скрипта».


Установка VLD тривиальна — скачиваете и устанавливаете так же как и любое другое расширение php (привет пользователям M$OS от переводчика).


phpize
$ ./configure
$ sudo make install


Подключите расширение в php.ini


extension=vld.so


(ну или в каком нибудь /etc/php/apache2/conf.d/vld.ini — вам виднее где это правильнее сделать в вашей ОС прим. пер.)


Время заглянуть под капот. Создайте два файла: один с echo и другой с print


// print.php
<?php print 'foo';


// echo.php
<?php echo 'foo';


Запустите эти скрипты из командной строки с параметрами -d vld.activate=1 чтобы активировать VLD вывод и давайте посмотрим на опкод выданный скриптами.


$ php -d vld.active=1 print.php


number of ops:  4
compiled vars:  none
line     #  op                           fetch          ext  return  operands
-------------------------------------------------------------------------------
   1     0  PRINT                                            ~0      'foo'
         1  FREE                                                     ~0
   2     2  RETURN                                                   1
         3* ZEND_HANDLE_EXCEPTION     



$ php -d vld.active=1 echo.php


number of ops:  3
compiled vars:  none
line     #  op                           fetch          ext  return  operands
-------------------------------------------------------------------------------
   1     0  ECHO                                                     'foo'
   2     1  RETURN                                                   1
         2* ZEND_HANDLE_EXCEPTION            


Нашли отличие? — Да, print использует на один опкод больше, потому, что возвращает что-то. Мы можем заключить, что echo быстрее чем print. Но один опкод ничего не стоит. Правда. Даже если в скрипте сотни вызовов print (вспомни формулу X = E-1 прим. пер.)


Кстати, благодаря тому, что print всегда возвращает 1, вы можете делать интересные штуки типа такой:


// Так нельзя сделать с echo
<?php $isFoo and print 'foo'; ?>




Хотите узнать количество опкода выполняемое при запуске скрипта с кучей инклюдов? Попробуйте так:


$ php -d vld.active=1 print.php 2> output
$ grep "number of ops" output | cut -f 5 -d ' ' | (tr 'n' +; echo 0) | bc


Я попробовал на голом WordPress. На моем ноутбуке скрипт виснет до тех пор, пока не вываливается с ошибкой «Bus Error», но уже к этому моменту количество опкода зашкаливает за 2.3 миллиона. Этим все сказано.

Tags: программирование
Subscribe
promo akhceloo march 17, 2018 23:55 8
Buy for 100 tokens
Социальный Капитал, говорите? А Олигархического Коммунизма не желаете? Пусть повисит пока здесь. Может, кто-то из рядовых коммунистов догадается, во что переродилась верхушка их любимой коммунистической партии Зюганова.
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments