- Цели занятия
- Краткое содержание
- Результаты
- Преподаватель
- Дата и время
-
Тезисы из вебинара
- Исходники языка PHP
- Описание грамматики языка PHP
- Другие полезные курсы
- Что изучим?
- Строгая типизация
- Пример задачки на оптимизацию кода
- Циклы компиляции
- Динамическая память
- Модель памяти
- Советует классные плагины для PhpStorm
- Структура данных Zval
- Упражнение по дебагу
- Очистка памяти
- Дебаг потребления памяти
- Циклические ссылки
- 3. Оптимизация
Вебинар был 10.02.2022
Цели занятия
разобраться в том, как устроен PHP «под капотом»
Краткое содержание
-
компиляция и интерпретация;
-
runtime и сборка мусора.
Результаты
-
научиться писать приложения, оптимизированные по потреблению памяти
Преподаватель
-
Дмитрий Кириллов
Дата и время
-
10 февраля, четверг в 20:00
-
Длительность занятия: 90 минут
Тезисы из вебинара
Исходники языка PHP
Рекомендуется к изучению: Исходники PHP: https://github.com/php/php-src
Описание грамматики языка PHP
Все тут: https://phplang.org/
Другие полезные курсы
Что изучим?
Строгая типизация
Задается в коде так:
<?php declare(strict_types=1) ?>
Пример задачки на оптимизацию кода
здесь код по сути пустой, умный компилятор бы его превратил в пустоту, но посмотрим как сработает компилятор php: (во вкладке VLD):
Циклы компиляции
Динамическая память
Модель памяти
Советует классные плагины для PhpStorm
-
Tabine AI code completion — помогает писать код (на основе анализа того что уже было написано)
-
PHP Inspections — валидирует код на ошибки
Структура данных Zval
Упражнение по дебагу
Изучить работу дебаггера и брейк-поинтов
(в slack будет инструкция по дебагу); будет еще отд. занятие по профилированию/отладке
Очистка памяти
-
Ответ: избыток данных в куче
Дебаг потребления памяти
Смотрим что сколько потребляет:
Циклические ссылки
Это переменные, ссылающиеся друг на друга
Вот так очистка не пройдет:
Нужен сборщик мусора, например:
Здесь gc_collect_cycles() найдет пустые ссылки и очистит память
3. Оптимизация
Проблема перекомпиляции
-
Ответ: компиляция по новой
Кеширование opcodes в OpCache
включается в php.ini
Предзагрузка / preloading
JIT php 8.0+
хорош в расчетах/математике
не полезен при работе с БД, API и др.
Структура JIT:
Нет комментариев