|
|
|
| Я только начал изучать php (да и вообще я начинающий), поэтому просьба не судить строго.
Я видел много раз коды вроде этих:
<?php
function func_name() {
$x = 7;
/*
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
*/
// Тут еще иногда оператор ? применяют
if ($x < 10) {
return true;
}
else
{
return false;
}
}
echo func_name();
?>
|
<?php
$x = 7;
if ($x != 0) echo "Хорошо!"
?>
|
Вопрос таков. Можно ли сделать, например, так:
<?php
function func_name() {
$x = 7;
/*
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
* Чего-то
*/
return $x < 10;
}
echo func_name();
?>
|
<?php
$x = 7;
if ($x) echo "Хорошо!"
?>
|
ИМХО, гораздо нагляднее, проще, нежели в двух первых кодах. Но, я не часто вижу подобные реализации. Почему так не делают? Быть может, это какая-то "изюминка" интерпретируемых языков?
Мне очень важен ответ, спасибо за внимание. | |
|
|
|
|
|
|
|
для: IceGhost
(03.01.2010 в 16:08)
| | У каждого свой стиль, если вам кажется такой подход более наглядным - можете смело его использовать. | |
|
|
|
|
|
|
|
для: cheops
(03.01.2010 в 17:42)
| | А какой вариант работает быстрее? Хоть на пикосекунду. :) | |
|
|
|
|
|
|
|
для: IceGhost
(03.01.2010 в 17:46)
| | Чем больше кода - тем медленнее, хоть на наносекунду.
Но думать надо не только о наносекундах, но и читабельности.
«Код нужно писать, так как будто его будет сопроваждать психически-неуравновешанный маньяк, который знает где вы живёте» (с) | |
|
|
|
|
|
|
|
для: neadekvat
(03.01.2010 в 17:49)
| | Благодарю всех за ответы! | |
|
|
|
|
|
|
|
для: neadekvat
(03.01.2010 в 17:49)
| | Если при улучшении читабельности пострадает оптимизация, читабельность фтопку без вопросов. | |
|
|
|
|
|
|
|
для: ~AquaZ~
(03.01.2010 в 19:44)
| | Зависит от того, насколько быстрее будет генерироваться код.
А уж если при элементарных телодвижениях скрипты тормозят и из-за этого к тому же все мешают в кучу, делают из кода кашу, то вообще стоит задуматься о том, чтобы пойти выпрямлять руки между дверей. | |
|
|
|
|
|
|
|
для: neadekvat
(03.01.2010 в 20:11)
| | >Зависит от того, насколько быстрее будет генерироваться код.
>А уж если при элементарных телодвижениях скрипты тормозят и из-за этого к тому же все мешают в кучу, делают из кода кашу, то вообще стоит задуматься о том, чтобы пойти выпрямлять руки между дверей.
Лучше под книжный шкаф (так когда-то советовали с ногами делать, чтобы в армию не взяли). | |
|
|
|
|
|
|
|
для: ~AquaZ~
(03.01.2010 в 19:44)
| | >Если при улучшении читабельности пострадает оптимизация, читабельность фтопку без
>вопросов.
Оптимизация проводится после разработки кода, существует даже термин "преждевременная оптимизация", которая со времен Кнута считается одним из самых страшных зол программирования. Чтобы что-то оптимизировать сначала нужно получить код. Т.е. последовательность должна быть в таком порядке: проектирование, разработка, оптимизация. Применение оптимизации ранее в лучшем случае потеря времени. | |
|
|
|
|
|
|
|
для: IceGhost
(03.01.2010 в 17:46)
| | Скорее всего все пикосекнуды съедает оптимизация - вероятно уже на уровне интерпретатора эти ситуации обрабатывает один и тот же код. | |
|
|
|
|
|
|
|
для: cheops
(03.01.2010 в 18:01)
| | И еще вопрос.
В phpbb3 очень любят делать подобным образом:
<?php
echo "<table>";
echo "<tr>";
echo "<td>";
echo " ";
echo "</td>";
echo "</tr>";
echo "</table>";
?>
|
Что думаете по этому поводу?
Сильно ли отличается по скорости интерпретирования такая реализация от одного echo:
<?php
echo "<table><tr><td>&bnsp;</td></tr></table>";
?>
|
| |
|
|
|
|
|
|
|
для: IceGhost
(03.01.2010 в 22:06)
| | Да, там огромная разница в миллионные секунды.
А про первое - может, им так читать удобнее? Как-нибудь так было бы логичнее:
<?php
echo "<table>\n";
echo " <tr>\n";
echo " <td>\n";
echo " \n";
echo " </td>\n";
echo " </tr>\n";
echo "</table>\n";
|
| |
|
|
|
|
|
|
|
для: neadekvat
(03.01.2010 в 22:14)
| | Вот, нашел их код:
<?php
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
echo '<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">';
echo '<head>';
echo '<meta http-equiv="content-type" content="text/html; charset=utf-8" />';
echo '<title>' . $lang['INST_ERR_FATAL'] . '</title>';
echo '<link href="../adm/style/admin.css" rel="stylesheet" type="text/css" media="screen" />';
echo '</head>';
echo '<body id="errorpage">';
echo '<div id="wrap">';
echo ' <div id="page-header">';
echo ' </div>';
echo ' <div id="page-body">';
echo ' <div id="acp">';
echo ' <div class="panel">';
echo ' <span class="corners-top"><span></span></span>';
echo ' <div id="content">';
echo ' <h1>' . $lang['INST_ERR_FATAL'] . '</h1>';
echo ' <p>' . $lang['INST_ERR_FATAL'] . "</p>\n";
echo ' <p>' . basename($file) . ' [ ' . $line . " ]</p>\n";
echo ' <p><b>' . $error . "</b></p>\n";
echo ' </div>';
echo ' <span class="corners-bottom"><span></span></span>';
echo ' </div>';
echo ' </div>';
echo ' </div>';
echo ' <div id="page-footer">';
echo ' Powered by phpBB © 2000, 2002, 2005, 2007 <a href="http://www.phpbb.com/">phpBB Group</a>';
echo ' </div>';
echo '</div>';
echo '</body>';
echo '</html>';
?>
|
А про первое - может, им так читать удобнее?
|
Ну, на мой взгляд читать действительно удобнее.
Сейчас попробую провести тест на скорострельность. :) | |
|
|
|
|
|
|
|
для: IceGhost
(03.01.2010 в 22:51)
| | Тест показал, что первый вариант существенно медленнее. К сожалению. | |
|
|
|
|
|
|
|
для: IceGhost
(03.01.2010 в 23:28)
| | Какие именно варианты сравнивались в тесте? | |
|
|
|
|
|
|
|
для: neadekvat
(03.01.2010 в 23:29)
| |
<?php
echo "first";
echo "<br>";
echo "second";
echo "<br>";
?>
|
и
<?php
echo "first<br>second<br>";
?>
|
| |
|
|
|
|
|
|
|
для: IceGhost
(03.01.2010 в 23:35)
| | В первом случаи у меня в серднем получилось 0.000069 секунды
Во втором 0.000068 секунды
Результаты и там, и там калебались от 6,7 до 7,1 * 10^-5
Ну и стоит ли ради одной миллионной (как я уже говорил) сминать код тогда, когда лучше его разложить? | |
|
|
|
|
|
|
|
для: neadekvat
(03.01.2010 в 23:41)
| | Покажите код, пожалуйста.
P.S. Я думаю, код сминать не стоит. Тем более, мне так понравился первый вариант... :) | |
|
|
|
|
|
|
|
для: IceGhost
(03.01.2010 в 23:47)
| |
<?php
$time_start = microtime(true);
// некий код
printf("Генерация заняла %f секунды", microtime(true) - $time_start);
?>
|
| |
|
|
|
|
|
|
|
для: neadekvat
(03.01.2010 в 23:56)
| | В общем, я так же тестировал. Только все echo выполнялись в цикле с количеством итераций 1000. | |
|
|
|
|
|
|
|
для: IceGhost
(03.01.2010 в 23:59)
| | Прогнал в цикле. Первый вариант - 0.001460 секунды (при повторных 0.001516, 0.001458, 0.001439, 0.001437), второй - 0.000976 секунды (при следующей прогонке 0.001388, 0.000950, 0.001013, 0.000954). Кое-какой прирост скорости есть.
Но стоит ли оно того? Все-таки всегда надо помнить о том, что на этот код наверняка придется смотреть не последний раз, и не только одному прогеру, который его пишет. Не стоит фанатеть этими "оптимизацями" - гонка фиг знает за чем в таких масштабах. | |
|
|
|
|
|
|
|
для: neadekvat
(04.01.2010 в 00:08)
| | Впрочем, так оно и есть. Оптимизировать надо то, что занимает много времени, а не то, что выполняется мгновенно. Святая истина! :) | |
|
|
|
|
|
|
|
для: neadekvat
(04.01.2010 в 00:08)
| | Вот такой вариант попробуйте измерить.
<?php
for($i = 0; $i < 1000; $i++)
{
?>
<table>
<tr>
<td>
</td>
</tr>
</table>
<?php
}
|
Вообще если можно не гонять PHP для генерации вывода, лучше этого не делать. | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2010 в 04:03)
| | 0.445122, 0.490349, 0.463494, 0.382297
Тут мне даже добавить нечего. | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2010 в 04:03)
| | такой вариант порождает другой код, а значит сравнивать их неправомочно. | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2010 в 12:31)
| | А тут сравнивались не коды, а варианты генерации. На входе и выходе одно и тоже (у вариантов), так почему бы не сравнить?
Или Вы цикл имеете ввиду? | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2010 в 12:52)
| | На всякий случай уточню. Сравнивать нужно такие варианты:
1.
<?php
for($i = 0; $i < 1000; $i++)
{
echo "<table>\n";
echo " <tr>\n";
echo " <td>\n";
echo " \n";
echo " </td>\n";
echo " </tr>\n";
echo "</table>\n";
}
|
2.
<?php
for($i = 0; $i < 1000; $i++)
{
echo "<table>
<tr>
<td>
</td>
</tr>
</table>\n";
}
|
3.
<?php
for($i = 0; $i < 1000; $i++)
{
?>
<table>
<tr>
<td>
</td>
</tr>
</table>
<?php
}
|
| |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2010 в 12:52)
| | На выходе разное. Разный поток байт.
В частности, разное число пробелов и символов CR LF
Кстати, вариантом в базовом вопросе (03.01.2010 в 22:06) был код без пробелов. | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2010 в 13:45)
| | Ну я вообще то не на базовый вопрос предложил провести сравнение. А на тот, который был предложен neadekvat в (03.01.2010 в 22:06) как более логичный.
Что касается пробелов - их столько же, а CR и LF - так в последнем их даже больше. Хотя он все равно самый быстрый. По этому тест может и не точен, но тут не столько точность важна, сколько сам факт разной скорости генерации. По этому тест вполне корректен.) | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2010 в 14:00)
| | Логика тут применима слабо.
Если мы рассматриваем промежуточный код как исходный, т.е. такой, в котором будет разбираться человек, то логично.
Если же мы как исходный рассматриваем код на php, то нелогично. | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2010 в 14:25)
| | Имелась ввиду не логика ответа, а характеристика кода.))
Вот цитата:
neadekvat (03.01.2010 в 22:14)
А про первое - может, им так читать удобнее? Как-нибудь так было бы логичнее:
<?php
echo "<table>\n";
echo " <tr>\n";
echo " <td>\n";
echo " \n";
echo " </td>\n";
echo " </tr>\n";
echo "</table>\n";
|
Все таки более логично было бы воспользоваться вариантом, который предложил я. И быстрее. | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2010 в 14:30)
| | Если мы опираемся на характеристику кода - ответ жесткий: сравнение неправомочно, т.к. выходной код не совпадает. | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2010 в 14:42)
| | Пусть неправомочно, неточно, но корректно и вполне наглядно. Если бы результат был бы не в пользу перехода разбора из php в гипертекст, тогда да. А так, даже с несколькими тысячами лишних символов вариант выигрывает по скорости, а значит более логичен.
И уж тем более нескольким последовательным вызовам конструкции echo. | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2010 в 14:51)
| | Не забывайте, что скорость совокупного процесса определяется не только генерацией кода, но еще и пропускной способностью канала.
А еще есть требования к ресурсам памяти на клиентской стороне, тоже нарушенные таким подходом.
Автор, который написал исходный вариант, очевидно, ставил некоторую цель.
Вариант с пробелами в сгенерированном коде эту цель низлагает.
Кстати есть еще один вариант.
echo ''
.'1'
.'2'
.'3'
.'4'
;
|
| |
|
|
|
|
|
|
|
для: Trianon
(04.01.2010 в 14:57)
| | Вообще то я не знаю, чем руководствовался автор данного кода, специально он игнорировал пробелы или это по недосмотру (сам стиль заставляет задуматься об этом). Но вопрос задал не автор кода, и вопрос недвузначный:
IceGhost (03.01.2010 в 22:06)
В phpbb3 очень любят делать подобным образом:
<?php
echo "<table>";
echo "<tr>";
echo "<td>";
echo " ";
echo "</td>";
echo "</tr>";
echo "</table>";
?>
|
Что думаете по этому поводу?
Сильно ли отличается по скорости интерпретирования такая реализация от одного echo:
<?php
echo "<table><tr><td>&bnsp;</td></tr></table>";
?>
|
Я просто напомнил, что в данном случае корректнее вообще обойтись без echo. | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2010 в 15:09)
| | >Вообще то я не знаю, чем руководствовался автор данного кода, специально он игнорировал пробелы или это по недосмотру (сам стиль заставляет задуматься об этом).
Автор не игнорировал пробелы.
Автор наоборот применил их для формирования отступов в исходном тексте программы.
Сделал он это намеренно, руководствуясь соглашениями о стиле, вполне понятном.
В коде автора нет ни малейшего люфта недосмотра или неаккуратности.
>Но вопрос задал не автор кода,
Конечно.
>и вопрос недвузначный:
совршенно однозначный.
>
>IceGhost (03.01.2010 в 22:06)
>В phpbb3 очень любят делать подобным образом:
>
<?php
> echo "<table>";
> echo "<tr>";
> echo "<td>";
> echo " ";
> echo "</td>";
> echo "</tr>";
> echo "</table>";
>?>
|
>Что думаете по этому поводу?
>Сильно ли отличается по скорости интерпретирования такая реализация от одного echo:
>
<?php
> echo "<table><tr><td>&bnsp;</td></tr></table>";
>?>
|
>
>Я просто напомнил, что в данном случае корректнее вообще обойтись без echo.
Это верно. Но тогда сперва придется отмести, как несущественный, вопрос о стилевом оформлении исходного текста.
В том-то и суть, что автор базового примера (вернее стилевого паттерна), этот вопрос полагал в высшей степени важным, считая скорость интерпретации вторичной (если не более низкого порядка) проблемой. А IceGhost спросил - а как оно по скорости?
Ответ: А никак. К нему и требований-то таких не ставят.
Вообще без echo придется помещать голый выходной код в файл исходного текста.
Исходный текст перестанет быть не то что читабельным, а таковым (исходным) вообще. | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2010 в 15:28)
| | >Это верно. Но тогда сперва придется отмести, как несущественный, вопрос о стилевом оформлении исходного текста.
А вот и нет. Вопрос был задан именно в ключе выбора стиля, а не сравнения существующих. Было бы странно предположить, что он уже имеет устоявшийся собственный стиль и задает подобного рода вопрос. И интересуют его разные стороны. Как читабельность, так и скорость интерпретации.
В таком разрезе я считаю совсем не лишним показать еще один вариант.
>В том-то и суть, что автор базового примера (вернее стилевого паттерна), этот вопрос полагал в высшей степени важным, считая скорость интерпретации вторичной (если не более низкого порядка) проблемой.
Если нет разделения бизнесс-логики и представления, то о какой исходности идет речь? Это просто код и границы стилей и читабельности тут весьма прозрачны.
Особенно в примере (03.01.2010 в 22:51)
Если о стилизации PHP говорить можно, то результирующий код будет представвлен полной кашей.
А если это сделано в целях экономии трафика клиента, то зачем там пробелы? Померла так померла, все равно это не разметка. И echo вызывать стопицот раз - это читабельно? Тогда уж и впрямь интереснее с конкатенацией.
>Вообще без echo придется помещать голый выходной код в файл исходного текста.
Исходный текст перестанет быть не то что читабельным, а таковым (исходным) вообще.
Это тоже весьма субъективно и спорно. Покажите пожалуйста стандарт, который регламентирует "исходный" код. И уж коли на то пошло, чем это
<?php
echo "<table><tr><td>&bnsp;</td></tr></table>";
?>
|
читабельнее этого:
?>
<table><tr><td>&bnsp;</td></tr></table>
<?php
| ? Тем что в первом варианте html красный, а во втором - черный?
Я бы мог понять, если бы текст вывода формировался гдето в функциях и выдавался бы не echo а return... Но тут то простое, прямое формирование вывода. Так к чему эти танцы с бубном, если можно к разметке применить стиль разметки, а к php стиль php?
Тогда и на это:
>А IceGhost спросил - а как оно по скорости?
>Ответ: А никак. К нему и требований-то таких не ставят.
можно спокойно ответить:
"Плохо. echo, будучи несколько раз последовательно вызванным, будет тормозить процесс."
Справедливости ради нужно отметить, что не особо. | |
|
|
|
|
|
|
|
для: Николай2357
(04.01.2010 в 16:09)
| | >Если нет разделения бизнесс-логики и представления, то о какой исходности идет речь?
Исходник - это то, что пишет, читает и правит человек. Вот о такой.
>И уж коли на то пошло, чем это читабельнее этого:
Практически ничем. Кроме разве тем, что данные отделены лексически от кода.
>Тем что в первом варианте html красный, а во втором - черный?
а подсветка это показывает.
>можно спокойно ответить:
>"Плохо. echo, будучи несколько раз последовательно вызванным, будет тормозить процесс."
И тут уже придется добавить - если вызывать echo 1 раз - станет отвратительно.
Потому как разработка и сопровождение станут процесс останавливать.
>Справедливости ради нужно отметить, что не особо.
Вот и стоит дли игра свеч? | |
|
|
|
|
|
|
|
для: Trianon
(04.01.2010 в 16:58)
| | >Исходник - это то, что пишет, читает и правит человек. Вот о такой.
А разве не он же пишет HTML? Тот же исходник.
Что касается цвета - зависит от редактора. Нормальный редактор подсвечивает не только PHP, но и HTML, если тот представлен в виде гипертекста, а не в виде исходного текста для конструкции echo. Так что по хорошему вариант с переходами разбора читабельнее, чем куча echo. А если это простой редактор, без подсветки, то никакой разницы - нет там красного, все черное.
Так что игра стоит свеч. Причин несколько.
1. Читабельность исходного кода в редакторе с подсветкой html.
2. Простая стилизация и как следствие - читабельность результирующего кода в браузере
3. Скорость генерации.
Единственно, где этот вариант явно проиграет, это при экономии трафика и выдаче html одной строкой. Что актуально только на оооочень больших нагрузках. Но опять же при больших нагрузках стоит задуматься и о ресурсах сервера, а значит и неоптимальности варианта с последовательным вызовом echo.
>Потому как разработка и сопровождение станут процесс останавливать.
Ну смотря как это все организовать. Ничего пока нативные шаблоны не остановили. | |
|
|
|
|
|
|
|
для: IceGhost
(03.01.2010 в 22:06)
| | > В phpbb3 очень любят делать подобным образом:
Не любят они. Просто в шаблон пихать было нельзя — этот код генерируется в функции обработки ошибок. А сама ошибка может порождаться шаблонизатором.
[поправлено модератором] | |
|
|
|