Краткий гайд по выбору между 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 больше заточены на ускорение работы путем облегчения и упрощения встроенного функционала. Отличия от более старшей версии не так существенны. При выборе инструмента лучше всего руководствоваться особенностями проекта, профессиональными навыками команды и потенциальными затратами на поддержку и развитие.
