Pull to refresh

Comments 19

Я всегда считал, что язык программирования — это всего лишь инструмент, каждый вид которого подходит для конкретных целей. Но почему я захожу в пост про пятитысячный фреймворк на PHP и в очередной раз вижу какую-то лапшу? Прям классика, ну нельзя же так.
UFO just landed and posted this here
Покажете пример не-лапши?
эээээ, всё было круто, но я так и не понял о чём статья((( Хотя элементы кода просто захватывают своей поражабельностью
С трудом понятна суть статьи обо всем и ни о чем.
Кому интересно Фабьен сделал слайды недавно там все наглядно видно как роуйтинг работает slideshare.net/fabpot/symfony-components-3393116
Спасибо огромное, теперь разобрался хоть о чём статья…
не особо понял про версии 1.2 и 1.4 но есть проект на 1.0 и там yml файл схожей структуры с 2 версией симфонии, то есть что, опять пришли к тому с чего начинали?
Где-то так :) Симфони 1.1-1.4 явно с роутингом перемудрили, раньше каждый роут был элементом массива, а сейчас класс со своими обработчиками.
Раньше было ровно так же: каждый роут — отдельный класс.
Вроде как нет. Было в 1.0

$routes = sfRouting::getInstance();
$routes->setRoutes(
array (
'search' =>
array (
0 => '/search',
1 => '#^/search$#',
2 =>
array (
),
3 =>
array (
),
4 =>
array (
'module' => 'search',
'action' => 'category',
),
5 =>
array (
),
6 => '',
),

Стало в 1.2

$this->routes['sf_media_browser_rename'] = unserialize('C:7:«sfRoute»:1287:{a:10:{i:0;a:4:{i:0;a:4:{i:0;s:9:«separator»;i:1;s:0:"";i:2;s:1:"/";i:3;N;}i:1;a:4:{i:0;s:4:«text»;i:1;s:1:"/";i:2;s:16:«sf_media_browser»;i:3;N;}i:2;a:4:{i:0;s:9:«separator»;i:1;s:0:"";i:2;s:1:"/";i:3;N;}i:3;a:4:{i:0;s:4:«text»;i:1;s:1:"/";i:2;s:6:«rename»;i:3;N;}}i:1;a:9:{s:18:«load_configuration»;b:1;s:6:«suffix»;s:0:"";s:14:«default_module»;s:7:«default»;s:14:«default_action»;s:5:«index»;s:5:«debug»;s:0:"";s:7:«logging»;s:0:"";s:21:«generate_shortest_url»;b:1;s:32:«extra_parameters_as_query_string»;b:1;s:18:«segment_separators»;a:1:{i:0;s:1:"/";}}i:2;a:15:{s:6:«suffix»;s:0:"";s:17:«variable_prefixes»;a:1:{i:0;s:1:":";}s:18:«segment_separators»;R:32;s:14:«variable_regex»;s:8:"[\\w\\d_]+";s:10:«text_regex»;s:3:".+?";s:21:«generate_shortest_url»;b:1;s:32:«extra_parameters_as_query_string»;b:1;s:18:«load_configuration»;b:1;s:14:«default_module»;s:7:«default»;s:14:«default_action»;s:5:«index»;s:5:«debug»;s:0:"";s:7:«logging»;s:0:"";s:21:«variable_prefix_regex»;s:6:"(?:\\:)";s:24:«segment_separators_regex»;s:5:"(?:/)";s:22:«variable_content_regex»;s:5:"[^/]+";}i:3;s:24:"/sf_media_browser/rename";i:4;s:24:"/sf_media_browser/rename";i:5;s:29:"#^/sf_media_browser/rename$#x";i:6;a:0:{}i:7;a:2:{s:6:«module»;s:14:«sfMediaBrowser»;s:6:«action»;s:6:«rename»;}i:8;a:0:{}i:9;s:0:"";}}');
Простите, подумал что вы о 1.1-1.4 Vs 2.0.

Это действительно полезная фича на больших проектах со сложной системой урлов.

Наример.

У нас в проекте в зависимости от выбранной страны генерируется урл для странового домена, если страница вне контекста какой-то страны — урл строится для основного домена. Страновые домены — 2го уровня. Очень удобно в таком случае наследование от класса sfRoute и указание кастомного класса роутинга.
Не, статья оч и очень интересная. Всмысле, на примере слайдов всё было не настолько понятно, а из любопытства таскать проект с гитхаба и разворачивать не хотелось.

Меня тоже бесил роутинг симфони версий 1.2 и 1.4 из-за излишней громоздкости. В Симфони 2 увидел то чего так давно ждал: использование модулей в роутинге (ресурсы) и нормальный url_match без инциализации классов.

Спасибо, что показали сгенеренные файлы. Очень порадовали полезной информацией.
А теперь вернемся к производительности :) Уж больно у них красивые цифры получаются.

Paul M. Jones, методы которого использовались для тестов полностью их раскритиковал.

paul-m-jones.com/archives/1222

В частности:
* We should use Siege 2.69, not 2.66, for more accurate benchmarking of baseline responsiveness. If we notice that HTML is slower than PHP, it’s a sign that something is wrong.
Там же смотрим результаты теста для Siege 2.69:
The rankings and relative ratings appear similar to the Siege 2.66 run; Symfony 2 at .1370 is about 20% faster than Solar at .1126.

В конечном итоге Paul M. Jones'у удалось улучшить результаты только применив патч к своему фреймворку.
Интересно так же почитать ответ Фабьена:

To be fair, you should note that the routing system of Solar is a bit different than the routing system of all other frameworks in the test. During my test, I found it’s not a bi-directional routing system like others (correct me if I’m wrong).


Так что с производительностью, думаю, всё в порядке.
| Similarly, Symfony 2 caches its application classes into another single file (hello/cache
| /prod/classes.php). From what I can tell, none of the other frameworks are doing anything like that;
| they are reading class files individually as needed.

Не смотря на всю гениальность этой идеи это таки малость кэширование. И что будет при увеличении количества классов сложно сказать (vs. классической autoload).

Кстати в комментариях есть еще один интересный линк на тестирование Zend :)

blog.astrumfutura.com/archives/421-PHP-Framework-Benchmarks-Entertaining-But-Ultimately-Useless.html

Практическая ценность близится к нулю, зато некоторые вещи умиляют.

Some recent attention in the PHP framework community has been focused on the recent publication of Symfony 2 Preview benchmarks showing that Symfony 2 outperforms Zend Framework by a factor of 3.5. It also outperforms every other benchmarked framework. This reminded me of the earlier Yii Framework benchmarks which allegedly proved that Yii outperforms Zend Framework by a factor of 7.
At this point, the spirit of Glenn Beck would have me demonstrate that 3.5 multiplied by 2 (the number of eyes in Barrack Obama's skull) equals 7, thus proving the existence of a Liberal conspiracy led by a closet Muslim. That's probably bullshit though.
Улучшать результаты можно долго, заменяя тяжелые части фреймворка голым php. Фабьен же сравнивал решения из коробки, без дополнительных пачтей и оптимизаций, о чем он честно и написал.

Всё это лишний раз доказывает, что такие тесты мало что решают, поэтому делать какие-то выводы о производительности фреймворка на их основе не совсем некорректно. Имхо есть куча куда более важных критериев выбора, нежели скорость отдачи «Hello World».
* не совсем корректно
Автор, напиши про sfRequestHandler. Желательно свою интерпретацию — хочется понять с чем его…
Sign up to leave a comment.

Articles