Способы ускорения PHP-приложений
На прошлом стриме мы с вами разобрались с разделением кода на модули и микросервисы. Пока записываются и монтируются скринкасты проведём наш очередной стрим на полезные смежные темы. В этот раз поговорим про способы оптимизации запуска и работы 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 при кооперативном выполнении
- 07:14:33 - Ответы на вопросы
Оплатить можно самому российской или иностранной картой или попросить работодателя оплатить от имени компании.
Для скидки можете сначала оформить в кабинете безлимитную подписку на наши полезные скринкасты.
А потом или сейчас приобрести записи стрима можно там же в кабинете или здесь:
Оплачено!
Доброго дня. С 1 декабря 2023 года изменились требования для системы Auth. https://www.consultant.ru/document/cons_doc_LAW_453265/3d0cac60971a511280cbba229d9b6329c07731f7/, https://journal.tinkoff.ru/news/stop-ino-id
Теперь владельцы российских сайтов и программ, где предусмотрена авторизация пользователей, должны проводить ее одним из четырех способов:
Многие сайты уже убрали вход по networks, а так же вход по email. Фактически всё ведется к единому аккаунту. В связи с этим имеет смысл внести изменения в модуль Auth аукциона либо вовсе перейти на VK ID. Что думаете на этот счет?
Хочу отметить, что ответственности пока что нет, но к этому всё идёт.
Это и есть вход по OAuth. В проекте можно просто переименовать networks в providers. Остальное переделывать под них не нужно.
Да, оно так и есть. Я больше не про название networks…
Я всё веду к тому, что в текущую модель надо внести изменения:
А может и вовсе вместо своего Auth использовать Яндекс ID или VK ID. Чтобы не морочиться с этим всем.
Хотя это демо-проект, и, возможно, текущие предложения не актуальны.
P.S.: Так же хочу предложить использование Next-Auth версии 5 вместо текущей реализации UI. Очень сильно упрощает работу с Auth системой и реализации SSO. Ну и чистый React заменить на NextJS фреймворк App dir (V14). Очень много полезного сделано для современного UI. В том числе ServerActions. Пользуюсь этими решениями уже больше года. Очень доволен. Много чего готового, чего нет в чистом React.
Так...
Сервис авторизации !== электронная почта.
Т.е., грубо говоря закон называется: "Запрет авторизаций через иностранные сервисы".
Поэтому проще убрать этот способ регистрации, как сделали многие российские Auth-сервисы. И панику вообще не нагоняю
А можно по 2-му пункту цитату из закона - я пока не смог найти такого ограничения?
Ну и по 3-му пункту - по какой причине убирают почту - это, конечно, дело владельцев ресурсов, ну и снова про этот фактор: "нельзя использовать почту зарубежных провайдеров."
Я не нашёл пока что таких ограничений.
Ну и за информаирование - конечно, спасибо!
Вот краткий пост с Хабра: https://habr.com/ru/news/751532
Вот ссылка на закон: http://publication.pravo.gov.ru/document/0001202307310022?index=2
В нем говорится про 4 способа, которые надо использовать на сайте:
номер телефона российского оператора связи;
данные для входа через единый портал «Госуслуг» (ЕСИА);
личные данные через Единую биометрическую систему (ЕБС);
иную информсистему, обеспечивающую авторизацию пользователей сайтов и владельцем которой является гражданин РФ, не имеющий гражданства другого государства, или российское юрлицо с иностранным владением менее 50%.
То есть про почту вообще ничего не сказано. Однако есть отдельные комментарии политиков для чего это делается. Чтобы не крали данные зарубежные сервисы. Поэтому почту использовать можно, если она «российская». Так же зарубежную можно перенести на «российскую» с помощью сервиса https://blog.mail.ru/xmail. Опять же закон касается больше таких гигантов как OZON ID, SberID, Yandex ID, VK ID и т.д. То есть вашему маленькому сервису, думаю, ничего не будет. Однако тенденция такая и стремиться к этому нужно. Особенно в новых проектах. Поэтому я и предлагаю сразу убрать почту. А так это вообще демо проект. Тут можно хоть как делать.
Там просто к этим поправкам, вроде, ещё поправок добавили. Придётся ещё перечитывать....
Что касается практической части - только что входил на сайт mail, авторизовывался в почтовый ящик - попросили только имя пользователя и пароль, на телефон кодов не приходило, через госуслуги не требовали входа, ну и вообщем, никаких "ограничений" я не смог обнаружить, просто логин и пароль.
Или для mail.ru этих ограничений не существует? Иля это не российская компания?
Это так, к слову. Пойду ещё раз читать)))
только что зарегистрировался логин ivantestpetrov пароль TIadFP47pee(
ничего более не потребовалось. ну и заодно выяснил, VK, которой принадлежит mail - российская компания.
Читайте пункт 3.
Вы также правильно отметили, что Маил это VK. Однако стала она структурой VK относительно недавно. Там в целом ещё не до конца всё переведено на рельсы ВК. Так как у ВК есть свой ВК ID систему авторизации тут переделывать не будут. В какой-то момент просто сделают вход по VK ID и всё. VK ID это независимый ресурс. Регистрация в нем не означает регистрацию в социальной сети.
Попробуйте создать такой аккаунт на Яндекс. Ну или Яндекс ID https://passport.yandex.ru/auth/reg/portal?retpath=https%3A%2F%2Fid.yandex.ru%2F&noreturn=1
Не вижу смысла переводить данные комментарии в бесконечную ленту. Я вам поделился информацией и законами и сервисами, где это уже внедрили. В том числе в корневом комментарии. Перечитайте, проанализируйте и сделайте свой вывод.
Ок, спасибо. На этом пока завершим)
Кажется при переводе на RoadRunner приложений следует еще внимательно следить за корректностью обработки сессий. Допустим баг Symfony или незакрытая проблема в roadrunner-bundle.
А вторую часть еще рано оплачивать? Что то ссылки не вижу.
Оплата одна за две части. Ещё раз оплачивать не нужно.
Сегодня же Зенит - Спартак в 19.30
Дядь Дим, когда уже на джаву пойдем? Чтоб как у взрослых xD
Или войти через: