Эти тесты циклически гоняются по кругу каждые 5-7 дней, не надо ждать результатов несколько месяцев — надо пользоваться ссылками в описании, чтобы отслеживать свежие результаты :) Топовые позиции workerman и php-ngx наблюдаю в нем весь 2020 год. Сегодня приняли мой пулл реквест в мастер с фреймворком Comet на базе Workerman. Надеюсь к Round 20 тоже выйти в топ
Так я же и не ратую за экономию микросекунд :) Выбираю полноценный шаблонизатор, реализованный «по всей красоте» современных стандартов. Но план именно в том, чтобы взять готовый движок, поддерживаемый и используемый в коммьюнити, а не написать свой :) Вот эти все полноценные фреймворки в тесте — они как раз хранять шаблоны в отдельных файлах и подгружают / компилируют их в процессе вызова. Но надо расшарить бенчмарки на GitHub, чтобы это было более наглядно.
Так это же медленее будет, нет? Идея с PHP была в том, что он должен работать как некий эталон производительности. Чем быстрее работает такой нативный шаблонизатор, тем проще оценить оверхед остальных фреймворков.
Еще раз вернулся к Blitz и обнаружил более серьезный стоп-фактор: Blitz is a PHP extension distributed in source code (Win32 users can download compiled DLL's).
Для меня принципиально было использовать нативный шаблонизатор, поэтому и Phalcon Volt не взял в тестирование.
Да, но мне нравится дефолтная экранизация в шаблонизаторах, вложение 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%
На «чистом» PHP будет медленнее в разы! Однозначно нужно использовать слой в виде workerman / swoole / reactphp и подобных библиотек. А с ними оверхед на код фреймворка становится совсем минимальным. Если вызов API выполняется менее чем за миллисекунду, дальнейшая «оптимизация» для многих проектов не имеет смысла.
Пример с контроллерами был оформлен по ходу подготовки документации прямо из головы, спасибо за наводку :) Исправил ошибки в примере, проверил на локалхосте работу и обновил README на GitHub.
Swoole я тоже планирую попробовать в качестве «ускорителя» в будущем, но Workerman прямо сейчас лучше тем, что поддерживает разработку на Windows-хостах. При этом не требуется ничего компилировать или подключать сторонние расширения — все работает просто из коробки. Для меня это было важно, по умолчанию сейчас корпоративный ноутбук Dell / Windows 10 :)
Так Comet — это и есть попытка использовать Slim в гиперускоренном варианте. Ну и дополнительные плюшки, заточенные именно под REST. Сейчас добавляю HTTP-клиент, сравниваю тот же привычный Guzzle / новый легковесный Buzz и собственную реализацию поверх стримов PHP (file_get_contents).
habr.com/ru/post/501722
PHP где-то на равных, а где-то обгоняет Go в тестах Techempower.
Ждем PHP8 с JIT чтобы увеличить отрыв :)
www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=fortune&l=zik073-1r
Для меня принципиально было использовать нативный шаблонизатор, поэтому и Phalcon Volt не взял в тестирование.
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;
craftinginterpreters.com/contents.html
Человек убил несколько лет на книжку и описал весь процесс:
journal.stuffwithstuff.com/2020/04/05/crafting-crafting-interpreters
Ссылка на Wren c 4K звезд на гитхабе:
github.com/wren-lang/wren