Как стать автором
Обновить

Краткий гайд по выбору между Laravel и Lumen: основные отличия и особенности

Привет, Хабр!

В современной web-разработке редко встречаются проекты написанные полностью с “нуля”. Зачастую в основу проекта закладывают либо CMS, либо Framework в зависимости от специфики проекта. В последние 3 года мы в Hawking Bros отмечаем рост количества запросов на разработку микросервисной архитектуры и на использование API-подхода в разработке.

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

Microframework Lumen построен на основе Laravel, но был заточен на максимальную производительность в скорости. Для понимая различия между этими инструментами предлагаем ознакомиться с таблицей:

Различия

Laravel

Lumen

Позиционирование

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

Lumen разрабатывался с прицелом на написание stateless api приложений. Количество библиотек в разы меньше, чем у старшего брата.

Сессии

Laravel внутри себя имеет мощный инструмент по работе с сессиями.

В Lumen полностью отсутствует функционал сессий.

Route (Маршрутизация)

Роутинг в Laravel позволяет делать многое: создавать одной операцией все CRUD адреса, связывать входящие данные с моделями, кешировать список роутов и др.

Роутинг в Lumen очень прост: он позволяет обрабатывать основные CRUD операции и не поддерживает множество фишек, что есть в Laravel.

ORM

В Laravel используется Eloquent ORM по умолчанию. Отключить его нельзя.

В Lumen по умолчанию не включена поддержка ORM, но достаточно просто это можно сделать через настройки.

View

Для отображения HTML-шаблонов в Laravel используется собственный шаблонизатор blade.

Ранее в lumen не поставлялся шаблонизатор blade, но с версии 5.8, его добавили в ядро и теперь отличий между lumen и laravel в этом плане нет. 

Консольные команды

Есть встроенная утилита Artisan, которая имеет множество готовых команд по созданию и работе с приложением. Также она позволяет писать свои консольные утилиты.

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

Настройка и конфигурация

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

Lumen не так прост и настройки, и конфигурационные файлы подключаются вручную. Middleware, ServiceProvider необходимо настраивать также вручную.

Размер исходника

Папка с исходным кодом Laravel и всеми зависимостями (vendor) весит 56 Мб. Исходный код laravel занимает 8.1 Мб.

Папка с исходным кодом Lumen и всеми зависимостями (vendor) весит 45 Мб. Исходный код lumen весит 348 Кб.

Что касается скорости, то здесь не все так однозначно. В примитивных случаях, когда нет запросов к базе и выводится некая информация на экран, то Lumen показывает прирост примерно в 5-6 раз. Если говорить о более прикладных задачах, то разница не такая существенная и составляет от 10% до 25%.

Для наглядности были проведены тесты замера скорости. Для тестирования использовалось:

Сервер: 2CPU Intel Cascade Lake, 4Gb RAM

Backend: PHP 7.4.3

Laravel: v8.40

Lumen: v8.0

Окружение: Docker

База данных: Postgres 13

Для замера скорости был выбран Laravel Debugbar, как это одно из самых популярных решений для отладки laravel-приложений. 

Задача

Framework

Разница

Laravel

Lumen

Скорость

Память

Скорость

Память

Пустое приложение (первый старт)

118 ms

17 Мб

40ms

9 Мб

67%

Подключение к базе и получение 5000 записей

190 ms

32 Мб

148 ms

23 Мб

23%

Получение 50000 записей в несколько итераций с последующей обработкой

690 ms

44 Мб

639 ms

40 Mб

8%

Получение данных, формирование сообщений в очередь и вывод json в 3000 строк

389 ms

23 Мб

319 ms

15 Мб

18%

Для чего может пригодиться microframework? Для написания небольших приложений API без поддержки сессии пользователя, а также для использования в связке с современными frontend-framework, когда требуется написать несложную backend API и микросервисную архитектуру. Во всех остальных случаях лучше рассматривать Laravel.

Тип проекта

Framework

Микросервисы

Lumen

API без графического интерфейса в web

Lumen

Web-проект без использования Frontend framework

Laravel

Web-проект с отдельным Frontend проектом на NodeJs 

Lumen/Laravel

Простой web-проект

Laravel

Так же остается непонятным дальнейшая судьба Lumen: так как Laravel c 9 версии становится платным, то скорее всего Lumen также станет платным. Если его стоимость будет меньше Laravel, то это может стать еще одним аргументом в пользу выбора Lumen. 

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

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.