Способы ускорения PHP-приложений [deworker.pro] [Дмитрий Елисеев] На прошлом стриме мы с вами разобрались с разделением кода на модули и микросервисы. Пока записываются и монтируются скринкасты проведём наш очередной стрим на полезные смежные темы. В этот раз поговорим про способы оптимизации запуска и работы PHP-приложений: Рассмотрим подходы к ускорению работы веб-приложения. От простого включения OpCache, кеширования конфигурации и ленивой инициализации сервисов до Preload с JIT и RoadRunner, асинхронности, использования Fiber-ов и других нюансов в разных фреймворках. Потренируемся на проектах с бэнчмарками. Поговорим про возможные проблемы, удобство программирования stateless-сервисов и про передачу контекста запроса. UPD: Провели первую часть, где показали оптимизацию запуска существующих классических приложений на Slim и Symfony. Содержание:
00:00:00 - Приветствие
00:00:53 - Вопросы в чате
00:06:18 - Как работает проект и что мы можем ускорить
00:31:07 - Демо-приложение на SlimPHP
00:41:36 - Сервис Benchmark для замеров
00:46:30 - Замеры производительности без оптимизаций
00:49:28 - Случай из жизни
00:52:26 - Кэширования опкодов с OpCache
01:01:14 - Компиляция по требованию с JIT
01:07:22 - Ручной прогрев OpCache через Preload
01:24:34 - Где может пригодиться JIT
01:30:23 - Кэширование конфигурации приложения
01:53:57 - Долгоживущие приложения
02:03:38 - Переход с PHP-FPM на RoadRunner
03:07:48 - Демо-приложение на Symfony
03:19:24 - OpCache и готовый Preload
03:23:22 - Подключение RoadRunner к Symfony
03:33:50 - Для Laravel и других фреймворков
03:37:43 - Обзор результата и нюансы
03:43:50 - Ответы на вопросы
И во второй части написали свой асинхронный Loop с таймером на PHP как на JavaScript и показали способы написания новых приложений на асинхронных фреймворках:
00:00:00 - Приветствие
00:01:29 - Про митап с докладом про асинхронность
00:10:58 - Синхронная природа воркеров RoadRunner
00:19:36 - Неудобства от Doctrine с EntityManager
00:26:30 - Пересоздание EntityManager при ошибках
00:40:18 - Сравнение PHP и Java по типизации с Go и TypeScript
01:09:06 - Как устроен waitRequest в RoadRunner
01:23:19 - Пишем Loop для отложенного выполнения кода
01:47:04 - Пишем setTimeout на PHP
02:10:35 - Блокирующий и неблокирующий код
02:15:58 - Неблокирующая загрузка fetch по HTTP
02:34:17 - EventLoop в JavaScript
02:46:30 - Конкурентное и асинхронное выполнение
02:52:56 - Объект Promise и ожидание результата через await
03:11:03 - Ожидание группы через Promise::all
03:13:32 - Идея генераторов с yield
03:20:27 - Концепция зелёных потоков и Fiber
04:00:10 - Практическая польза неблокирующего режима
04:10:56 - Асинхронный сервер AmPHP
04:24:35 - OpCache для консольных приложений
04:25:20 - Скелет демонстрационного приложения
04:29:06 - Работа с системными сигналами в Docker
04:35:09 - Написание проекта на AmPHP HTTP Server
04:40:09 - Использование Connection Pool для БД
04:47:42 - Установка pcntl для работы с сигналами
04:49:27 - Код приложения и тест производительности
05:14:59 - Асинхронная инфраструктура ReactPHP
05:19:25 - Отлов ошибок в Promise и await
05:23:33 - Написание проекта на ReactPHP
05:49:52 - Инфраструктура Swoole и OpenSwoole
06:00:05 - Написание проекта на OpenSwoole
06:26:45 - Проблема состояния и Statefull-сервисов
06:40:04 - Stateless-сервисы и передача параметров запроса
06:50:30 - Структура для описания контекста запроса
07:05:58 - Использование ORM при кооперативном выполнении
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы не можете скачивать файлы