Профилирование PHP (Laravel) приложений с xhprof. Учимся искать ботлнеки
Вам знакомо то чувство, когда ваш PHP-код отрабатывает за дофига миллисекунд, а иногда и секунд, и вы не можете понять, в чём дело и где тот говнокод, который я (или не я, а мой коллега) когда-то написал? В этой статье хочу немного рассказать на примере профайлинга PHP-кода, как перестать гадать и начать выявлять боттлнеки, которые всё тормозят. Короче, помочь поискать говнокод. После этого у многих из вас появится понимание, как дать своему приложению прирост производительности с помощью крутых инструментов профайлинга, таких как xhprof и Buggregator.
https://habr.com/ru/articles/823156/
📲 Мы в MAX
👉 @php_lib
Вам знакомо то чувство, когда ваш PHP-код отрабатывает за дофига миллисекунд, а иногда и секунд, и вы не можете понять, в чём дело и где тот говнокод, который я (или не я, а мой коллега) когда-то написал? В этой статье хочу немного рассказать на примере профайлинга PHP-кода, как перестать гадать и начать выявлять боттлнеки, которые всё тормозят. Короче, помочь поискать говнокод. После этого у многих из вас появится понимание, как дать своему приложению прирост производительности с помощью крутых инструментов профайлинга, таких как xhprof и Buggregator.
https://habr.com/ru/articles/823156/
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Совет по Laravel💡
Уникальные идентификаторы запросов
Вам когда-нибудь требовалось создать код уникального идентификатора для запроса, например, для целей кэширования? Laravel поставляется с методом «
#laravel
📲 Мы в MAX
👉 @php_lib
Уникальные идентификаторы запросов
Вам когда-нибудь требовалось создать код уникального идентификатора для запроса, например, для целей кэширования? Laravel поставляется с методом «
fingerprint», который позволяет вам генерировать уникальный идентификатор для ваших запросов 🚀#laravel
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Привет, разработчики Laravel 👩💻
Начиная с Laravel v11.18.0, в методе
Пример использования метода
Раньше при использовании метода
Теперь мы можем передать параметр
Это может улучшить пользовательский опыт для некоторых приложений.
📲 Мы в MAX
👉 @php_lib
Начиная с Laravel v11.18.0, в методе
Str::limit() появился новый параметр preserveWords.Пример использования метода
limit() — отображение предварительных версий текстового контента, таких как резюме или отрывки блог-постов.Раньше при использовании метода
limit он мог разрывать слова посередине.Теперь мы можем передать параметр
preserveWords как true, и Laravel умно применит ограничение так, чтобы последнее слово было полным.Это может улучшить пользовательский опыт для некоторых приложений.
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
Совет по Laravel 💡
Вам нужно использовать одни и те же правила проверки пароля для разных маршрутов пользователей (например, при регистрации и создании панели администратора)?
Обратите внимание на функцию
Ознакомьтесь со всеми правилами в документации: https://github.com/illuminate/validation/blob/master/Rules/Password.php
📲 Мы в MAX
👉 @php_lib
Вам нужно использовать одни и те же правила проверки пароля для разных маршрутов пользователей (например, при регистрации и создании панели администратора)?
Обратите внимание на функцию
Password::defaults(). Ознакомьтесь со всеми правилами в документации: https://github.com/illuminate/validation/blob/master/Rules/Password.php
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Laravel разработчики, упростите загрузку файлов с этим инструментом! 💎
Используйте
Совет: Настройте имя файла и заголовки для большего контроля.
📲 Мы в MAX
👉 @php_lib
Используйте
Storage::download(), чтобы принудительно запустить скачивание файла в браузере. Отлично подходит для защищенных файлов или генерации динамических загрузок.Совет: Настройте имя файла и заголовки для большего контроля.
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Media is too big
VIEW IN TELEGRAM
Полный курс Laravel Swagger. REST API Laravel
00:00:00 Введение
00:04:25 Делаем заготовку
00:16:20 Установка Swagger
00:22:18 Общие аннотации и настройки Swagger
00:28:01 CRUD со Swagger
01:03:03 Установка JWT Auth
01:13:08 Авторизация и защищенные роуты в Swagger
01:20:20 Бонус. Нестандартные тело запроса и ответа
источник
📲 Мы в MAX
👉 @php_lib
00:00:00 Введение
00:04:25 Делаем заготовку
00:16:20 Установка Swagger
00:22:18 Общие аннотации и настройки Swagger
00:28:01 CRUD со Swagger
01:03:03 Установка JWT Auth
01:13:08 Авторизация и защищенные роуты в Swagger
01:20:20 Бонус. Нестандартные тело запроса и ответа
источник
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Индексы в PostgreSQL/MySQL. Что мы забываем?
Ты добавил индекс, но запрос всё равно тормозит. Почему?
База данных не всегда использует индексы так, как вы ожидаете. Вот быстрый чеклист для проверки перед деплоем миграции.
📋 Чеклист по индексам:
1. Cardianlity (Селективность): Индекс по полю
2. Порядок в составном индексе: Правило «слева направо».
💜 Индекс
💜 Но НЕ сработает эффективно для
3. Функции убивают индекс:
💜
💜
4. LIKE с процентом в начале:
💜
💜
5. Типы данных: Сравнение строки с числом (неявное приведение) может отключить использование индекса.
Совет: Всегда делайте
#database #sql #optimization #mysql #postgres
📲 Мы в MAX
👉 @php_lib
Ты добавил индекс, но запрос всё равно тормозит. Почему?
База данных не всегда использует индексы так, как вы ожидаете. Вот быстрый чеклист для проверки перед деплоем миграции.
📋 Чеклист по индексам:
1. Cardianlity (Селективность): Индекс по полю
gender (M / F) почти бесполезен. Базе проще прочитать всю таблицу (Full Scan), чем прыгать по индексу, который отсеет всего 50% записей.2. Порядок в составном индексе: Правило «слева направо».
(group_id, status) сработает для WHERE group_id = 5.WHERE status = active.3. Функции убивают индекс:
WHERE YEAR(created_at) = 2026 - индекс по created_at игнорируется.WHERE created_at >= '2026-01-01' - индекс работает.4. LIKE с процентом в начале:
LIKE '%text' - Full Scan. Индекс бесполезен.LIKE 'text%' - Range Scan. Индекс работает.5. Типы данных: Сравнение строки с числом (неявное приведение) может отключить использование индекса.
Совет: Всегда делайте
EXPLAIN (или EXPLAIN ANALYZE) на сложных запросах перед выкаткой. Доверяй, но проверяй.#database #sql #optimization #mysql #postgres
👉 @php_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5💯1