Comments 19
Я всегда считал, что язык программирования — это всего лишь инструмент, каждый вид которого подходит для конкретных целей. Но почему я захожу в пост про пятитысячный фреймворк на PHP и в очередной раз вижу какую-то лапшу? Прям классика, ну нельзя же так.
-15
эээээ, всё было круто, но я так и не понял о чём статья((( Хотя элементы кода просто захватывают своей поражабельностью
+2
С трудом понятна суть статьи обо всем и ни о чем.
Кому интересно Фабьен сделал слайды недавно там все наглядно видно как роуйтинг работает slideshare.net/fabpot/symfony-components-3393116
Кому интересно Фабьен сделал слайды недавно там все наглядно видно как роуйтинг работает slideshare.net/fabpot/symfony-components-3393116
+1
не особо понял про версии 1.2 и 1.4 но есть проект на 1.0 и там yml файл схожей структуры с 2 версией симфонии, то есть что, опять пришли к тому с чего начинали?
0
Где-то так :) Симфони 1.1-1.4 явно с роутингом перемудрили, раньше каждый роут был элементом массива, а сейчас класс со своими обработчиками.
0
Раньше было ровно так же: каждый роут — отдельный класс.
-1
* простите, объект
-1
Вроде как нет. Было в 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:"";}}');
$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-1.4 Vs 2.0.
Это действительно полезная фича на больших проектах со сложной системой урлов.
Наример.
У нас в проекте в зависимости от выбранной страны генерируется урл для странового домена, если страница вне контекста какой-то страны — урл строится для основного домена. Страновые домены — 2го уровня. Очень удобно в таком случае наследование от класса sfRoute и указание кастомного класса роутинга.
Это действительно полезная фича на больших проектах со сложной системой урлов.
Наример.
У нас в проекте в зависимости от выбранной страны генерируется урл для странового домена, если страница вне контекста какой-то страны — урл строится для основного домена. Страновые домены — 2го уровня. Очень удобно в таком случае наследование от класса sfRoute и указание кастомного класса роутинга.
0
Не, статья оч и очень интересная. Всмысле, на примере слайдов всё было не настолько понятно, а из любопытства таскать проект с гитхаба и разворачивать не хотелось.
Меня тоже бесил роутинг симфони версий 1.2 и 1.4 из-за излишней громоздкости. В Симфони 2 увидел то чего так давно ждал: использование модулей в роутинге (ресурсы) и нормальный url_match без инциализации классов.
Спасибо, что показали сгенеренные файлы. Очень порадовали полезной информацией.
Меня тоже бесил роутинг симфони версий 1.2 и 1.4 из-за излишней громоздкости. В Симфони 2 увидел то чего так давно ждал: использование модулей в роутинге (ресурсы) и нормальный url_match без инциализации классов.
Спасибо, что показали сгенеренные файлы. Очень порадовали полезной информацией.
0
А теперь вернемся к производительности :) Уж больно у них красивые цифры получаются.
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.
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.
0
Там же смотрим результаты теста для Siege 2.69:
В конечном итоге Paul M. Jones'у удалось улучшить результаты только применив патч к своему фреймворку.
Интересно так же почитать ответ Фабьена:
Так что с производительностью, думаю, всё в порядке.
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).
…
Так что с производительностью, думаю, всё в порядке.
+1
| 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.
| /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.
0
Улучшать результаты можно долго, заменяя тяжелые части фреймворка голым php. Фабьен же сравнивал решения из коробки, без дополнительных пачтей и оптимизаций, о чем он честно и написал.
Всё это лишний раз доказывает, что такие тесты мало что решают, поэтому делать какие-то выводы о производительности фреймворка на их основе не совсем некорректно. Имхо есть куча куда более важных критериев выбора, нежели скорость отдачи «Hello World».
Всё это лишний раз доказывает, что такие тесты мало что решают, поэтому делать какие-то выводы о производительности фреймворка на их основе не совсем некорректно. Имхо есть куча куда более важных критериев выбора, нежели скорость отдачи «Hello World».
0
Автор, напиши про sfRequestHandler. Желательно свою интерпретацию — хочется понять с чем его…
0
Sign up to leave a comment.
Symfony2 Routing. Что новенького?