Pull to refresh

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

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.