Опять про "фонарные" ЧПУ

HraKK

Мудак
Команда форума
Я понял, чем меньше строк тем круче помидоры.
 

Nelius

кипарис во дворе
Тесты производительности в студию!)

Я готов все свои 50 литров крови истратить и писать много много строк вместо регулярки, если: а) это быстрее б) это понятнее и проще для других людей кто будет смотреть мой код с) не использовать регулярные выражения там где нет необходимости это делать.

После тестов производительности регулярки VS explode(итд) можно будет дальше оффтопить)))
 

HraKK

Мудак
Команда форума
daevaorn
Меньше крови? Мне проще понять строковое, да и не мне только. Усключая конечно WP, а к тому же заметьте что я могу производить какие то фильтры над получаемыми данными сразу а вам придется еще дописывать строки или использовать _callback еще угемороя код во много раз, не говоря уже о производительности.

И так количество строк практически тоже, если отойти от абстрактного случая, читаемость ниже, производительность еще ниже.
 

daevaorn

Новичок
Автор оригинала: Nelius
Тесты производительности в студию!)
Где ваша реализаци этого паттера, тогда можно и сравнить.

Автор оригинала: Nelius
если: а) это быстрее
регулярки быстрые достаночно. кто быстрее ещё надо выяснить. А вот скорость разработки повышается.
Автор оригинала: Nelius
б) это понятнее и проще для других людей кто будет смотреть мой код
Регулярные выражения стандартизированы(отностильно) и понятны любому кто с ними имел дело в любой среде. А вот вами написанный код этими качествами не обладает.
Автор оригинала: Nelius
с) не использовать регулярные выражения там где нет необходимости это делать.
я необходимость уже обосновал.

Автор оригинала: HraKK
Меньше крови? Мне проще понять строковое, да и не мне только.
Регулярые выражения очень мощьный инструмент и им желательно владеть.
Автор оригинала: HraKK
а к тому же заметьте что я могу производить какие то фильтры над получаемыми данными сразу а вам придется еще дописывать строки или использовать _callback еще угемороя код во много раз, не говоря уже о производительности.
После матчинга этого паттерна, на выходе я получаю именновые праметры(всё делает за меня библиотека рег.выраженирй). Я точно знаю, что они соотвествуют заданному мною формату(это строка, а это число и т.д.). Опять всё сделал за меня парсер. После я этого я передаю эти параметры в обработчик(черный ящик), который "закреплен" за этим паттерном. Он мне и вернет контекст для шаблонизатора. В итоге, весь разбор юрла сделала мне библиотека. А меньшая производительность ещё не доказана. Зато я не тратил время на разработку разбора юрла сам, доверив его проверноой, отлаженной бибилотеке.
Автор оригинала: HraKK
И так количество строк практически тоже, если отойти от абстрактного случая, читаемость ниже, производительность еще ниже.
Про читаемость выражения я уже написал. Кол-во строк меньше. Производительность вы проверяли?
 

HraKK

Мудак
Команда форума
Я не говорил про формат, я говорил про действия. Но то не важно потому что это все сферические кони в вакуме.
Производительность вы проверяли?
сейчас проверю

-~{}~ 15.11.07 16:39:

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

-~{}~ 15.11.07 16:45:

PHP:
<?php
$url = '/blog/HraKK-Super-super/archive/1986/12/13/Suxx-itreallycrap/';
$q= microtime(1);
for($i =0;$i<10000;$i++)
{
$string = explode('/', $url);
$username= (STRING)$string[2];
$year= substr((INT)$string[4],0,4);
$mouth= substr((INT)$string[5],0,2);
$day= substr((INT)$string[6],0,2);
$subj = (STRING)$string[7];
}
print microtime(1)-$q.'<BR>';
$q= microtime(1);
for($i =0;$i<10000;$i++)
{
$result = preg_match("~^/blog/(?P<username>[\w-_]+)/archive/(?P<year_id>\d{4})/(?P<month_id>\d{1,2})/(?P<day_id>\d{1,2})/(?P<post_slug>[\w_-]+)/$~", $url, $f);
}
print microtime(1)-$q.'<BR>';
0.075 в строковых
0.1 в регулярке.

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

daevaorn

Новичок
Автор оригинала: HraKK
И это при том что в строковых я написал по мудакскому, а можно еще оптимизировать.
И в правду. Мои результаты вашего кода:
Код:
> php -f reg.php
0.11503410339355
0.10777282714844
Но даже не в этом дело. Вам не кажется, что это не равнозначные реализации? В строковых:
- Где проверка, что в строках именно допустимые символы?
- Где проверка на то, что есть `post` и `archive` и именно в тех позициях?
- Где проверка, что например год из четырех цифр на самом деле?
- Где проверка на то что после slug строка кончается?
- Где создание dict из переменных?
Это то что по скорости.

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

Где лучше? Помойму очевидно.
 

boombick

boombick.org
Ради красивых урлов приходится чемто жертвовать.
Глупости какие. Ничем не надо жертвовать ради красивых урлов. Надо просто написать хороший и удобный тебе механизм обработки этих урлов. И не спрашивать ни у кого, а читать умные книжки и статьи, интересные треды в форуме "Вопросы по теории программировании" (там очень умные люди пишут, кстати) и формировать свой собственный стиль программирования. Время от времени корректировать его, оптимизировать собственные алгоритмы.
"Ноев ковчег был построен любителем, профессионалы построили Титаник". Со временем поймешь, что все умные слова про паттерны, ООП, стиль кодирования, оформление кода - это не сотрясание воздуха, а следствие длительного опыта разработки и поддержки больших сложных и красивых систем.
А если не поймешь, значит меняй профессию :)

Все вышеизложенное, конечно же, ИМХО =)
 

akd

dive now, work later
Команда форума
имхо, если говорить только о скорости, то регулярное выражение будет быстрее чем str* функции с такой-же логикой и результатом.
 

HraKK

Мудак
Команда форума
daevaorn
По моему мы опять говорим об абстрактном методе, и заходим в холивар. Как только мы бы с вам заговорили о Конкретной задаче я мог бы вам доказать, но в абстрагировании можно тянуть веревки в любой конец, ведь сопротивление окружения равно 0.

функции с такой-же логикой и результатом.
Верно, потому что они заточены под эту логики. НО. Не всегда нужнен этот весь функционал, в 90% не нужен. У меня на работе один писал регулярками только потому что впадло было запоминать весь функционал строковых функций:)
 

akd

dive now, work later
Команда форума
HraKK, а у меня на работе один писал все строковыми функциями, начитавшись в "умной" книжке о "зле и тормознутости регулярных выражений". слегка вылечилось после демонстрации теста и обьяснением что для еды есть множество приборов а не только ложка. :)
 

HraKK

Мудак
Команда форума
akd
Верно :) Суть в чем? Не зацикливатся и применять тот инструмент который больше подходит.
В данном случие, нужно испольщовать либо регулярку илибо строковые в зависимости от архитектуры. В моей строковые лучше себя зарекомендовали, в его не исключаю что регулярки. Потому что у него жестокая структура, и соответсвенно, легче заточить регулярку под Конкретный пример. В моем случии строки будет быстрее и гибче.
 
Сверху