В моих глазах образовались знаки вопроса, после того, как в книге М.Кузнецова и И.Симдянова - "PHP5" (стр. 359) я прочитал, что у них после профилировки одноимённых инструкций разница составила всего в 0.000002 причём в пользу print!.
Используют они следующую функцию для профилировки:
function getTime()
{
$part_time = explode(' ', microtime() );
$real_time = $part_time[1] . substr($part_time[0], 1);
return $real_time;
}
Разницу находят с помощью bcsub.
"Да ну на фиг" - подумал я и проверил собственноручно. И что вы думаете? Вот мои результаты (c 'Hello, World!'):
Разница аж 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.
Вопрос всё ещё открыт
Кто ещё попробует с толком объяснить, почему у них обе конструкции выполняются почти одинаково по времени? Почему выигрывает 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.
Цитата |
Что они там выдумали... ну их проблема, не все идеальны, принт полу-функция, эхо - нет, это оператор, поэтому и быстрее. |
Да, но у них с точностью до наоборот получилось
Вот что странно.
Спустя 1 час, 30 минут, 53 секунды (4.03.2012 - 20:35) killer8080 написал(а):
Commander Keenвыложи исходник ихнего теста, тогда и будем думать.
Спустя 3 минуты, 37 секунд (4.03.2012 - 20:38) sergeiss написал(а):
Для получения максимально правильного результата, такие операторы надо загнать в цикл, который выполнить 100тыщ - 1млн раз и разделить на общее количество циклов. Тогда измерения будут более достоверные. Потому что на каждой итерации по-любому будут отличия во времени выполнения.
Спустя 2 часа, 18 секунд (4.03.2012 - 22:39) inpost написал(а):
Commander KeenОшиблись, книга же в чём плоха, её штампанули и всё... потом каждый второй смотрим им в глаза и говорит: "вот ошибка", а они исправить не могут
Спустя 2 часа, 25 минут, 28 секунд (5.03.2012 - 01:04) Invis1ble написал(а):
Спустя 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 - оператор. |
Цитата |
print() не является "настоящей" функцией (это конструкция языка), поэтому заключать аргументы в скобки необязательно. |
Цитата |
Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций |
честно говоря никогда не пользую pint, не понимаю зачем она вообще нужна, если есть echo. Ну возвращает она единицу, как функция, а толку? Для чего это может пригодится? Бесполезная фича.
Спустя 6 минут, 54 секунды (5.03.2012 - 01:49) Winston написал(а):
Цитата (killer8080 @ 5.03.2012 - 00:42) |
Ну возвращает она единицу, как функция, а толку? Для чего это может пригодится? Бесполезная фича.
|
Спустя 16 минут, 12 секунд (5.03.2012 - 02:05) killer8080 написал(а):
Вот, вот бессмысленная вещь
Спустя 11 часов, 19 минут, 51 секунда (5.03.2012 - 13:25) inpost написал(а):
Invis1bleСпасибо за хорошую ссылочку! А то я её уже давно потерял
Спустя 18 часов, 19 минут, 33 секунды (6.03.2012 - 07:44) Commander Keen написал(а):
Да, действительно полезный пост. Нуу, что-то прояснилось, хоть и не всё. Кстати, в книге тестируют на локалхосте. На чистом Apache. Не на девнере.
Кстати, у кого есть PHPEd, в нём есть профилировщик, можно сравнить его результы с микротаймом. Кому не лень?
Спустя 4 часа, 24 минуты, 29 секунд (6.03.2012 - 12:09) inpost написал(а):
Commander Keen
Я только не помню, всё ли я там описал, но print_f будет быстрее того же echo, если использовать конкатенацию строк с пробельным стилем: 'text' . $var . 'text'; - так. Если без такого стиля, то echo самый быстрый. Проводил тесты на 5 разных живых серверах. Локалхост в свою очередь на денвере всегда давал победу только echo.