Обновить
-8
0
Серёжа@gotz

PHP / Go

Отправить сообщение
Эти тесты циклически гоняются по кругу каждые 5-7 дней, не надо ждать результатов несколько месяцев — надо пользоваться ссылками в описании, чтобы отслеживать свежие результаты :) Топовые позиции workerman и php-ngx наблюдаю в нем весь 2020 год. Сегодня приняли мой пулл реквест в мастер с фреймворком Comet на базе Workerman. Надеюсь к Round 20 тоже выйти в топ
Программирую на Go и PHP и настолько не согласен с автором, что даже выбрал PHP в качестве целевого языка для нового REST API фреймворка :)

habr.com/ru/post/501722

PHP где-то на равных, а где-то обгоняет Go в тестах Techempower.

Ждем PHP8 с JIT чтобы увеличить отрыв :)
ОК, принято.
Кажется на первом графике перепутаны местами Питер и Новосибирск?
Так я же и не ратую за экономию микросекунд :) Выбираю полноценный шаблонизатор, реализованный «по всей красоте» современных стандартов. Но план именно в том, чтобы взять готовый движок, поддерживаемый и используемый в коммьюнити, а не написать свой :) Вот эти все полноценные фреймворки в тесте — они как раз хранять шаблоны в отдельных файлах и подгружают / компилируют их в процессе вызова. Но надо расшарить бенчмарки на GitHub, чтобы это было более наглядно.
Techempower Benchmarks считают что workerman самый быстрый :)

www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=fortune&l=zik073-1r
Так это же медленее будет, нет? Идея с PHP была в том, что он должен работать как некий эталон производительности. Чем быстрее работает такой нативный шаблонизатор, тем проще оценить оверхед остальных фреймворков.
Еще раз вернулся к Blitz и обнаружил более серьезный стоп-фактор: Blitz is a PHP extension distributed in source code (Win32 users can download compiled DLL's).

Для меня принципиально было использовать нативный шаблонизатор, поэтому и Phalcon Volt не взял в тестирование.
Можно и такой вариант попробовать, через eval() кода с шаблоном. Спасибо за идею.
Я сам люблю графики от ноля, но в данном случае график рисует онлайн-сервис чартов, он решил масштабировать от минимального значения
Да, решил приблизить к реалиям — более сложные шаблоны в течение недели протестировать.
Ох, похоже Blitz не развивается :( Последние коммиты от 2017 года
Да, но мне нравится дефолтная экранизация в шаблонизаторах, вложение partials, фильтры в духе Twig… но все это в разной мере доступно во фреймворках, это отдельные критерии для оценки.
Здесь не очень уместно приводить скомпилированный Twig, но это внушительный файлик из восьмидесяти строк… против четырех для чистого PHP. Скорее всего, разница нивелируется архитектурой Comet, в которой все классы подгружаются один раз и остаются в памяти. В классическом FPM-приложении разница была бы более драматической. Один раздел импортов в скомпилированном шаблоне Твиг чего стоит:

use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
Воистину :) Но «сам шаблонизатор» не делает базовых вещей типа экранирования HTML-тегов, поэтому я даже удивлен, что наш эталон быстрее не в разы, а всего лишь на 20%
Фил, написать свой собственный мини-язык абсолютно реально. Вот свежая книжка от автора такого экспериментально языка Wren:

craftinginterpreters.com/contents.html

Человек убил несколько лет на книжку и описал весь процесс:

journal.stuffwithstuff.com/2020/04/05/crafting-crafting-interpreters

Ссылка на Wren c 4K звезд на гитхабе:

github.com/wren-lang/wren
На «чистом» PHP будет медленнее в разы! Однозначно нужно использовать слой в виде workerman / swoole / reactphp и подобных библиотек. А с ними оверхед на код фреймворка становится совсем минимальным. Если вызов API выполняется менее чем за миллисекунду, дальнейшая «оптимизация» для многих проектов не имеет смысла.
Пример с контроллерами был оформлен по ходу подготовки документации прямо из головы, спасибо за наводку :) Исправил ошибки в примере, проверил на локалхосте работу и обновил README на GitHub.
Swoole я тоже планирую попробовать в качестве «ускорителя» в будущем, но Workerman прямо сейчас лучше тем, что поддерживает разработку на Windows-хостах. При этом не требуется ничего компилировать или подключать сторонние расширения — все работает просто из коробки. Для меня это было важно, по умолчанию сейчас корпоративный ноутбук Dell / Windows 10 :)
Так Comet — это и есть попытка использовать Slim в гиперускоренном варианте. Ну и дополнительные плюшки, заточенные именно под REST. Сейчас добавляю HTTP-клиент, сравниваю тот же привычный Guzzle / новый легковесный Buzz и собственную реализацию поверх стримов PHP (file_get_contents).

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Зарегистрирован
Активность