Способы ускорения PHP-приложений
Год выпуска: 2024
Производитель: Deworker Pro
Сайт производителя:
https://deworker.pro/blog/stream-php-app-speedup
Автор: Дмитрий Елисеев
Продолжительность: 11:50:39
Тип раздаваемого материала: Видеоурок
Язык: Русский
Субтитры: Отсутствуют
Описание:
В этот раз поговорим про способы оптимизации запуска и работы PHP-приложений.
Рассмотрим подходы к ускорению работы веб-приложения.
От простого включения OpCache, кеширования конфигурации и ленивой инициализации сервисов до Preload с JIT и RoadRunner, асинхронности, использования Fiber-ов и других нюансов в разных фреймворках.
Потренируемся на проектах с бэнчмарками.
Поговорим про возможные проблемы, удобство программирования stateless-сервисов и про передачу контекста запроса.
Содержание:
Первое видео:
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 - Ответы на вопросы
Второе видео:
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 при кооперативном выполнении
07:14:33 - Ответы на вопросы
Формат видео: MP4
Видео: avc, 1920x1080, 16:9, 30000 к/с, 496 кб/с
Аудио: aac, 44.1 кгц, 128 кб/с, 2 аудио
MediaInfo
General
Complete name : E:\Способы ускорения PHP-приложений\Часть 1.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/avc1/mp41)
File size : 1.16 GiB
Duration : 4 h 21 min
Overall bit rate : 633 kb/s
Frame rate : 30.000 FPS
Description : skladchik.org
Writing application : Lavf60.3.100
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L4
Format settings : CABAC / 4 Ref Frames
Format settings, CABAC : Yes
Format settings, Reference frames : 4 frames
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 4 h 21 min
Bit rate : 496 kb/s
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 30.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.008
Stream size : 930 MiB (78%)
Writing library : x264 core 164
Encoding settings : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=34 / lookahead_threads=5 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=250 / keyint_min=25 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / ip_ratio=1.40 / aq=1:1.00
Color range : Limited
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709
Codec configuration box : avcC
Audio
ID : 2
Format : AAC LC
Format/Info : Advanced Audio Codec Low Complexity
Codec ID : mp4a-40-2
Duration : 4 h 21 min
Source duration : 4 h 21 min
Bit rate mode : Constant
Bit rate : 128 kb/s
Channel(s) : 2 channels
Channel layout : L R
Sampling rate : 44.1 kHz
Frame rate : 43.066 FPS (1024 SPF)
Compression mode : Lossy
Stream size : 240 MiB (20%)
Source stream size : 240 MiB (20%)
Default : Yes
Alternate group : 1