Почему Symfony2 так плохо работает в тестах и имеет ли это значение?

44

Мои коллеги и я находимся в процессе выбора веб-структуры для разработки веб-сайта с высоким трафиком. Мы действительно хороши с node.js + express и php + symfony2. Оба являются отличными фреймворками, но мы немного обеспокоены Symfony2, потому что он, кажется, превосходит большинство веб-фреймворков.

Вот те критерии, которые доказывают это: http://www.techempower.com/benchmarks/

По этой причине мы, вероятно, будем использовать node.js + express, но я все же удивляюсь, почему Symfony2 так плохо работает в тестах.

  • 2
    Я нахожу странным, что Zend Framework не был включен как часть их теста, хотя некоторые интересные результаты в противном случае.
Теги:
web
benchmarking

2 ответа

131
Лучший ответ

В конце концов все сводится к исправлению обработки кэша...

Symfony или PHP в целом IS медленнее, чем другие языки или фреймворки, тем самым предоставляя вам инструменты для быстрого создания богатых, безопасных и тестируемых веб-приложений.

Если вы используете обратный прокси, например Лак и ESI (включая крайнюю часть) и в конечном итоге обслуживаете части ваших шаблонов, вам действительно нужно обновить через symfony. у вас будет невероятно быстрый опыт.

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

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


[Кэширование и производительность]

С облачными сервисами (s3, ec2, gae,...) практически без затрат в сочетании с балансировщиками нагрузки, легкой подготовкой (шеф-поваром, марионеткой...) и всем этим напуганным материалом, доступным даже для небольших компаний для запуска и управления большими данными и/или приложениями с высоким трафиком.

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

вещи, которые вы часто слышите, если люди говорят о php или каркасе-производительности:

  • facebook работает с php
  • youp ** n был разработан с помощью symfony
  • ...

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

Знаете ли вы, например, что делает facebook, если вы пишете обновление статуса?

Это не сохраняет его прямо в таблице базы данных со всеми вашими обновлениями статуса, и если друг посещает его поток, все статусы от его друга получаются из базы данных до того, как они будут обслуживаться.

facebook записывает ваш статус во все потоки новостей ваших друзей и начинает нагревать их кеш.

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

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

Что это говорит нам? В современных высокочастотных приложениях почти все обслуживается из кеша, и пользователь не заметит, было ли фактическое вычисление страницы заняло 1 мс или 5 секунд.

В сценарии "реального мира" конечный пользователь не заметит разницы в req/sec между фреймворками.

Даже с простыми вещами, такими как микро-кэширование, вы можете заблокировать ваш блог, посвященный vps, сразу же после того, как вы сделали его на целевой странице hackernews.

В конечном итоге важнее то, что... в моей инфраструктуре представлены инструменты, документация и учебные пособия и примеры... чтобы все это было быстро и просто. symfony делает для меня!

Если вы застряли... сколько людей хотят и могут ответить на ваши вопросы, связанные с работой? Сколько реальных приложений уже было или будет в ближайшем будущем создано с этой структурой?

вы выбираете сообщество, выбирая фреймворк!

... хорошо, что это имеет значение... теперь вернемся к этим эталонам:)


[Тесты и настройки]

Во всех этих блестящих цветах и ​​причудливых графиках в тесте вы легко упустите тот факт, что в каждой из этих фреймворков протестированы только одна настройка (веб-сервер, база данных...), в то время как у вас может быть множество различных конфигураций для каждый из них.

Пример: вместо использования symfony2 + doctrineORM + mysql вы также можете использовать symfony + doctrineODM + MongoDB.

MySQL... MongoDB... Реляционные базы данных... Базы данных NoSQL... ORM... micro ORMs... raw SQL... все перепутано в этих конфигурациях ------ > яблоки и апельсины.


[Тесты и оптимизация]

Общей проблемой почти всех эталонных тестов, даже тех, которые сравнивают только фр. фреймворки, обнаружены в Интернете, а также те "тестеры веб-платформы TechEmpower" - это неравная оптимизация.

Эти тесты не используют возможности (и опытными разработчиками хорошо известных) оптимизаций для этих фреймворков... по крайней мере для symfony2 и их тестов это факт.

Несколько примеров установки symfony2, используемых в их последних тестах:

  • "установка композитора" не вызывается с флагом -o, чтобы сбросить оптимизированный автозагрузчик classmap (код)
  • Symfony2 не будет использовать APC-кеш для аннотаций метаданных Doctrine без apc_cli = 1 (issue)
  • весь контейнер DI вводится в контроллер вместо нескольких необходимых сервисов.
  • при этом используется установка setter → создает объект, затем вызывает метод setContainer() вместо того, чтобы вставлять контейнер непосредственно в конструктор (см. BenchController extends Controller extends ContainerAware)
  • псевдоним ($ this- > get ('service_name')) используется для извлечения служб из контейнера вместо прямого доступа к нему ($ this- > container- > get ('service_name')). (код)
  • ...

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


[Разработка и ресурсы]

Ресурсы, такие как серверы и хранилище, дешевы. Действительно дешево... по сравнению с временем разработки.

Я фрилансер, заряжающий значительно обычные тарифы. вы можете получить 2-3 дня своего времени... или нагрузку вычислительной мощности и хранения sh **!

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

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

Что будет дороже? Дополнительный сервер или дополнительный разработчик?

  • 5
    Вы уверены, что это «все» доходит до кеширования. Symfony et Express имеют одинаковую емкость для кеширования (шаблоны / статический контент / ...). Вы говорите, что количество запросов в секунду настолько не имеет значения, что мы не должны принимать это во внимание?
  • 2
    +1 «Что будет дороже? Дополнительный сервер или дополнительный разработчик?» Это упускают из виду так много веб - энтузиастов , которые слепо верят наименьшие ms в тесте является лучшим вариантом.
Показать ещё 9 комментариев
1

Этот блог отвечает на вторую часть вашего вопроса: http://symfony.com/blog/is-symfony-too-slow-for-real-world-usage

Увольнение symfony, потому что скорость теста "привет, мир" не является так же, как и с каркасом FooBar, является ошибкой. Исходная скорость - это не ключевой фактор для профессионалов. Стоимость - ключевой фактор. И стоимость разработка, размещение и обслуживание приложения с symfony меньше, чем для других решений.

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

Как разработчик Symfony, я страстно ненавижу WordPress с технической точки зрения. Но я по-прежнему рекомендую (и даже использовать!) Это для простого веб-сайта. Не только потому, что это популярность, а потому, что размер этого сообщества: очень легко нанять дизайнера/разработчика WordPress. Если посмотреть на сравнение производительности между WordPress и Symfony, в этом случае не будет никакого смысла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню