Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

print либо echo, что стремительней?

Anna | 29.05.2014 | нет комментариев

Под катом перевод достаточно ветхого поста Фабиена (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.

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 миллиона. Этим все сказано.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB