Laravel под капотом — расширение стандартных возможностей фреймворка
Проблема
FakerPHP поддерживает модификаторы
Изучение механизма
Функция
Решение
Автор предлагает использовать шаблон декоратора, который позволяет добавлять новые возможности к существующему объекту, не изменяя его напрямую.
🔸Создание класса-декоратора
Был создан класс FakerGenerator, принимающий базовый объект \Faker\Generator и добавляющий метод
🔸Интеграция в Laravel
Класс FakerGenerator был зарегистрирован в контейнере через метод
Результат
Теперь вызовы
Проблема
FakerPHP поддерживает модификаторы
valid()
и unique()
, но их нельзя использовать одновременно (например, fake()->unique()->valid()
). Появилась необходимость добавить такую функциональность, не нарушая работы Laravel и не создавая сложностей при обновлении фреймворка.Изучение механизма
Функция
fake()
в Laravel возвращает объект \Faker\Generator
, который создаётся через фабрику и привязывается к контейнеру как синглтон. Это усложняет задачу: нельзя просто заменить объект через наследование, так как это потребует повторной реализации логики фабрики.Решение
Автор предлагает использовать шаблон декоратора, который позволяет добавлять новые возможности к существующему объекту, не изменяя его напрямую.
🔸Создание класса-декоратора
Был создан класс FakerGenerator, принимающий базовый объект \Faker\Generator и добавляющий метод
uniqueAndValid()
. Этот класс также использует трейт Laravel ForwardsCalls
, чтобы проксировать вызовы отсутствующих методов к оригинальному объекту.🔸Интеграция в Laravel
Класс FakerGenerator был зарегистрирован в контейнере через метод
extend()
в провайдере AppServiceProvider. Это позволяет Laravel использовать новый декоратор вместо стандартного генератора при вызове fake()
Результат
Теперь вызовы
fake()->uniqueAndValid()->randomElement()
работают корректно, а все остальные методы генератора по-прежнему доступны благодаря механизму проксирования.👾3❤1
Расскажите об автоматических анализаторах кода PHP
Автоматические анализаторы кода PHP представляют собой инструменты, которые помогают разработчикам обнаруживать потенциальные проблемы, ошибки и несоответствия стандартам кодирования в их PHP-проектах. Они облегчают процесс разработки, улучшают качество кода и делают его более поддерживаемым. Roundcube — это веб-почтовый клиент с открытым исходным кодом, написанный на PHP, поэтому использование анализаторов кода для PHP критически важно для его разработки и поддержки.
Вот некоторые из популярных автоматических анализаторов кода PHP:
PHP_CodeSniffer: Это один из наиболее широко используемых инструментов для проверки соответствия кода стандартам. Он может анализировать код на соответствие различным стандартам кодирования, таким как PSR (PHP Standards Recommendations), PEAR, Zend, и пользовательские стандарты.
PHPMD (PHP Mess Detector): Этот инструмент анализирует код на предмет потенциальных проблем, таких как дублирование кода, сложные условия, избыточная сложность функций и т. д.
PHPStan: Это инструмент статического анализа кода, который помогает выявить ошибки в коде на этапе разработки. Он проверяет типы данных, используемые в коде, и обнаруживает потенциальные ошибки, такие как вызов несуществующих методов или свойств объектов.
SonarQube: Это мощный инструмент для анализа качества кода на множестве языков программирования, включая PHP. Он предоставляет широкий спектр анализов, включая статический анализ, анализ цикломатической сложности, анализ уязвимостей безопасности и т. д.
#вопросы_с_собеседований
Автоматические анализаторы кода PHP представляют собой инструменты, которые помогают разработчикам обнаруживать потенциальные проблемы, ошибки и несоответствия стандартам кодирования в их PHP-проектах. Они облегчают процесс разработки, улучшают качество кода и делают его более поддерживаемым. Roundcube — это веб-почтовый клиент с открытым исходным кодом, написанный на PHP, поэтому использование анализаторов кода для PHP критически важно для его разработки и поддержки.
Вот некоторые из популярных автоматических анализаторов кода PHP:
PHP_CodeSniffer: Это один из наиболее широко используемых инструментов для проверки соответствия кода стандартам. Он может анализировать код на соответствие различным стандартам кодирования, таким как PSR (PHP Standards Recommendations), PEAR, Zend, и пользовательские стандарты.
PHPMD (PHP Mess Detector): Этот инструмент анализирует код на предмет потенциальных проблем, таких как дублирование кода, сложные условия, избыточная сложность функций и т. д.
PHPStan: Это инструмент статического анализа кода, который помогает выявить ошибки в коде на этапе разработки. Он проверяет типы данных, используемые в коде, и обнаруживает потенциальные ошибки, такие как вызов несуществующих методов или свойств объектов.
SonarQube: Это мощный инструмент для анализа качества кода на множестве языков программирования, включая PHP. Он предоставляет широкий спектр анализов, включая статический анализ, анализ цикломатической сложности, анализ уязвимостей безопасности и т. д.
#вопросы_с_собеседований
👍5😁3❤1🌚1
Улучшения библиотеки мониторинга Symfony
За последние несколько месяцев была проведена серьезная работа по обновлению системы мониторинга для разработчиков Symfony. Библиотека мониторинга Symfony занимает второе место по популярности среди клиентов Inspector, уступая только пакету для Laravel.
Поддержка Doctrine 3.x
Новая версия Doctrine, выпущенная в начале года, перешла с SQL-логгеров на новую архитектуру Middleware. Для совместимости в библиотеке был добавлен механизм, который определяет используемую версию Doctrine и автоматически подключает подходящий инструмент: SQL-логгер или middleware.
Сбор шаблонов маршрутов вместо их имен
Ранее библиотека использовала имена маршрутов для мониторинга HTTP-трафика в приложении Symfony. Однако такой подход имел ряд недостатков:
Имя маршрута не является обязательным, что приводило к сбору данных с разнородным форматом.
Игнорирование маршрутов на основе имен было сложным из-за отсутствия четкой структуры.
В случае отсутствия имени маршрута использовался полный URL, включая динамические параметры, что создавало лишний «шум» в данных.
Для решения этих проблем теперь собираются шаблоны маршрутов, такие как
🔸избежать дублирования данных при изменении параметров маршрута;
🔸удобно игнорировать определенные сегменты приложения, например,
Преимущества нового подхода
Использование шаблонов маршрутов упрощает мониторинг и делает данные более структурированными. Теперь разработчики могут легко исключать части приложения из мониторинга, основываясь на предсказуемой структуре URL.
Бесплатное использование Inspector
Inspector — инструмент мониторинга выполнения кода, созданный для разработчиков. Установив пакет Symfony, вы сможете отслеживать HTTP-запросы, анализировать работу базы данных и получать уведомления. Сервис доступен бесплатно, и зарегистрироваться можно на сайте Inspector.
За последние несколько месяцев была проведена серьезная работа по обновлению системы мониторинга для разработчиков Symfony. Библиотека мониторинга Symfony занимает второе место по популярности среди клиентов Inspector, уступая только пакету для Laravel.
Поддержка Doctrine 3.x
Новая версия Doctrine, выпущенная в начале года, перешла с SQL-логгеров на новую архитектуру Middleware. Для совместимости в библиотеке был добавлен механизм, который определяет используемую версию Doctrine и автоматически подключает подходящий инструмент: SQL-логгер или middleware.
Сбор шаблонов маршрутов вместо их имен
Ранее библиотека использовала имена маршрутов для мониторинга HTTP-трафика в приложении Symfony. Однако такой подход имел ряд недостатков:
Имя маршрута не является обязательным, что приводило к сбору данных с разнородным форматом.
Игнорирование маршрутов на основе имен было сложным из-за отсутствия четкой структуры.
В случае отсутствия имени маршрута использовался полный URL, включая динамические параметры, что создавало лишний «шум» в данных.
Для решения этих проблем теперь собираются шаблоны маршрутов, такие как
/users/{id}/profile
, вместо реальных URL. Это позволяет:🔸избежать дублирования данных при изменении параметров маршрута;
🔸удобно игнорировать определенные сегменты приложения, например,
/admin*
, используя символы подстановки в конфигурации.Преимущества нового подхода
Использование шаблонов маршрутов упрощает мониторинг и делает данные более структурированными. Теперь разработчики могут легко исключать части приложения из мониторинга, основываясь на предсказуемой структуре URL.
Бесплатное использование Inspector
Inspector — инструмент мониторинга выполнения кода, созданный для разработчиков. Установив пакет Symfony, вы сможете отслеживать HTTP-запросы, анализировать работу базы данных и получать уведомления. Сервис доступен бесплатно, и зарегистрироваться можно на сайте Inspector.
🥱4
Привет, друзья! 👋
2024-й год подходит к концу, и пока LLM не написали за нас все программы, а квантовые компьютеры не взломали все пароли, самое время подвести итоги.
Какие технологии действительно «выстрелили», а какие не оправдали ожиданий? Что изменилось в работе разработчиков, и какие навыки оказались самыми востребованными?
💻 Поделитесь своим мнением, и самое важное и интересное войдет в нашу статью. 🏆
2024-й год подходит к концу, и пока LLM не написали за нас все программы, а квантовые компьютеры не взломали все пароли, самое время подвести итоги.
Какие технологии действительно «выстрелили», а какие не оправдали ожиданий? Что изменилось в работе разработчиков, и какие навыки оказались самыми востребованными?
💻 Поделитесь своим мнением, и самое важное и интересное войдет в нашу статью. 🏆
👀 Кто бы мог подумать, но WinRAR продаёт 10тыс. лицензий в месяц
WinRAR — легендарный условно-бесплатный архиватор, известный своей бесконечной «ознакомительной» лицензией, которая уже давно стала поводом для десятков мемов.
Несмотря на эту своеобразную щедрость, оказывается дела у его разработчиков идут вполне неплохо. 🌚
WinRAR — легендарный условно-бесплатный архиватор, известный своей бесконечной «ознакомительной» лицензией, которая уже давно стала поводом для десятков мемов.
Несмотря на эту своеобразную щедрость, оказывается дела у его разработчиков идут вполне неплохо. 🌚
🔥19😁5👍4🥰1
Ленивые объекты в PHP 8.4: новая эра эффективной работы с объектами
В PHP 8.4 появилась новая возможность — ленивые объекты. Эта функция позволяет откладывать создание объекта до момента, когда он действительно потребуется. Это особенно полезно для объектов с тяжелой инициализацией, которые могут не понадобиться во время выполнения программы.
Чем ленивые объекты отличаются от обычных?
Обычные объекты создаются сразу, и их конструкторы вызываются при создании. Ленивые объекты работают иначе: вместо создания объекта сразу, они используют прокси, который имитирует исходный класс. Настоящий объект создается только при доступе к его методам или свойствам. Для этого используется рефлексия.
Преимущества ленивых объектов
🔸Улучшение производительности: Объекты создаются только при необходимости, что снижает нагрузку на память.
🔸Простота использования: Ленивые объекты работают как обычные, не требуя изменений в коде.
🔸Оптимизация ресурсов: Особенно полезно в системах, где создание объектов может быть отложено, например, в DI-контейнерах, ORM или при работе с API.
Ограничения
❗️Сериализация: Работа с ленивыми объектами при сериализации может быть сложнее из-за их отложенного состояния.
❗️Усложнение отладки: Прокси-слои могут запутывать стеки вызовов и затруднять анализ проблем.
В PHP 8.4 появилась новая возможность — ленивые объекты. Эта функция позволяет откладывать создание объекта до момента, когда он действительно потребуется. Это особенно полезно для объектов с тяжелой инициализацией, которые могут не понадобиться во время выполнения программы.
Чем ленивые объекты отличаются от обычных?
Обычные объекты создаются сразу, и их конструкторы вызываются при создании. Ленивые объекты работают иначе: вместо создания объекта сразу, они используют прокси, который имитирует исходный класс. Настоящий объект создается только при доступе к его методам или свойствам. Для этого используется рефлексия.
Преимущества ленивых объектов
🔸Улучшение производительности: Объекты создаются только при необходимости, что снижает нагрузку на память.
🔸Простота использования: Ленивые объекты работают как обычные, не требуя изменений в коде.
🔸Оптимизация ресурсов: Особенно полезно в системах, где создание объектов может быть отложено, например, в DI-контейнерах, ORM или при работе с API.
Ограничения
❗️Сериализация: Работа с ленивыми объектами при сериализации может быть сложнее из-за их отложенного состояния.
❗️Усложнение отладки: Прокси-слои могут запутывать стеки вызовов и затруднять анализ проблем.
🤔21👍9❤5🔥3👾2
🧅 Onion: Механизм многоуровневой обработки для PHP-приложений
Onion — это легкий пакет, предназначенный для облегчения многоуровневой обработки данных в приложениях. Он обеспечивает чистый и эффективный способ укладки слоев функциональности, позволяя разработчикам создавать гибкие и многократно используемые компоненты, которые легко компоновать и управлять ими. Каждый слой может выполнять определенную операцию над передаваемыми данными, что упрощает построение сложных рабочих процессов, сохраняя при этом четкое разделение задач.
Onion — это легкий пакет, предназначенный для облегчения многоуровневой обработки данных в приложениях. Он обеспечивает чистый и эффективный способ укладки слоев функциональности, позволяя разработчикам создавать гибкие и многократно используемые компоненты, которые легко компоновать и управлять ими. Каждый слой может выполнять определенную операцию над передаваемыми данными, что упрощает построение сложных рабочих процессов, сохраняя при этом четкое разделение задач.
GitHub
GitHub - aldemeery/onion: A layering mechanism for PHP applications
A layering mechanism for PHP applications. Contribute to aldemeery/onion development by creating an account on GitHub.
🤔2❤1🥰1
Forwarded from Библиотека собеса по PHP | вопросы с собеседований
Расскажите о regexp.
В PHP, регулярные выражения (регэкспы) представлены с помощью функций и операторов для работы с ними. Регулярные выражения представляют собой шаблоны, которые используются для поиска и/или замены текста по определенным правилам. Вот некоторые из основных функций и операторов для работы с регулярными выражениями в PHP:
preg_match(): Эта функция используется для проверки, соответствует ли заданный шаблон регулярному выражению.
preg_match_all(): Похожа на preg_match(), но находит все совпадения в тексте.
preg_replace(): Заменяет все вхождения шаблона регулярного выражения на заданную строку.
preg_split(): Разделяет строку на подстроки с помощью регулярного выражения в качестве разделителя.
preg_quote(): Экранирует все специальные символы в строке, чтобы они могли быть использованы в регулярном выражении без изменения их значения.
Это лишь базовые примеры использования регулярных выражений в PHP. Регулярные выражения очень мощный инструмент, и для их полного понимания рекомендуется ознакомиться с документацией PHP и углубиться в изучение регулярных выражений в целом.
В PHP, регулярные выражения (регэкспы) представлены с помощью функций и операторов для работы с ними. Регулярные выражения представляют собой шаблоны, которые используются для поиска и/или замены текста по определенным правилам. Вот некоторые из основных функций и операторов для работы с регулярными выражениями в PHP:
preg_match(): Эта функция используется для проверки, соответствует ли заданный шаблон регулярному выражению.
preg_match_all(): Похожа на preg_match(), но находит все совпадения в тексте.
preg_replace(): Заменяет все вхождения шаблона регулярного выражения на заданную строку.
preg_split(): Разделяет строку на подстроки с помощью регулярного выражения в качестве разделителя.
preg_quote(): Экранирует все специальные символы в строке, чтобы они могли быть использованы в регулярном выражении без изменения их значения.
Это лишь базовые примеры использования регулярных выражений в PHP. Регулярные выражения очень мощный инструмент, и для их полного понимания рекомендуется ознакомиться с документацией PHP и углубиться в изучение регулярных выражений в целом.
👍6😁1
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
5 способов оптимизации производительности приложений Symfony
Symfony-приложения часто сталкиваются с медленной загрузкой и высокой нагрузкой на сервер. Основные причины — неэффективные запросы к базе данных, недостатки кэширования и не оптимизированные настройки. Вот как это исправить:
Оптимизация запросов к базе данных
Медленные запросы замедляют отклик приложения и создают нагрузку на сервер. Чтобы этого избежать:
🔸Запрашивайте только необходимые данные, а не всю таблицу.
🔸Добавляйте индексы на часто используемые поля.
🔸Используйте более быстрые типы соединений между таблицами, если связь данных гарантирована.
🔸Избегайте лишних запросов при работе с коллекциями данных. Это достигается загрузкой данных заранее.
🔸Обрабатывайте данные партиями, чтобы избежать перегрузки памяти.
Эти меры значительно ускоряют взаимодействие приложения с базой данных.
Кэширование для ускорения работы
Кэширование снижает нагрузку на сервер и ускоряет отклик приложения.
🔸Полное кэширование страниц позволяет сохранять их как статические файлы, чтобы серверу не приходилось каждый раз генерировать одно и то же содержимое.
🔸Кэширование часто используемых данных или запросов уменьшает обращения к базе данных.
🔸Выбор подходящего инструмента для кэширования зависит от потребностей приложения. Например, для локальных серверов подходит APCu, для распределенных систем — Redis.
Кроме того, при обновлении приложения не забывайте очищать и обновлять кэш, чтобы избежать конфликтов и устаревших данных.
Оптимизация настроек Symfony для production
Некоторые изменения в конфигурации позволяют заметно повысить производительность:
🔸В режиме production отключите отладку и сократите количество логов, чтобы снизить нагрузку на процессор.
🔸Включите PHP-кэширование (OPcache), чтобы ускорить выполнение скриптов за счет их предварительной компиляции.
🔸Настройте загрузчик классов, чтобы ускорить процесс запуска приложения.
Эти меры помогают снизить затраты на системные ресурсы и ускоряют загрузку страниц.
Анализ и исправление узких мест
Профилирование помогает выявить скрытые проблемы производительности.
🔸Используйте инструменты мониторинга для анализа ключевых метрик, таких как время отклика, использование памяти, количество запросов к базе данных и эффективность кэширования.
🔸Обратите внимание на самые популярные страницы и функции приложения, чтобы улучшить их в первую очередь.
Применяя эти данные, можно устранить «узкие места», которые тормозят работу приложения.
Управление статическими ресурсами
Эффективная работа с файлами CSS, JavaScript и изображениями значительно ускоряет загрузку страниц.
🔸Уменьшайте размер файлов через минификацию, чтобы ускорить их загрузку.
🔸Объединяйте файлы, чтобы сократить количество запросов к серверу.
🔸Используйте «ленивую загрузку» для изображений и других ресурсов, которые не нужны сразу.
🔸Для хранения и доставки ресурсов применяйте CDN, чтобы снизить нагрузку на сервер.
Эти меры заметно улучшают пользовательский опыт.
Symfony-приложения часто сталкиваются с медленной загрузкой и высокой нагрузкой на сервер. Основные причины — неэффективные запросы к базе данных, недостатки кэширования и не оптимизированные настройки. Вот как это исправить:
Оптимизация запросов к базе данных
Медленные запросы замедляют отклик приложения и создают нагрузку на сервер. Чтобы этого избежать:
🔸Запрашивайте только необходимые данные, а не всю таблицу.
🔸Добавляйте индексы на часто используемые поля.
🔸Используйте более быстрые типы соединений между таблицами, если связь данных гарантирована.
🔸Избегайте лишних запросов при работе с коллекциями данных. Это достигается загрузкой данных заранее.
🔸Обрабатывайте данные партиями, чтобы избежать перегрузки памяти.
Эти меры значительно ускоряют взаимодействие приложения с базой данных.
Кэширование для ускорения работы
Кэширование снижает нагрузку на сервер и ускоряет отклик приложения.
🔸Полное кэширование страниц позволяет сохранять их как статические файлы, чтобы серверу не приходилось каждый раз генерировать одно и то же содержимое.
🔸Кэширование часто используемых данных или запросов уменьшает обращения к базе данных.
🔸Выбор подходящего инструмента для кэширования зависит от потребностей приложения. Например, для локальных серверов подходит APCu, для распределенных систем — Redis.
Кроме того, при обновлении приложения не забывайте очищать и обновлять кэш, чтобы избежать конфликтов и устаревших данных.
Оптимизация настроек Symfony для production
Некоторые изменения в конфигурации позволяют заметно повысить производительность:
🔸В режиме production отключите отладку и сократите количество логов, чтобы снизить нагрузку на процессор.
🔸Включите PHP-кэширование (OPcache), чтобы ускорить выполнение скриптов за счет их предварительной компиляции.
🔸Настройте загрузчик классов, чтобы ускорить процесс запуска приложения.
Эти меры помогают снизить затраты на системные ресурсы и ускоряют загрузку страниц.
Анализ и исправление узких мест
Профилирование помогает выявить скрытые проблемы производительности.
🔸Используйте инструменты мониторинга для анализа ключевых метрик, таких как время отклика, использование памяти, количество запросов к базе данных и эффективность кэширования.
🔸Обратите внимание на самые популярные страницы и функции приложения, чтобы улучшить их в первую очередь.
Применяя эти данные, можно устранить «узкие места», которые тормозят работу приложения.
Управление статическими ресурсами
Эффективная работа с файлами CSS, JavaScript и изображениями значительно ускоряет загрузку страниц.
🔸Уменьшайте размер файлов через минификацию, чтобы ускорить их загрузку.
🔸Объединяйте файлы, чтобы сократить количество запросов к серверу.
🔸Используйте «ленивую загрузку» для изображений и других ресурсов, которые не нужны сразу.
🔸Для хранения и доставки ресурсов применяйте CDN, чтобы снизить нагрузку на сервер.
Эти меры заметно улучшают пользовательский опыт.
🥱5👍4
Пример HTTP-сервера на PHP с использованием файберов
PHP часто подвергается критике за отсутствие встроенных возможностей для создания конкурентных приложений. В версии 8.1 был добавлен класс
PHP часто подвергается критике за отсутствие встроенных возможностей для создания конкурентных приложений. В версии 8.1 был добавлен класс
Fiber
, который, согласно RFC, должен упростить создание конкурентных приложений. Однако, материалов, демонстрирующих использование данного функционала для построения приложений практически нет, напротив, говорится, что файберы — это функционал, предназначенный для использования разработчиками фреймворков и приводятся какие-то малоинформативные отрывки кода. В этой статье будет продемонстрирован концептуальный пример конкурентного приложения на PHP с использованием файберов.Хабр
Пример HTTP-сервера на PHP с использованием файберов
Платформа PHP часто подвергается критике за отсутствие встроенных возможностей для создания конкурентных приложений. В версии 8.1 был добавлен класс Fiber , который, согласно RFC , должен упростить...
👍8🔥1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Защита от CSRF в PHP
Подделка межсайтовых запросов (CSRF) — это уязвимость веб-безопасности, позволяющая злоумышленнику обманом заставить аутентифицированного пользователя выполнить нежелательные действия на сайте, на котором он в данный момент находится под своим логином. Атака осуществляется путем злоупотребления доверием сайта к браузеру пользователя.
Подделка межсайтовых запросов (CSRF) — это уязвимость веб-безопасности, позволяющая злоумышленнику обманом заставить аутентифицированного пользователя выполнить нежелательные действия на сайте, на котором он в данный момент находится под своим логином. Атака осуществляется путем злоупотребления доверием сайта к браузеру пользователя.
DEV Community
CSRF Protection in PHP
What is CSRF? Cross-Site Request Forgery (CSRF) is a web security vulnerability that...
👍2
#хочу_спросить
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
❤1
Большой пополняемый список знаний, в который включены теории, законы, принципы, паттерны разработки и многое другое, что однозначно будет полезно знать каждому разработчику.
GitHub
GitHub - dwmkerr/hacker-laws: 🧠 Laws, Theories, Principles and Patterns for developers and technologists.
🧠 Laws, Theories, Principles and Patterns for developers and technologists. - dwmkerr/hacker-laws
👍3
Как передаются переменные (по значению или по ссылке)?
В PHP переменные могут передаваться как по значению, так и по ссылке.
По умолчанию, в PHP переменные передаются по значению. Это означает, что когда переменная передается в функцию или присваивается другой переменной, создается ее копия, и любые изменения, сделанные внутри функции или на другой переменной, не влияют на оригинальную переменную.
Однако, PHP также предоставляет возможность передавать переменные по ссылке, используя символ '&' перед переменной при ее передаче в функцию или присваивании другой переменной. Когда переменная передается по ссылке, функция или другая переменная работают с тем же экземпляром переменной, и изменения внутри функции или на другой переменной отражаются на оригинальной переменной.
#вопросы_с_собеседований
В PHP переменные могут передаваться как по значению, так и по ссылке.
По умолчанию, в PHP переменные передаются по значению. Это означает, что когда переменная передается в функцию или присваивается другой переменной, создается ее копия, и любые изменения, сделанные внутри функции или на другой переменной, не влияют на оригинальную переменную.
Однако, PHP также предоставляет возможность передавать переменные по ссылке, используя символ '&' перед переменной при ее передаче в функцию или присваивании другой переменной. Когда переменная передается по ссылке, функция или другая переменная работают с тем же экземпляром переменной, и изменения внутри функции или на другой переменной отражаются на оригинальной переменной.
#вопросы_с_собеседований
👍13🥱3