Pull to refresh
-7
-0.3
Серёжа @gotz

PHP / Go

Send message
Для того, чтобы не ломать привычный поток разработки на PHP :) Не нужно изучать новые подходы и разруливать целый класс новых проблем и нюансов асинхронного кода — ведь все летает и без этого. Но если хочется бОльшего именно в рамках PHP — да, Swoole интересный вариант. Но я программировал в такой парадигме на Go / Node.js и мне не очень понравилось.
Посоветуйте :) Посмотрел composer.json LessQL — никаких зависимостей кроме PHP, это же замечательно.
Я старался провести максимально честное сравнение и выпилил из Laravel / Symfony все бандлы, которые вообще можно было выпилить. Буду рад, если посмотрите и подскажете, как их еще можно ускорить, я выложил бенчмарки в репозиторий:

github.com/gotzmann/benchmarks

Провел сравнительные тесты на машине Hetzner и разница между Comet и остальными фреймворками получилась еще более внушительной.
А есть у Spiral какие-то микросборки для тестирования? Не смог собрать для него урезанную версию без ORM и прочих плюшек, а хотелось бы для сравнения github.com/gotzmann/benchmarks
Подрихтовал все конфиги и провел тесты на Linux-машине Hetzner:

github.com/gotzmann/benchmarks

Результаты отрыва получились еще более впечатляющие :) Интересно понять, связано ли это на самом деле с конфигурированием, или все-таки workerman позволяет ускоряться до нереальных показателей.
Ну для реальной работы у меня в приложении помимо Comet подключен Eloquent, Monolog и миграция базы на Phinx. Тащить все это в сам фреймворк не вижу смысла :) У других разработчиков могут быть собственные предпочтения по выбору библиотек.
Остальные части фреймворка пока не готовы к публичному показу и концептуально не проработаны. Замечание справедливое :)
В тестах использовал обрезанный Symfony без Doctrine и прочих бандлов — только роутинг и контроллеры.
Приложение на Comet я запускаю прямо из командной строки Windows/ Linux и для его работы не требуется ни RR, ни Nginx или FPM — считаю, это огромное преимущество. Зачем RR, если нативное приложение на PHP работает быстрее без обвязки?
Материал для следующего анонса :)

habr.com/ru/post/501722
Для Go был мощный корпоративный фреймворк для генерации 90% бойлерплейта по сваггер-спеке. Аналогичного по возможностям в опен-сорс не нашлось, а писать вручную типичный код на го для валидации и перекладки данных между JSON и базой данных — такое себе удовольствие. PHP более краткий и мощный. Для Python есть Connexion от Zalando — но увы, это не мой язык :)
Спасибо за инсайты, настройки Nginx/FPM брал как раз на Techempower, но на результаты мог повлиять факт тестов из докер-контейнеров на платформе Windows. Надо будет прогнать их на более приближенном к реалиям окружении Linux.

Кусочек конфига, определяющий количество воркеров:

worker_processes  auto;
worker_rlimit_nofile 200000;
events {
    worker_connections 16384;
    multi_accept off;	 
}
Насколько я знаю, opcache по умолчанию включен во всех дистрибутивах PHP7. Но проверил на всякий случай php.ini в докер-контейнере на базе Ubuntu 19.10 и PHP 7.4, в котором тестирую все фреймворки — как и ожидалось — opcache.enable=1
Спасибо :) Это не демка Slim, просто Comet «магически» отправляет все не определенные в классе вызовы внутреннему инстансу приложения Slim — поэтому код базовых примеров выглядит один в один.

Как сказано в описании проекта на GitHub, Comet — это гибрид Slim и Workerman, приправленный собственной магией, которой будет больше в следующих релизах :)
Предзагрузка помогает, но не настолько существенно, как хотелось бы. Badoo на Хабре приводит следующие цифры: «переход c PHP 7.2 на PHP 7.4 даёт +10% к производительности на нашем endpoint’е, а preload даёт ещё 10% сверху».

В следующих версиях Comet планирую тоже поиграться с предзагрузкой и добавить более быстрые имплементации PSR-7 компонентов.
Надо посмотреть поближе, рекомендовали Phalcon Micro. Несколько лет назад у меня с ним были проблемы (то ли не мог собрать пакет, то ли он вообще не поддерживал разработку на Windows-хостах), поэтому в этот раз я как-то прошел совсем мимо.
Если не считать composer.json — так и есть :) Пока не решил, какие части фреймворка стоит включить в базовой поставке. Думаю, расширенные версии Request / Response, миддлваре авторизации и средства миграции БД пригодятся всем пользователям.
Должен быть быстрее — на уровне Slim, судя по этим тестам
Согласен, надо добавить в тесты Lumen — но по ожиданиям, его производительность будет где-то на уровне Symfony (судя по тестам TechEmpower Benchmarks)
Это зависит от настроек сервера Comet — количества доступных для работы воркеров. Длинные блокирующие операции выжирают пул доступных воркеров и заставляют новые запросы ждать своей очереди. Звучит не очень в теории, но на практике даже под нагрузкой Comet не проигрывает в производительности ни серверам на Go, ни проектам на NodeJS, если блокирующим фактором выступает, например, база данных.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity