Symfony или Ruby какой фреймворк выбрать — «Work Solutions»
Symfony vs Ruby: какой фреймворк выбрать?
ГлавнаяПолезноеSymfony vs Ruby: какой фреймворк выбрать?

Symfony vs Ruby: какой фреймворк выбрать?

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

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

Для бэкенда ситуация обстоит иначе. До сих пор разработчики со всего мира ведут споры о том, какой язык лучше подходит для сайтов и веб-приложений. В данной статье мы сравним популярные среды для серверной веб-разработки: Ruby и Symfony, а также определим, для каких типов проектов они лучше подходят.

Ruby

Ruby — это высокоуровневый объектно-ориентированный язык программирования. Он позволяет создавать простой, и в то же время понятный код. Его создатель Юкихиро Мацумото придерживался философии, что время разработки и простота кода приоритетнее всего. Поэтому язык часто становится стартовым для начинающих программистов.

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

В начале 2010-х и язык, и фреймворк были очень популярны. RoR был разработан Дэвидом Хэнсоном, сотрудником Basecamp. На тот момент они назывались 37signals и написали очень много качественной бизнес-литературы, в которой продвигали RoR, что во многом сказалось на росте популярности фреймворка.

С помощью Ruby on Rails были созданы такие популярные приложения, как GitHub, AirBnb, Twitch и Twitter.

Преимущества Ruby

  • Скорость разработки. 

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

  • Доступно множество плагинов. 

Существует огромное количество сторонних плагинов, доступных для разработки на Rails. Их называют Ruby gems, так как они вставляются в проект как драгоценные камни в украшение. Более крупные и те, которые имеют много загрузок и пользователей, очень хорошо документированы и просты в использовании.

  • Хорошие соглашения. 

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

В частности, Ruby придерживается шаблона MVC, который является отличной отправной точкой для разработки API. Разработчикам не придется задаваться вопросом, куда им поместить тот или иной код.

  • Отлично подходит для небольших проектов. 

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

Недостатки Ruby

  • Резкая кривая обучения. 

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

  • Конфликтующие плагины.

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

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

  • Плохая производительность.

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

  • Резко снижается популярность. 

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

Symfony

Symfony — фреймворк для языка PHP, который позволяет создавать быстрые приложения, веб-сервисы, API и микросервисы. Так как он написан на PHP, он представляет собой набор переиспользуемых PHP-компонентов, которые могут сэкономить множество времени при разработке.

С помощью Symfony создавались такие крупные и высоконагруженные приложения, как, например, BlaBlaCar или Spotify.

Преимущества Symfony

  • Простая отладка с помощью встроенной панели инструментов. 

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

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

  • Отличная экосистема плагинов.

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

  • Активное сообщество.

У Symfony одно из самых активных и обширных сообществ среди всех фреймворков PHP. Об этом свидетельствует большое количество ежедневных коммитов в репозитории GitHub.

  • Следование хорошим практикам.

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

  • Система событий.

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

  • Встроенный шаблонизатор

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

  • Использование Doctrine ORM

Symfony использует Doctrine ORM для добавления уровня абстракции к базе данных, чтобы поддерживать гибкость без ненужного дублирования кода. Но тут есть и обратная сторона медали: Doctrine ORM не очень хорошо задокументирована и имеет большую кривую обучения при оптимизации для большого трафика.

Недостатки Symfony

  • Сложность в изучении.

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

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

  • Проблемы с производительностью. 

Одна из наиболее обсуждаемых проблем фреймворка — это проблемы с производительностью. Но эта проблема была актуальна для старых версий PHP. В последних релизах создателям Symfony удалось решить большинство проблем с производительностью. 

  • Строгое следование архитектуре.

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

Сравнение Symfony и Ruby

ХарактеристикаSymfony (PHP)Ruby on Rails (Ruby)
Скорость разработкиРазработка достаточно медленная из-за необходимости построения качественной архитектуры проектаРазработка быстрая благодаря готовым компонентам и модулям
ПроизводительностьПоследние версии Symfony дают хорошие показатели скоростиИмеет проблемы с производительностью, если количество модулей слишком большое
Сложность обученияДостаточно плавная кривая обучения, но высокий порог вхождения из-за требований по знаниям архитектуры приложенийПорог вхождения низкий, но кривая обучения резкая. Овладеть языком на высоком уровне достаточно сложно
ПопулярностьPHP все ещё остается одним из самых популярных языков программирования, несмотря на высокую конкуренцию среди серверных языков. Symfony — один из самых востребованных фреймворков для PHP.В начале 2010-х фреймворк был на пике популярности, но из-за его недостатков спрос резко начал снижаться
МасштабируемостьЕсли архитектура была качественно выстроена, то приложение можно беспроблемно масштабироватьПри масштабируемости следует обращать внимание на совместимость модулей, чтобы это не вызывало конфликты

Области использования

И Ruby, и PHP используют в веб-разработке для создания MVP, прототипов и сайтов электронной коммерции. Надежный и быстрый MVP чрезвычайно важен для любого стартапа. Благодаря скорости разработки и многочисленным модулям с Ruby получится быстрее выпустить продукт на рынок, но его будет сложнее масштабировать по сравнению с приложением на Symfony.

Сложность обучения

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

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

Производительность

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

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

Масштабируемость

Следует отметить, что масштабируемость фреймворка редко коррелирует с масштабируемостью приложения. Приложения на Rails или Symfony можно масштабировать как вертикально (за счет увеличения производительности сервера), так и горизонтально (засчет увеличения количества серверов приложений, баз данных, кэширования, задач или серверов CDN).

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

  • Трехуровневая клиент-серверная архитектура (вместо одноуровневой);
  • Redis для хранения пользовательских сессий, кэша DQL и сопоставления Doctrine;
  • MongoDB и ElasticSearch для хранения агрегатов данных;
  • RabbitMQ для выполнения асинхронных операций через очереди;
  • Varnish для кэширования статических ресурсов и HTML-страниц с низкой динамикой;
  • Стек ELK для аналитики;

Если использовать эти решения на Symfony, то можно заставить приложение выполнять более миллиарда запросов в неделю с временем отклика 30 мс.

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

Популярность

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

У Ruby и его фреймворка Ruby on Rails ситуация другая. Какое-то время на него была мода, и он казался очень перспективным. Но со временем выявились проблемы языка, ставшие критичными, такие как низкая производительность. Сначала это снизило спрос среди бизнеса, а из-за отсутствия проектов разработчики стали переходить на другие фреймворки и языки.

Выводы

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

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

Тем не менее, выбор среды разработки для бэкенда не ограничивается этими инструментами. Сегодня существует множество языков программирования и фреймворков, и каждый из них эффективнее решает те или иные задачи. Поэтому если у вас есть сомнения в выборе стека для вашего проекта или вы хотите узнать больше о конкретном фреймворке, команда Work Solutions поможет вам и подберет оптимальное решение.

510
22

Другие статьи

Ко всем статьям