[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Профилирование echo & print
Commander Keen
В моих глазах образовались знаки вопроса, после того, как в книге М.Кузнецова и И.Симдянова - "PHP5" (стр. 359) я прочитал, что у них после профилировки одноимённых инструкций разница составила всего в 0.000002 причём в пользу print!.

Цитата
print - 0.000028
echo - 0.000030


Используют они следующую функцию для профилировки:

function getTime()
{
$part_time = explode(' ', microtime() );
$real_time = $part_time[1] . substr($part_time[0], 1);
return $real_time;
}


Разницу находят с помощью bcsub.

"Да ну на фиг" - подумал я и проверил собственноручно. И что вы думаете? Вот мои результаты (c 'Hello, World!'):

Цитата
print - 0.000077
echo - 0.000018


Разница аж 0,000059 в пользу echo конечно, что естественно! О чём я тут у вас хочу спросить? Да вот о чём:

Сравните результаты мои и их, а затем скажите, почему у них такая мизерная разница во времени выполнения инструкций и почему у них выигрывает print, а не echo. Пускай хоть на мизер, но выигрывает.

Я конечно понимаю, что от сервера многое зависит, от железа и т.д. Но простите, у меня вон какая разница, а у них почти одинаково, да ещё и print победил по времени, чего быть не должно. У кого есть эта книга, те могут воочию убедиться в этом на странице 359.

Вот сижу и думаю, что это, опечатка, игры разума или просто я дундук?



Спустя 7 минут, 45 секунд (4.03.2012 - 16:59) neadekvat написал(а):
Какого года книжка то? На какой версии тогда тестировали?
На днях, если не вчера, php 5.4 вышла. Многое изменилось.

И вообще, у microtime есть аргумент, который позволяет избавиться от всяких explode. Уж не знаю, по невнимательности ли было так написано, либо тогда этот аргумент еще не ввели (есть с 5-й версии).

А вообще, насколько я помню, print возвращает 1, а echo - нет.
Короче, не парься, используй echo, и не заморачивайся по таким мелочам.
И, да, читай более современные книжки. PHP слишком быстро развивается, чтобы можно было себе позволить читать книгу, написанную n лет назад.

Спустя 17 минут, 28 секунд (4.03.2012 - 17:17) Commander Keen написал(а):
Цитата
Какого года книжка то? На какой версии тогда тестировали?
На днях, если не вчера, php 5.4 вышла. Многое изменилось.

И вообще, у microtime есть аргумент, который позволяет избавиться от всяких explode. Уж не знаю, по невнимательности ли было так написано, либо тогда этот аргумент еще не ввели (есть с 5-й версии).

А вообще, насколько я помню, print возвращает 1, а echo - нет.
Короче, не парься, используй echo, и не заморачивайся по таким мелочам.
И, да, читай более современные книжки. PHP слишком быстро развивается, чтобы можно было себе позволить читать книгу, написанную n лет назад.


Да господи, какая разница что там есть у микротайм. Я не смотрел подробно по этой функции ман, да и не я это писал, вам дал то, что в книге.

Цитата
Короче, не парься, используй echo, и не заморачивайся по таким мелочам.


Я не парюсь и не заморачиваюсь. Использую эхо. Просто вот интересно стало, как так у них получилось-то? Может быть реально опечатка или ещё что-то... Хотел просто спросить. Я не спрашиваю, что быстрее, а что медленнее работает, а спрашиваю: - "Как такое может быть?". Если даже будем учитывать то, что у авторов книги версия PHP старше, то наклевывается резонный вопрос: - "Может ли такое быть, чтобы когда-нибудь print выполнялся быстрее echo ?".

Цитата
А вообще, насколько я помню, print возвращает 1, а echo - нет.

Правильно помнишь, но от этого не слаще.

Цитата
И, да, читай более современные книжки. PHP слишком быстро развивается, чтобы можно было себе позволить читать книгу, написанную n лет назад.


Не читаю. Забрал у знакомого (она лежала мёртвым грузом), как раз для чтения глав про профилировку, LDAP и паттерны. То есть не из за PHP.

Вопрос всё ещё открыт smile.gif Кто ещё попробует с толком объяснить, почему у них обе конструкции выполняются почти одинаково по времени? Почему выигрывает print. Это просто интересно и думаю, что для многих.

ЗЫ. Книга 05 года.

Спустя 31 минута, 31 секунда (4.03.2012 - 17:48) neadekvat написал(а):
Цитата (Commander Keen @ 4.03.2012 - 18:17)
ЗЫ. Книга 05 года.

7 лет прошло.
Ну какой смысл спрашивать об информации в книге такой давности?
К тому же, php5 вышел примерно около того (2004 или 2005), так что вполне возможно, что, с учетом времени на написание книги, они проводили тесты на php4.

Спустя 3 минуты, 30 секунд (4.03.2012 - 17:52) Commander Keen написал(а):
Цитата
Ну какой смысл спрашивать об информации в книге такой давности?

Да тут вся соль именно в фактах, понимаешь?! Забей ты на этот год выпуска ) Ладно. Сделаем так:

У кого есть эта книга, издательства bhv, посмотрите, не опечатка ли ?

