Станислав Малкин
1410 повідомлень
#15 років тому
Кстати, Lisio, вы свой код не обфусцируете? А комментарии удаляете?

Ведь это же существенно даст прирост производительности! Аж 0.0001!

Раз уж вы пишите с ', а не " везде, то почему бы и код не обфусцировать. Там же целый комплекс процедур - удаляются пробелы, комментарии и прочее. Представляете - интерпретатору-то как лучше станет
Андрей К.
1172 повідомлення
#15 років тому
Цитата ("ArtLab"):
Команда всегда работает с одним стилем программирования, если кто работает не по стандарту кодирования команды - ему обычно бьют по рукам и мягко намекают, что есть стандарт и его надо придерживаться.

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

Цитата ("ArtLab"):
Вопрос к вам был именно в свете " и '. Эта, конкретно эта оптимизация и все ей подобные - бесполезная трата времени.

Да когда вы уйметесь то с этими кавычками, ей богу. Я не трачу время на перевод " в '. Я СРАЗУ ставлю те, которые нужны. СРАЗУ!!! Это не требует времени, совершенно. Это даже требует нажатия одной клавиши вместо двух! И ровно также со всем остальным. Я пишу меньше кода сразу, изначально. Фух, надеюсь теперь-то тема с кавычками закрыта?

Цитата ("ArtLab"):
Иначе это просто сотрясения воздуха.

Ну так не трясите воздух, ему страшно. Что-то я не видел и ваших примеров.

Цитата ("ArtLab"):
Откуда вы знаете? Ваши цифры высосаны из пальца.

Ваши взяты из ситуации с кавычками, которые вам покоя не дают вторую страницу :P Если бы я взял цифры из примеров работы скриптов "до" и "после" оптимизации чужого кода, которой занимался ранее, то можно было бы смело умножать на 10-100.

Цитата ("ArtLab"):
чем переписывать код с " на '

Без комментариев.

Цитата ("ArtLab"):
докупить юнит в кластер - совсем копейки стоит

Без комментариев.

Цитата ("ArtLab"):
Это пример быдлокодерства, а не отсутствие привычки экономии.

Это конечная стадия отсутствия привычки экономии. Предложите заказчикам вычесть пару юнитов из вашей зарплаты.

Цитата ("ArtLab"):
Я утверждаю, что оптимальнее искать узкие места там, где они традиционно есть - база, коннект, скорость отдачи с сервера и количество обработанных реквестов в секунду, количество потребляемой памяти, кеширование и т.д.

А я про то, что не надо создавать столько узких мест, чтобы потом искать самое узкое из них. Смотрите на мир шире, и к вам потянутся байты.

P.S. Мы говорим о разных вещах. Я утверждаю, что оптимальный код пишется сразу, вы говорите, что пишется быдлокод, а потом оптимизируется самый тормозной модуль. Мы кодеры из разных миров.
Артем Л.
11416 повідомлень
#15 років тому
Lisio...
Цитата ("Lisio"):
Цитата (ArtLab):докупить юнит в кластер - совсем копейки стоит
Без комментариев.

Не выдирайте из контекста фразы...
Цитата ("ArtLab"):
Когда проект переходит на уровень миллионных посещений в день - докупить юнит в кластер - совсем копейки стоит

Это на самом деле так...

PS. Жду продолжения...
Андрей К.
1172 повідомлення
#15 років тому
Hungry_Hunter, весь контекст не имеет смысла, если изначально писать нормально. Я не спорю с тем, что это действительно сущие копейки. Я спорю о подходе к хорошему коду. Просто при многомиллионном проекте потребуется на парочку юнитов меньше вообще без затрат времени.

Цитата ("ArtLab"):
Раз уж вы пишите с ', а не " везде, то почему бы и код не обфусцировать. Там же целый комплекс процедур - удаляются пробелы, комментарии и прочее. Представляете - интерпретатору-то как лучше станет

