Порівняння фреймворків
Прямі конкуренти
Lift націлений на ту саму нішу, що Flight PHP, Slim 4 і Lumen — легкі фреймворки для побудови API та мікросервісів без накладних витрат повностекового рішення.
Матриця можливостей
| Можливість | Lift | Flight | Slim 4 | Lumen | Silex¹ | Mezzio |
|---|---|---|---|---|---|---|
| Версія PHP | 8.1+ | 7.0+ | 7.4+ | 8.1+ | 7.0+ | 8.1+ |
| HTTP за PSR-7 | ✓ | ✗² | ✓ | ✓ | ✓ | ✓ |
| Контейнер PSR-11 | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ |
| Middleware PSR-15 | ✓ | ✗ | ✓ | ✗ | ✗ | ✓ |
| DI з автозв’язуванням | ✓ | ✗ | ✗³ | ✓ | ✗ | ✗ |
| Маршрутизація через атрибути PHP | ✓ | ✗ | ✗ | ✗ | ✗ | ✓⁴ |
| Пошук статичних маршрутів за O(1) | ✓ | ✗ | ✓⁵ | ✗ | ✗ | ✓⁵ |
| Іменовані маршрути + генерація URL | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Групи маршрутів | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Вбудований JWT | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Шифрування AES-256-GCM | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Хешування паролів (Argon2id) | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Підпис HMAC | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| UUID v4/v7 + ULID | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Система черг | ✓ | ✗ | ✗ | ✓ | ✗ | ✗ |
| Redis-клієнт | ✓ | ✗ | ✗ | ✓ | ✗ | ✗ |
| JSON-RPC 2.0 | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| CORS-middleware | ✓ | ✗ | ✓⁶ | ✓⁶ | ✗ | ✓⁶ |
| Middleware обмеження частоти | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Захист CSRF | ✓ | ✗ | ✗ | ✓⁷ | ✗ | ✗ |
| Middleware заголовків безпеки | ✓ | ✗ | ✗ | ✗ | ✗ | ✗ |
| Нуль рантайм-залежностей поза PSR | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ |
¹ Silex припинено (2019). Зазначено лише для історичного контексту.
² Flight використовує власні HTTP-об’єкти, не PSR-7.
³ Slim 4 постачаєSlimContainerResolver, але не автозв’язує; вимагає явних прив’язок.
⁴ Mezzio підтримує атрибути через пакетmezzio/mezzio-attributerouter.
⁵ Через FastRoute (окрема залежністьnikic/fast-route).
⁶ Черезtuupola/cors-middlewareабо схожий пакет (окрема залежність).
⁷ Через session-помічники Laravel (лише Lumen).
Продуктивність
Актуальні числа зі сторінки /benchmarks за однакових умов прогону.
Знімок HTTP-пропускної здатності (запит./с)
| Фреймворк | GET /ping |
GET /json |
GET /users/{id} |
|---|---|---|---|
| raw-php | 9 009 | 9 030 | 8 947 |
| flight | 3 923 | 3 833 | 3 679 |
| lift | 3 437 | 3 552 | 3 375 |
| slim | 1 727 | 1 759 | 1 767 |
Умови тесту
- PHP 8.3.6 з OPcache + tracing JIT (
64Mбуфер JIT) php -S(single-process), той самий хост і однаковий профіль прогону для всіх фреймворківwrk -t4 -c64 -d30s --latency- ~100 000+ запитів на кожен ендпоінт для кожного фреймворку
Див. ../benchmarks для percentiles затримки, відносних графіків і повної методології.
Чому не Slim 4?
Slim 4 чудовий, але вимагає nikic/fast-route для конкурентоспроможної продуктивності маршрутизації та php-di/php-di (або схожий) для автозв’язування — додаючи залежності. Lift постачає обидва «з коробки» без зайвих пакетів і додає JWT, шифрування, UUID, черги та JSON-RPC, які Slim залишає стороннім бібліотекам.
Чому не Lumen?
Lumen використовує повний IoC-контейнер Laravel і завантаження через сервіс-провайдери, що додає ~5–10 мс накладних витрат на холодний старт. Якщо ви вже на Laravel, Lumen — природний вибір. Якщо ви починаєте з нуля або оптимізуєте під мікросервіси, Lift стартує менш ніж за 1 мс.
Чому не Flight?
Flight швидкий і справді без залежностей, але він передує стандартам PSR і не може використовувати сучасну екосистему middleware PSR-7/15. Lift дає вам той самий мінімальний слід із повною відповідністю PSR, сучасними ідіомами PHP 8.1+ і повним набором інструментів для шифрування/безпеки.
Запуск власного бенчмарка
# Установити wrk
brew install wrk # macOS
sudo apt install wrk # Ubuntu
# Запустити застосунок Lift
php -S localhost:8080 benchmarks/apps/lift_app.php
# Статичний маршрут
wrk -t4 -c100 -d10s http://localhost:8080/ping
# Динамічний маршрут
wrk -t4 -c100 -d10s http://localhost:8080/users/42
Див. ../benchmarks для повного посібника.