Любите загадки? Событие еще доступно на сайте.
Мифы, в которые пора перестать верить

Laravel против заблуждений

Некоторые выбирают себе религию по цвету иконки или по совету анонима из Telegram чата, который пересказывает чужое мнение.

0
Laravel делает просто, но не примитивно

Просто многие используют его как новички — и винят инструмент вместо себя.

“Laravel — это фреймворк для новичков. Настоящие проекты — на XXX”

Laravel для ленивых. А ленивые, как мы знаем, — лучшие инженеры. Они не пишут код по тысяче строк, чтобы похвастаться “архитектурой”. Они пишут 5 строк. Потому что знают, что архитектура — это не паттерны, а поведение.

Laravel даёт много “из коробки”: роутинг, миграции, ORM, DI-контейнер, и даже очереди. Но знаете, что он не даёт?

  • Он не даёт мышления.
  • Он не даёт дисциплины.
  • Он не запрещает писать монолит, который через полгода рухнет под весом своих App\Services.

Говорить, что Laravel для новичков, — это признание разработчика, что он использовал его как новичок. Ведь Laravel можно использовать как новичок и как профессионал. Это не определяет фреймворк. Это определяет ваш уровень зрелости как инженера.

1
Laravel - это просто надстройка над Symfony

Самый распространённый миф и, возможно, самое большое вранье.

Laravel — это просто сахарная надстройка над компонентами Symfony.

Звучит так, будто Laravel — не полноценный фреймворк, а набор костылей поверх «настоящего» инструмента.

Разберёмся по существу.

Нет ничего предосудительного в том, чтобы использовать готовые, проверенные временем решения. В мире open source это стандарт: Ubuntu основан на Debian, VS Code использует движок Electron, а почти каждый современный фреймворк опирается на сторонние библиотеки.

Laravel действительно использует компоненты Symfony — но в разумных пределах. Из почти 300 компонентов Symfony в Laravel задействованы около 20, не считая полифилов. Это меньше 10% от общего числа. Так что назвать Laravel «надстройкой» — это всё равно что назвать автомобиль «надстройкой над двигателем», потому что он его использует.

2
Большое количество «Магии»

Которую невозможно контролировать.

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

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

Laravel делает то, что должен делать хороший фреймворк: он упрощает рутину. Хочешь записать лог? Просто пиши:

Log::info('Пользователь вошёл в систему');

Для кого-то это магия. «Как так?! Где объект? Кто это вызывает?» А для тех, кто знаком с Laravel — это просто фасад, обёртка над реальным сервисом логирования. Никакой мистики.

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

3
Высокие нагрузки

Это не язык программирования или фреймворк

“Laravel не для highload. Настоящие проекты на Go, Elixir или хотя бы Java.”

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

То есть если ты делаешь по одному запросу к базе данных в каждой итерации foreach, никакой Go не спасёт.

Laravel умеет отлично масштабироваться и при этом имеет множество инструментов для этого. Например:

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

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

  • Максимум из одного сервера с Laravel Octane. В отличие от обычного подхода, где фреймворк загружается на каждый запрос, Octane держит приложение «живым» на сервере, что заметно снижает задержки и увеличивает скорость обработки.

  • Облачные решения — Laravel Vapor и Cloud. Если хочется забыть про сервера и рутинные задачи DevOps, эти платформы возьмут на себя масштабирование и управление инфраструктурой, позволяя сосредоточиться только на написании кода.

4
Стабильность? Не только.

Между стабильностью и устареванием — тонкая грань. Laravel выбрал развитие.

Сторонники Symfony часто называют стабильность главным преимуществом. Мол, Symfony выпускает LTS-версии, поддерживает их годами, а значит — идеально подходит для долгосрочных корпоративных проектов.

Но стабильность — не всегда синоним актуальности.

Laravel тоже придерживается чёткой политики версионирования: 18 месяцев поддержки + 12 месяцев обновлений безопасности. Этого более чем достаточно для большинства бизнес-потребностей. Более того, Laravel значительно быстрее внедряет современные подходы и инструменты.

Symfony предлагает подход, вдохновлённый такими экосистемами, как Java Spring. Но разработчики Spring создавали его ещё в 2002 году, когда только начинали осваивать переход с C на Java и объектно-ориентированное программирование. То, что они сделали тогда, сегодня выглядит устаревшим и неэффективным.

Laravel, в свою очередь, вдохновлялся Ruby on Rails, у которого совершенно иная философия разработки. Laravel перенял эту философию и продолжил её развивать, активно адаптируясь к современным тенденциям. Например, он внедрил Livewire, Inertia.js и другие инструменты, делающие разработку удобнее и быстрее.

Возьмём, к примеру, функцию dd()dump and die. В Laravel она появилась ещё в 2013 году. Symfony добавил аналог лишь в 2018-м. Пять лет — для такой простой, но крайне полезной функции! Это скорее застой, чем стабильность.

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

5
Компоненты

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

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

Особенно известны базовые компоненты Symfony. Однако и Laravel публикует и развивает собственные компоненты, которые также можно использовать независимо от основного фреймворка. Например, Illuminate/Database — для работы с базами данных, или Illuminate/View — для шаблонизации.

Единственное отличие от Symfony Components заключается в том, что компоненты Laravel публикуются только для чтения в отдельной GitHub-организации illuminate. Тем не менее, это не делает их менее мощными или гибкими.

Matt Stauffer, CEO компании @tighten, даже создал демонстрационный проект с примерами использования компонентов Illuminate в качестве автономных библиотек в не-Laravel-приложениях: Torch.