Давайте останемся в рамках разговора о быстром и красивом кодинге. Обфускация делает код нечитабельным во-первых, заставляет при каждом изменении кода проводить ее заново и успешно замещается кэшированием во-вторых. Ее чаще всего применяют для сжатия .js файлов, дабы повысить скорость загрузки контента пользователем, на благо самого пользователя. А обфускация целенаправленно php-кода даже для меня является излишней крайностью.
Станислав Малкин
1410 повідомлень
#15 років тому
Вадим Т.
3240 повідомлень
#15 років тому
Цитата ("Lisio"):
Теперь моя очередь смеяться як конь Вы всей командой изучаете стандарты индийского программирования? Когда всеобъемлющая оптимизация нарушала стиль и стандарты?

Ну, так однозначно нельзя утверждать, стандарты-то разные бывают.

Например, в PHP программировании весьма распространен Zend Standard.
Если его строго придерживаться, то, например, придется перенести все глобальные функции в классы (хотя бы статиками), несмотря на то, что они будут вызываться немного медленнее (микро- или нано- секунды).
Пример:

Цитата:
Functions in the global scope (a.k.a "floating functions" are permitted but discouraged in most cases. Consider wrapping these functions in a static class.

Хоть это не жесткое требование стандарта, абсолютного запрета конечно нет, но все же весьма значимая рекомендация. По крайней мере CodeSniffer будет на это ругаться предупреждающими сообщениями.
Это я лишь пример привел, и это место в описании Zend стандарта не единственное, где стандарт в некоторых ситуациях навязывает не оптимальное с точки зрения компьютера решение, но более удобное для программистов (по мнению Zend, по крайней мере).

Я не призываю использовать Zend Standard фанатам оптимизации, можно например использовать не менее распространенный PEAR Standard, где нет таких ограничений.
Но все же, утверждать, что "всеобъемлющая оптимизация нарушает стиль и стандарты", все же можно в ряде случаев.

Я хотел бы поддержать ArtLab-а, действительно, когда объем проекта перерастает, скажем, человеко-год, и подключается довольно большая команда разработчиков, одни из которых со временем уходят (в том числе иногда оставляя говнокод, который потом разгребают другие), новые приходят, в течении разработки проекта... то тут волей-неволей придется навязывать какой-либо единый стандарт, единый подход к разработке, пусть даже в ущерб микрооптимизации в некоторых мелочах.
Станислав Малкин
1410 повідомлень
#15 років тому
Цитата ("Lisio"):
Давайте останемся в рамках разговора о быстром и красивом кодинге. Обфускация делает код нечитабельным во-первых, заставляет при каждом изменении кода проводить ее заново и успешно замещается кэшированием во-вторых. Ее чаще всего применяют для сжатия .js файлов, дабы повысить скорость загрузки контента пользователем, на благо самого пользователя. А обфускация целенаправленно php-кода даже для меня является излишней крайностью.

Хорошо. Комментарии вырезаете? Это ведь тоже микрооптимизация.

Как пишите код - скупо добавляя комментарии или покрывая его комментариями в стиле phpDocumentor + комментарии сверху для нужных блоков?

P.S. Не отвечайте никто, пожалуйста, пусть Lisio ответит.
Андрей К.
1172 повідомлення
#15 років тому
tvv, вы меня немного неверно интерпретируете. Я не навязываю использование очень хитроумных конструкций, которые дадут миллисекунды прироста при человеко-часах затрат. Отнюдь нет! Я лишь упорно отстаиваю ту, пусть и минимальную, оптимизацию, которая не требует на это времени в принципе. Ну пусть будет этот пример с кавычками. Он не требует времени от кодера вообще, но и сразу работает на копеечку шустрее. Я не говорю о том, чтобы брать весь чужой код и сразу его переделывать под свои собственные стандарты, но лишь утверждаю о бессмысленности отвержения изначально быстрого кода. Опять же, без затрат времени. Но меня почему-то пытаются убедить в том, что не бывает быстрого кода без потраченного времени.

Вернемся к паттернам, а то мои слова опять могут быть поняты неверно. О переписывани паттернов самостоятельно я говорю в случае установки кучи паттернов для каждого чиха. Кто-то хочет добавить маленькую фишечку в проект и тянет за собой кучу лишнего кода. Но я отнюдь не против использования тех паттернов, который используется на всю катушку и переписывание которых просто напросто является отдельным крупным проектом. К примеру лично я активно использую Smarty и не пытаюсь его переделывать. Но возьмем другой пример, о котором вы, tvv, в курсе. Это случай с рестайлингом файлового инпута. Единственный адекватный код, который мне посоветовали в топике замешан на загрузке, во-первых jQuery, во-вторых довеска в виде отдельного js-скрипта. А зачем мне 40кб лишнего мусора, когда надо только тысячную долю этого? Я разобрался в коде это скрипта-довеска, понял что jQuery там вообще не нужен как таковой, да и сам скрипт просто подменяет все инпуты на определенные конструкции в виде гипертекста и css. В итоге я сделал то же самое, но уже без jQuery, этого универсального скрипта и оставил буквально килобайт кода (а может и меньше, не считал). Вот именно о таком подходе я говорю. А если бы использовал jQuery, то 100тыс.посетителей*40кб=4Гб траффика.

Цитата ("ArtLab"):
Хорошо. Комментарии вырезаете? Это ведь тоже микрооптимизация.

Прочтите мои пояснения выше и не впадайте в крайность.

Цитата ("ArtLab"):
Как пишите код - скупо добавляя комментарии или покрывая его комментариями в стиле phpDocumentor + комментарии сверху для нужных блоков?

В среднем, по строке комментария на 10-30 строк кода, дающих общее пояснение, что делается внутри данного сегмента. Если достаточно сложный алгоритм, то количество комментариев увеличивается и плюс добавляются комментарии справа от кода.
Вадим Т.
3240 повідомлень
#15 років тому
Цитата ("Lisio"):
Я лишь упорно отстаиваю ту, пусть и минимальную, оптимизацию, которая не требует на это времени в принципе. Ну пусть будет этот пример с кавычками. Он не требует времени от кодера вообще, но и сразу работает на копеечку шустрее.

Я не спорю с примером с кавычками. Это другие спорят... Более того, я сам использую кавычки абсолютно аналогично как и Вы, причем параноидально, и со своими партнерами слегка воюю, чтобы они тоже всегда делали так же. Более того, тот же Zend Standard рекомендует использовать одинарные кавычки везде, кроме случаев. когда ружна интерполяция, или когда текст включает в себя одинарные кавычки:

Цитата ("Lisio"):
К примеру лично я активно использую Smarty и не пытаюсь его переделывать.

Немного не сочетается с Вашим стремлением к оптимальным решениям. Если посмотрите код смарти, и, особенно, на код, который генерирует смарти на выходе, то, уверен, будете в ужасе. Это очень тормозной шаблонный движок, я от него отказался где-то году в 2004, с тех пор отслеживал новые версии, изредка применял по прямому требованию клиентов, но положительных изменений в этом плане не вижу.
Но к паттернам программирования, которые обсуждаются в данной статье, это не имеет никакого отношения.

Цитата ("Lisio"):
Это случай с рестайлингом файлового инпута.

Кстати, Вы смогли это задачу решить на одних стилях, без использования JavaScript-а? Или, как я и утверждал (допускаю, что ошибочно, но шансы что я прав очень велики), Вы убедились что это невозможно, и все же используете JavaScript? Прошу прощения за офтопик, но тема мне интересна, так как как раз недавно решал эту же задачу для своего клиента.
Андрей К.
1172 повідомлення
#15 років тому
Цитата ("tvv"):
Если посмотрите код смарти, и, особенно, на код, который генерирует смарти на выходе, то, уверен, будете в ужасе. Это очень тормозной шаблонный движок, я от него отказался где-то году в 2004, с тех пор отслеживал новые версии, изредка применял по прямому требованию клиентов, но положительных изменений в этом плане не вижу.

Я все жду выхода финального релиза 3й версии. Может шустрее будет. И не откажусь от названий шаблонных движков пошустрее, может и поудобнее окажутся к тому же. Smarty совсем не камень преткновения для меня.

Цитата ("tvv"):
Кстати, Вы смогли это задачу решить на одних стилях, без использования JavaScript-а? Или, как я и утверждал, Вы убедились что это невозможно, и все же используете JavaScript?

Без него не удалось, он используется в одном только месте для установки marginLeft для картинки-заменителя. Под иксами и виндой полет нормальный, под леопардом еще не смотрел. По поводу убедился или нет, сейчас гляну тот топик. Я вроде говорил, что вы не дали вообще никакого ответа как реализовать, а только отделались оговоркой...

... Да, верно, тему js подняли в конце и я немного поторопился тогда, сказав, что без него все хорошо. Но вашей помощи в том топике не дождался. :P
Вадим Т.
3240 повідомлень
#15 років тому
Цитата ("Lisio"):
Я все жду выхода финального релиза 3й версии. Может шустрее будет. И не откажусь от названий шаблонных движков пошустрее, может и поудобнее окажутся к тому же. Smarty совсем не камень преткновения для меня.

Открытых опенсорсных решений, которые меня бы устроили, я не нашел. Я использую свой движок для шаблонов.
И вам тоже рекомендую написать свой, это максимум день работы. А если владеете Си, можете потратить еще пару дней, и большую часть логики перенесете в php extension.

Цитата ("Lisio"):
Без него не удалось, он используется в одном только месте для установки marginLeft для картинки-заменителя. Под иксами и виндой полет нормальный, под леопардом еще не смотрел. По поводу убедился или нет, сейчас гляну тот топик. Я вроде говорил, что вы не дали вообще никакого ответа как реализовать, а только отделались оговоркой.

Почему же, я дал ответ, и даже дал ссылку с описанием проблемы (при решении одними стилями) и подробным разбором задачи. Посмотрите пожалуйста на мое сообщение там от 26.03.2010 03:31.
Вадим Т.
3240 повідомлень
#15 років тому
Цитата ("Lisio"):
... Да, верно, тему js подняли в конце, я немного поторопился тогда, сказав, что без него все хорошо. Но вашей помощи в том топике не дождался.

Вы были так воинственно настроены, что отказывались мою помощь принимать.
И упорно утверждали, что я — не профессионал в этом вопросе, и не могу ответить на поставленный вопрос в принципе.
Также, утверждали, что все сделаете одними лишь стилями.
Вот я и умыл руки в той теме, как и тут с raznomir-ом. Какой смысл было время тратить на споры и оправдания...
Андрей К.
1172 повідомлення
#15 років тому
Потому и не получился хороший ответ, т.к. тот вариант на выходе не давал готового решения с нормальным отображением во всех основных браузерах (ну вы помните мой список) под виндой и иксами. Пришлось бы искать дальше. Но ответ Vitaflax'a уже решил все проблемы. В любом случае могу только поблагодарить за попытку помочь.

Цитата ("tvv"):
И упорно утверждали, что я — не профессионал в этом вопросе, и не могу ответить на поставленный вопрос в принципе.

Неа, не так, я писал что и вы и я (т.е. оба) не из той области немного, и стоит дать возможность ответить спецам по верстке. Да что там, вот эта фраза:

Цитата:
Он скорее определяется профессионализмом верстальщика, кого и прошу ответить на вопрос. Вы спец по кодингу, я спец по кодингу, поэтому оставим возможность ответить тем, кто в этом разбирается.

Про то, что не сможете ответить вроде не писал, но если задел - прошу прощения.
Евгений О.
2989 повідомлень
#15 років тому
Цитата ("ArtLab"):
Естественно, каждый программист из команды изначально должен понимать, что конструкции вида:
<?php
$names = array('me', 'you', 'bla-bla');
for ($i = 0; $i <= count($names); $i++) {
// do something
}

и им подобные не должны иметь места в коде.

Я наверное не каждый . Почему такого не должно быть? Или я чего-то пропустил?
Алексей С.
115 повідомлень
#15 років тому
$names = array('me', 'you', 'bla-bla');
$count = count($names);

for ($i = 0; $i <= $count; $i++)
{
}


Иначе функция count будет вызываться каждый раз... а ещё лучше вместо неё использовать sizeof
Андрей К.
1172 повідомлення
#15 років тому
На самом деле там надо использовать foreach.

Цитата ("trueW3C"):
$names = array('me', 'you', 'bla-bla');
$count = count($names);

for ($i = 0; $i <= $count; $i++)
{
}

А тут еще и выдаст сообщение об отсутствии в массиве элемента с таким индексом, когда $i станет равным $count;
Евгений О.
2989 повідомлень
#15 років тому
Ребяты! Логика у вас отличная, но учите матчасть .
<?php
$arr = array();
for ($i = 1; $i <= 100000; $i++) $arr = $i;

$t1 = microtime();
$n = 0;
for ($i = 0; $i < count($arr); $i++) {
$n++;
}
echo 'count()<br />';
echo 'n='.$n.'<br />';
echo 't='.(microtime() - $t1).'<br />';

$t1 = microtime();
$n = 0;
$c = count($arr);
for ($i = 0; $i < $c; $i++) {
$n++;
}
echo 'c=count()<br />';
echo 'n='.$n.'<br />';
echo 't='.(microtime() - $t1).'<br />';

$t1 = microtime();
$n = 0;
foreach ($arr as $k => $v) {
$n++;
}
echo 'foreach<br />';
echo 'n='.$n.'<br />';
echo 't='.(microtime() - $t1).'<br />';
?>

А вот здесь можно посмотреть результаты
Евгений О.
2989 повідомлень
#15 років тому
Цитата ("Lisio"):
кто вас учил так измерять время выполнения?

Пардон, уже исправил
Евгений О.
2989 повідомлень
#15 років тому
Практически никакой разницы
<?php
$arr = array();
for ($i = 1; $i <= 100000; $i++) $arr = $i;

$t1 = microtime();
$n = 0;
for ($i = 0; $i < count($arr); $i++) {
$n++;
}
echo 'count()<br />';
echo 'n='.$n.'<br />';
echo 't='.(microtime() - $t1).'<br />';

$t1 = microtime();
$n = 0;
$c = count($arr);
for ($i = 0; $i < $c; $i++) {
$n++;
}
echo 'c=count()<br />';
echo 'n='.$n.'<br />';
echo 't='.(microtime() - $t1).'<br />';

$t1 = microtime();
$n = 0;
foreach ($arr as $k => $v) {
$n++;
}
echo 'foreach<br />';
echo 'n='.$n.'<br />';
echo 't='.(microtime() - $t1).'<br />';

echo '<br /><br />';
$arr = array();
for ($i = 1; $i <= 100000; $i++) $arr = $i + 100;

$t1 = microtime();
$n = 0;
for ($i = 0; $i < count($arr); $i++) {
$n++;
}
echo 'count()<br />';
echo 'n='.$n.'<br />';
echo 't='.(microtime() - $t1).'<br />';

$t1 = microtime();
$n = 0;
$c = count($arr);
for ($i = 0; $i < $c; $i++) {
$n++;
}
echo 'c=count()<br />';
echo 'n='.$n.'<br />';
echo 't='.(microtime() - $t1).'<br />';

$t1 = microtime();
$n = 0;
foreach ($arr as $k => $v) {
$n++;
}
echo 'foreach<br />';
echo 'n='.$n.'<br />';
echo 't='.(microtime() - $t1).'<br />';
?>
Андрей К.
1172 повідомлення
#15 років тому
Немного поторопился. Давайте просто увеличим количество итераций в 100 раз. До 10 млн.