Что не так с популярными статьями, рассказывающими что foo быстрее чем bar?

Фанат

oncle terrible
Команда форума
Для тех, кто как и я, не читает Хабр: https://habr.com/post/419743/

Я, конечно, уверен в своей правоте, но не на 105%.

Окрамиус меня в игнор поставил, когда я пытался ему на конкретные недостатки в обсуждаемой статье показать. Заявил, что ему в Доктрине все эти оптимизации очень помогают.
Ну и опять же неймспейснутые вызовы функций, которые в комментариях упомянули.

Поэтому хочу попросить помощи клуба. Были ли в вашей практике микрооптимизации, которые реально помогли?
 

ksnk

прохожий
Вообще-то я теперь всегда в коде использую одинарные кавычки :) Не из оптимизации, а чтобы избежать ненужных side-эффектов, если случайно пару долларов в строке забуду... Хотя это иногда мешает, когда приходится сочинять sql-запросы для постгресса
 

ksnk

прохожий
Из мира микрооптимизаций приходит в голову разве что yiilite.php, когда весь код ядра Yii1 сначала цивильно-кошерно раскидан на 100500 мелких файлов, но для "любителей" оставлено оно - ядро в одном файле на 10к строк...
 

Фанат

oncle terrible
Команда форума
Ага, с неймспейснутыми функциями разобрались.
Как всегда, прирост считается для функций, не делающих ничего.
Вычёркиваем!
 

С.

Продвинутый новичок
Я понимаю, что великиe архитекторы не генерят HTML в коде (хотя именно для этого PHP и был изначально создан). Но меня интересует вопрос, как гуру писали перед тем, как стали гуру?
PHP:
$html =  "<a href=\"$url\"";
// or
$html =  '<a href="'.$url.'"';
А считаю, что спорить о скорости компиляции глупо. А вот вопрос удобочитаемости меня не отпускает до сих пор. И почему переменную можно, а константу нельзя?

Я даже считаю, что фигурные скобки должны бы быть обязательными:
{$var} {CONST} {"} {'} {{} {}}

Соответственно разница между кавычками должна быть утрачена.
 
Последнее редактирование:

Vladson

Сильнобухер
Для РНР-шника на хабре интересного была от силы одна интересная статья, за всю историю существования хабра. И то потому что не о РНР а о преждевременной оптимизации в целом. Не вижу смысла вообще туда ходить. (Я конечно и сам почитываю более чем регулярно, но не ради РНР а ради других статей, по железу итд)

перед тем, как стали гуру
Второй вариант на мой взгляд приятнее, только точки пробелами ещё окружить можно, но бывало и вовсе sprintf()
 

ksnk

прохожий
@С., фигурные скобки - довольно частый элемент в строковых конструкциях, так что нет, не надо. :) Ну а выводить константы в строке, для истинных ценителей, вполне возможно и сейчас...
PHP:
const XXX='YYY';
$echo=function($x){return $x;};

echo "{$echo(XXX)}".PHP_EOL;
echo "{$echo(1+2+3)}".PHP_EOL;
Ну и для поддержания разговора могу послать в http://php.net/manual/ru/language.types.string.php#120160 (php.net (Куда-же еще?) Там некто John на полном серьезе и с цифрами рассуждает именно по теме микрооптимизаций )))
So the "highest code performance" style rules are:

1. Always use double-quoted strings for concatenation.

2. Put your variables in "This is a {$variable} notation", because it's the fastest method which still allows complex expansions like "This {$var['foo']} is {$obj->awesome()}!". You cannot do that with the "${var}" style.
...
 

С.

Продвинутый новичок
@С., фигурные скобки - довольно частый элемент в строковых конструкциях, так что нет, не надо. :)
Это откровение для меня. Наивно полагал, что двойная кавычка почаще там будет встречаться.
PHP:
$html =  "<a href='$url'";
Тогда я:
PHP:
$html =  "<a href=$url";
 

С.

Продвинутый новичок
Когда PHP появился введение двух видов кавычек были объяснимыми, но до сих пор дебаты темы, актуальные для прошлого века, все еще продолжаются. Язык уже очень сильно развился, а какие-то простые и заскорузлые вещи все тянутся. Ведь есть уже опыт изменения поведение в новой версии с возможностью включать обратную поддержку.

Почему бы в новой версии не сделать так:
PHP:
$html = '<a href="{SITE}/{$url}">{$link}</a>';
//$html = 'variable{'}s name $var';
//или $html = 'variable{'}s name {$}var';
$html = "<a href={"}{SITE}/{$url}{"}>{$link}</a>";
$html = 'Математическое множество: {{} {$list} {}}';
 

С.

Продвинутый новичок
А если в $url пробел…
Но это же риторический пример. Пробел не предусматривался.
Потому что лексер сложнее писать.
Ага для $, {},\ написали и не рассыпались, а тут такая неподъемная задача? Даже ни одного нового управляющего символа не вводится.

Я понимаю, что традиция обратного слеша древняя и PHP много взял от «С», а «С» взял от АСМ. И что?

"\" и \"" выглядит далеко от хорошей читабельности. Альтаернатива есть не просит.
 
Последнее редактирование:

ksnk

прохожий
Самое главное и окончательноубедительное про
PHP:
$html =  "<a href=$url";
- "это не пройдет валидацию"
 

fixxxer

К.О.
Партнер клуба
Почему бы в новой версии не сделать так
Потому что разработчики PHP занимаются (особенно в последние несколько лет) действительно нужными и полезными вещами, а не всякой ерундой. Впрочем, те, кто считает, что нечто подобное нужно, всегда могут написать RFC.

И вообще, блин, опять все к кавычкам свели, речь идет вовсе не о них.

По теме: O(1) is still slow for sufficiently large values of 1 :)
 
Сверху