Спустя 4 минуты, 26 секунд (4.03.2012 - 17:56) neadekvat написал(а):
Цитата (Commander Keen @ 4.03.2012 - 18:52)
Да тут вся соль именно в фактах, понимаешь?! Забей ты на этот год выпуска

А ты в упор игнорируешь мои замечания о версии php.
Ок.

Спустя 28 секунд (4.03.2012 - 17:57) inpost написал(а):
Commander Keen
echo быстрее на мизер. В 5.3 тестировал, и в 5.2 проверял.
Что они там выдумали... ну их проблема, не все идеальны, принт полу-функция, эхо - нет, это оператор, поэтому и быстрее.

Спустя 1 час, 7 минут, 28 секунд (4.03.2012 - 19:04) Commander Keen написал(а):
Цитата
А ты в упор игнорируешь мои замечания о версии php.
Ок.

Я начал это делать с самого начала. И ещё потом задал вот такой вопрос:

Цитата
Если даже будем учитывать то, что у авторов книги версия PHP старше, то наклевывается резонный вопрос: - "Может ли такое быть, чтобы когда-нибудь print выполнялся быстрее echo ?".


Да хватит уже про эти версии ) Нету у нас PHP. Абстрактно будем говорить! Как у них получилось, что оператор медленнее работает, чем полуфункция. Давай так. Абстрагируйся от PHP.

Цитата
Что они там выдумали... ну их проблема, не все идеальны, принт полу-функция, эхо - нет, это оператор, поэтому и быстрее.

Да, но у них с точностью до наоборот получилось smile.gif Вот что странно.

Спустя 1 час, 30 минут, 53 секунды (4.03.2012 - 20:35) killer8080 написал(а):
Commander Keen
выложи исходник ихнего теста, тогда и будем думать. smile.gif

Спустя 3 минуты, 37 секунд (4.03.2012 - 20:38) sergeiss написал(а):
Для получения максимально правильного результата, такие операторы надо загнать в цикл, который выполнить 100тыщ - 1млн раз и разделить на общее количество циклов. Тогда измерения будут более достоверные. Потому что на каждой итерации по-любому будут отличия во времени выполнения.

Спустя 2 часа, 18 секунд (4.03.2012 - 22:39) inpost написал(а):
Commander Keen
Ошиблись, книга же в чём плоха, её штампанули и всё... потом каждый второй смотрим им в глаза и говорит: "вот ошибка", а они исправить не могут smile.gif

Спустя 2 часа, 25 минут, 28 секунд (5.03.2012 - 01:04) Invis1ble написал(а):
Commander Keen
До кучи - http://phpforum.su/index.php?showtopic=38631 biggrin.gif

Спустя 5 минут, 47 секунд (5.03.2012 - 01:10) -=CASPER=- написал(а):
print не может работать быстрее, чем echo, так как print это функция, а echo - оператор.

Спустя 31 минута, 49 секунд (5.03.2012 - 01:42) killer8080 написал(а):
Цитата (-=CASPER=- @ 5.03.2012 - 00:10)
так как print это функция, а echo - оператор.

да нет, читаем мануал
http://php.net/manual/ru/function.print.php
Цитата
print() не является "настоящей" функцией (это конструкция языка), поэтому заключать аргументы в скобки необязательно.

Цитата
Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций

честно говоря никогда не пользую pint, не понимаю зачем она вообще нужна, если есть echo. Ну возвращает она единицу, как функция, а толку? Для чего это может пригодится? Бесполезная фича.

Спустя 6 минут, 54 секунды (5.03.2012 - 01:49) Winston написал(а):
Цитата (killer8080 @ 5.03.2012 - 00:42)
Ну возвращает она единицу, как функция, а толку? Для чего это может пригодится? Бесполезная фича.

Ну типа для таких понтов http://phpforum.su/index.php?showtopic=0&v...dpost&p=1646181 biggrin.gif

Спустя 16 минут, 12 секунд (5.03.2012 - 02:05) killer8080 написал(а):
Цитата (Winston @ 5.03.2012 - 00:49)
Ну типа для таких понтов http://phpforum.su/index.php?showtopic=0&v...dpost&p=1646181

Вот, вот бессмысленная вещь rolleyes.gif

Спустя 11 часов, 19 минут, 51 секунда (5.03.2012 - 13:25) inpost написал(а):
Invis1ble
Спасибо за хорошую ссылочку! А то я её уже давно потерял smile.gif

Спустя 18 часов, 19 минут, 33 секунды (6.03.2012 - 07:44) Commander Keen написал(а):
Цитата
Commander Keen
До кучи - http://phpforum.su/index.php?showtopic=38631 

Да, действительно полезный пост. Нуу, что-то прояснилось, хоть и не всё. Кстати, в книге тестируют на локалхосте. На чистом Apache. Не на девнере.
Кстати, у кого есть PHPEd, в нём есть профилировщик, можно сравнить его результы с микротаймом. Кому не лень?

Спустя 4 часа, 24 минуты, 29 секунд (6.03.2012 - 12:09) inpost написал(а):
Commander Keen
Я только не помню, всё ли я там описал, но print_f будет быстрее того же echo, если использовать конкатенацию строк с пробельным стилем: 'text' . $var . 'text'; - так. Если без такого стиля, то echo самый быстрый. Проводил тесты на 5 разных живых серверах. Локалхост в свою очередь на денвере всегда давал победу только echo.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.