⏱️ Холивар: php-fpm vs. RoadRunner/Swoole
— Классика или асинхронное будущее? Когда стоит прыгать на event loop, а когда проще оптимизировать nginx и жить спокойно?
💣 php-fpm — надёжно, стабильно, знакомо.
Каждый запрос — новый процесс, каждый процесс — новый цикл. Подходит для большинства проектов, и если твой сайт не собирает миллионы запросов в секунду, то этого вполне хватает. Но в какой-то момент хочется больше: меньше памяти, больше параллельности.
🚀 RoadRunner и Swoole — асинхронность и event loop.
Пишем на PHP, но живём в мире Node.js. И тут начинаются магия, обещания производительности и упрощения кода. Реальный контроль над запросами, событиями и даже воркерами. Но... не для слабонервных.
Нужно тщательно контролировать каждый процесс и не забывать про проблему блокировок и сложность отладки.
🔧 Когда php-fpm всё ещё в деле?
Когда у тебя достаточно мощности, чтобы обрабатывать запросы стандартным способом. Когда настройка nginx уже даёт нужную производительность, и асинхронность не даст тебе явных плюсов. Всё в меру, а главное — проще для новичков и знакомо большинству хостеров.
💥 Когда стоит осваивать event loop?
Когда ты сталкиваешься с задачами, требующими высокой производительности и меньших накладных расходов на обработку большого числа запросов. Сложные WebSocket-соединения, постоянные API-запросы или всякие долгие операции в реальном времени — вот когда RoadRunner или Swoole могут показать свой потенциал.
💬 Выбираешь ли ты php-fpm, чтобы спать спокойно?
Или же ты уже перешёл на асинхронность, готов рисковать и использовать event loop для повышения производительности?
Делись мыслями, кто с кем работает, а кто уже без php-fpm не может жить!
Библиотека пхпшника #междусобойчик
— Классика или асинхронное будущее? Когда стоит прыгать на event loop, а когда проще оптимизировать nginx и жить спокойно?
💣 php-fpm — надёжно, стабильно, знакомо.
Каждый запрос — новый процесс, каждый процесс — новый цикл. Подходит для большинства проектов, и если твой сайт не собирает миллионы запросов в секунду, то этого вполне хватает. Но в какой-то момент хочется больше: меньше памяти, больше параллельности.
🚀 RoadRunner и Swoole — асинхронность и event loop.
Пишем на PHP, но живём в мире Node.js. И тут начинаются магия, обещания производительности и упрощения кода. Реальный контроль над запросами, событиями и даже воркерами. Но... не для слабонервных.
Нужно тщательно контролировать каждый процесс и не забывать про проблему блокировок и сложность отладки.
🔧 Когда php-fpm всё ещё в деле?
Когда у тебя достаточно мощности, чтобы обрабатывать запросы стандартным способом. Когда настройка nginx уже даёт нужную производительность, и асинхронность не даст тебе явных плюсов. Всё в меру, а главное — проще для новичков и знакомо большинству хостеров.
💥 Когда стоит осваивать event loop?
Когда ты сталкиваешься с задачами, требующими высокой производительности и меньших накладных расходов на обработку большого числа запросов. Сложные WebSocket-соединения, постоянные API-запросы или всякие долгие операции в реальном времени — вот когда RoadRunner или Swoole могут показать свой потенциал.
💬 Выбираешь ли ты php-fpm, чтобы спать спокойно?
Или же ты уже перешёл на асинхронность, готов рисковать и использовать event loop для повышения производительности?
Делись мыслями, кто с кем работает, а кто уже без php-fpm не может жить!
Библиотека пхпшника #междусобойчик
Многие генеральные директора мечтают повозвращать сотрудников в офисы и публично готовятся к очередному этапу этого непростого процесса.
Однако, согласно новому опросу, в частных беседах руководители признают, что удаленная работа будет лишь набирать популярность. И в этом есть смысл: такой формат нравится сотрудникам, технологии постоянно совершенствуются, и — по крайней мере, в случае гибридной занятости — производительность, похоже, не страдает.
Удалёнка по восприятию сотрудников равна прибавке к зарплате на 8% и помогает снизить текучку на треть. Новые стартапы изначально выстраивают процессы под гибкие форматы. А в США, где выше уровень управленческих практик и у многих есть возможность работать из дома в комфортных условиях, эта модель особенно хорошо приживается.
А вы как работаете: из офиса, гибридно или полностью удалённо? Что для вас комфортнее?
Библиотека пхпшника #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
WebRTC PHP
Полная реализация протокола WebRTC на чистом PHP! Для использования не требуется Node.js или JavaScript на бэкенде. Однако вам потребуется включенный FFI.
Цель — упростить создание приложений на основе WebRTC на чистом PHP — включая медиа-серверы, веб-приложения для видеоконференций, SFU и peer-to-peer приложения.
🔗 Github
Библиотека пхпшника #инструменты
Полная реализация протокола WebRTC на чистом PHP! Для использования не требуется Node.js или JavaScript на бэкенде. Однако вам потребуется включенный FFI.
Цель — упростить создание приложений на основе WebRTC на чистом PHP — включая медиа-серверы, веб-приложения для видеоконференций, SFU и peer-to-peer приложения.
🔗 Github
Библиотека пхпшника #инструменты
Forwarded from Библиотека собеса по PHP | вопросы с собеседований
Следует ли использовать в методах значение по умолчанию null. Если нет, то почему?
Вопрос о том, следует ли использовать значение по умолчанию null в методах, зависит от конкретного случая и удовлетворения требований вашего проекта.
Если ваш метод принимает параметр, которому обязательно должно быть передано значение, вы должны использовать значение по умолчанию, которое является валидным значением для данного параметра. В таком случае использование null может быть нежелательным, так как это может привести к ошибкам в работе метода или неожиданным поведением.
Однако, если параметр необязательный и может быть опущен, то использование значения по умолчанию null допустимо. Это дает гибкость пользователю функции в выборе использования параметра.
В то же время, использование значений по умолчанию может создавать сложности при отладке и поддержке кода, особенно если вы работаете с большим проектом или командой разработчиков. Вы должны тщательно обдумать, как использование значений по умолчанию влияет на читаемость, понятность и надежность вашего кода.
Вопрос о том, следует ли использовать значение по умолчанию null в методах, зависит от конкретного случая и удовлетворения требований вашего проекта.
Если ваш метод принимает параметр, которому обязательно должно быть передано значение, вы должны использовать значение по умолчанию, которое является валидным значением для данного параметра. В таком случае использование null может быть нежелательным, так как это может привести к ошибкам в работе метода или неожиданным поведением.
Однако, если параметр необязательный и может быть опущен, то использование значения по умолчанию null допустимо. Это дает гибкость пользователю функции в выборе использования параметра.
В то же время, использование значений по умолчанию может создавать сложности при отладке и поддержке кода, особенно если вы работаете с большим проектом или командой разработчиков. Вы должны тщательно обдумать, как использование значений по умолчанию влияет на читаемость, понятность и надежность вашего кода.
⌨️ Топ-вакансий по PHP за неделю
Senior Backend Developer (PHP) — 330 000 — 420 000 ₽ удалёнка (Москва)
PHP разработчик/Backend developer — до 270 000 ₽, Удалёнка (Москва)
PHP Developer — до 450 000 ₽, Удалёнка (Москва)
PHP-разработчик — от 230 000 ₽., Удалёнка
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Senior Backend Developer (PHP) — 330 000 — 420 000 ₽ удалёнка (Москва)
PHP разработчик/Backend developer — до 270 000 ₽, Удалёнка (Москва)
PHP Developer — до 450 000 ₽, Удалёнка (Москва)
PHP-разработчик — от 230 000 ₽., Удалёнка
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
🚀 Нативные уведомления в Laravel desktop-приложении с NativePHP
Добавьте нативные уведомления в своё приложение на Laravel с NativePHP: оповещайте о новых данных, завершении задач и повышайте вовлечённость пользователей — всё через привычный синтаксис Laravel.
Быстрая настройка:
и пример:
👉 Подробнее читайте в статье.
Добавьте нативные уведомления в своё приложение на Laravel с NativePHP: оповещайте о новых данных, завершении задач и повышайте вовлечённость пользователей — всё через привычный синтаксис Laravel.
Быстрая настройка:
composer require nativephp/electron
и пример:
Notification::title('Привет!') ->message('Задача выполнена.') ->show();
👉 Подробнее читайте в статье.
Проблема: необходимо распределить трафик между несколькими серверами, отдавая запросы серверу с наименьшим количеством активных соединений.
Решение: в книге "Nginx Cookbook: Advanced Recipes for High-performance Load Balancing" автор показывает использование директивы least_conn в блоке upstream для выбора сервера с наименьшей нагрузкой.
Пример кода:
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
server {
location / {
proxy_pass http://backend;
}
}
Преимущества:
— Распределение нагрузки на серверы с учётом их текущей загрузки.
— Улучшение производительности за счёт оптимального использования ресурсов.
— Снижение времени отклика для пользователей.
Еще больше полезных книг — в нашем канале @progbook
Please open Telegram to view this post
VIEW IN TELEGRAM
🧹 Автоматический уборщик антипаттернов в PHP
PHP-код должен быть читаемым. И для этого мы подготовили промпт, который мгновенно находит и устраняет то, что делает код запутанным и хрупким.
Промпт не просто ругается — он объясняет, где именно в коде проблема, почему она опасна или неудобна, и как её устранить с помощью конкретных шагов или рефакторинга.
Библиотека пхпшника #буст
PHP-код должен быть читаемым. И для этого мы подготовили промпт, который мгновенно находит и устраняет то, что делает код запутанным и хрупким.
Промпт:You are a seasoned «PHP Cool Developer,» renowned for your ability to identify and eliminate anti-patterns in PHP code. Your expertise lies in spotting duplication, unnecessary nesting, inefficient allocations, and dependency cycles. Your goal is to analyze a given PHP code snippet and provide a detailed report highlighting these anti-patterns, along with concrete suggestions for improvement.
Here is the format you will use to analyze the code and provide your recommendations:
#
Anti-Pattern Analysis
1. Duplication
Description: (Explain if duplication exists, where it is located, and why it's problematic)
Recommendation: (Provide specific code changes or refactoring steps to eliminate the duplication)
### 2. Unnecessary Nesting
Description: (Explain if unnecessary nesting exists, where it is located, and why it's problematic)
Recommendation: (Provide specific code changes or refactoring steps to reduce nesting)
### 3. Inefficient Allocations
Description: (Explain if inefficient allocations exist, where they are located, and why they are problematic)
Recommendation: (Provide specific code changes or alternative approaches to improve allocation efficiency)
### 4. Dependency Cycles
Description: (Explain if dependency cycles exist, which packages are involved, and why they are problematic)
Recommendation: (Provide specific refactoring steps to break the dependency cycle, potentially involving interface extraction or dependency inversion)
## Summary of Improvements
(A concise summary of all the identified anti-patterns and the proposed solutions)
Here is the PHP code you are tasked with analyzing: [ВСТАВЬТЕ ВАШ КОД СЮДА]
Промпт не просто ругается — он объясняет, где именно в коде проблема, почему она опасна или неудобна, и как её устранить с помощью конкретных шагов или рефакторинга.
Библиотека пхпшника #буст
How to: создание MCP-сервера с помощью Symfony
Model Context Protocol (MCP) открывает новые горизонты для интеграции ИИ с внешним миром. Если вы работаете с большими языковыми моделями (LLM), вы наверняка столкнулись с их ограничениями — они не могут напрямую взаимодействовать с внешними сервисами или базами данных. Но с помощью MCP это становится возможным!
MCP позволяет разработчикам добавлять внешние инструменты к LLM, расширяя их возможности и улучшая взаимодействие с пользователем. В этой статье мы расскажем, как с помощью Symfony создать сервер MCP и начать разрабатывать инструменты, которые будут интегрировать вашу модель с реальным миром.
🔗 Читать статью
Библиотека пхпшника #буст
Model Context Protocol (MCP) открывает новые горизонты для интеграции ИИ с внешним миром. Если вы работаете с большими языковыми моделями (LLM), вы наверняка столкнулись с их ограничениями — они не могут напрямую взаимодействовать с внешними сервисами или базами данных. Но с помощью MCP это становится возможным!
MCP позволяет разработчикам добавлять внешние инструменты к LLM, расширяя их возможности и улучшая взаимодействие с пользователем. В этой статье мы расскажем, как с помощью Symfony создать сервер MCP и начать разрабатывать инструменты, которые будут интегрировать вашу модель с реальным миром.
🔗 Читать статью
Библиотека пхпшника #буст
💥 Холивар: Многотенантность — одна база данных или несколько?
Сколько раз вы сталкивались с этим вопросом при проектировании SaaS-приложений или подобных? Один БД или несколько? Давайте разберёмся.
🏢 Одна база данных для всех
Все данные в одной базе, где для каждого клиента создаются отдельные схемы или таблицы.
Плюсы:
🔸 Один сервер, одна база — удобно.
🔸 Меньше затрат на инфраструктуру.
Минусы:
🔹 Проблемы с производительностью при увеличении количества клиентов.
🔹 Сложности с масштабированием и резервным копированием.
🏠 Несколько баз данных для каждого клиента
Каждому клиенту — отдельная база данных.
Плюсы:
🔸 Полная изоляция данных.
🔸 Лёгкость в управлении большими объёмами данных.
Минусы:
🔹 Сложности с миграциями и обновлениями.
🔹 Увеличение затрат на инфраструктуру.
💬 А как вы решаете этот вопрос? Поделитесь своим опытом в комментариях!
Библиотека пхпшника #междусобойчик
Сколько раз вы сталкивались с этим вопросом при проектировании SaaS-приложений или подобных? Один БД или несколько? Давайте разберёмся.
🏢 Одна база данных для всех
Все данные в одной базе, где для каждого клиента создаются отдельные схемы или таблицы.
Плюсы:
🔸 Один сервер, одна база — удобно.
🔸 Меньше затрат на инфраструктуру.
Минусы:
🔹 Проблемы с производительностью при увеличении количества клиентов.
🔹 Сложности с масштабированием и резервным копированием.
🏠 Несколько баз данных для каждого клиента
Каждому клиенту — отдельная база данных.
Плюсы:
🔸 Полная изоляция данных.
🔸 Лёгкость в управлении большими объёмами данных.
Минусы:
🔹 Сложности с миграциями и обновлениями.
🔹 Увеличение затрат на инфраструктуру.
💬 А как вы решаете этот вопрос? Поделитесь своим опытом в комментариях!
Библиотека пхпшника #междусобойчик
Знаете, как при
Ctrl+Shift+F
PhpStorm затирает текущие результаты?Хитрый трюк: нажмите Open Results in New Window, потом правым кликом на таб → View Options → Open Results in New Tab.
🔁 После этого при каждом поиске будут появляться отдельные новые вкладки с результатами.
✅ Так гораздо проще: переключаться между запросами, сравнивать, не терять текущий контекст. Особенно при сложных рефакторингах или поиске across project.
Библиотека пхпшника #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🧠 Asymmetric Visibility в PHP 8.4: Новый способ управления доступом к свойствам
PHP 8.4 представил функцию Asymmetric Visibility, которая позволяет задавать разные уровни видимости для чтения и записи свойств. Это новая концепция, которая, хотя и не получила широкого распространения, имеет огромный потенциал для улучшения инкапсуляции и безопасности данных в приложениях.
🔑 Что такое Asymmetric Visibility?
Теперь можно задавать разные уровни видимости для геттеров и сеттеров свойств. Например, вы можете позволить свойству быть доступным для чтения из внешнего мира, но ограничить его изменение только внутри класса или его подклассов. Это позволяет вам лучше контролировать доступ к внутренним данным объекта.
Вот как выглядит синтаксис:
Пример:
Это означает, что свойство $title можно читать публично (через геттер), но изменять только внутри класса.
⚙️ Как это работает?
В PHP 8.4 вы можете установить видимость для получения (геттера) и изменения (сеттер) свойств отдельно. Например, можно настроить так, чтобы свойство было доступно для чтения всеми, но изменять его могли только методы класса или его наследники. Это улучшает инкапсуляцию, позволяя скрывать внутренние изменения данных, но предоставлять доступ к их чтению.
🔍 Когда это полезно?
Такая возможность особенно полезна в ситуациях, когда необходимо скрыть детали реализации объекта, но при этом предоставить доступ к его состоянию. Например, если нужно разрешить чтение информации, но не позволять её изменять извне, или наоборот — запретить доступ к данным, но предоставить возможность их обновления через методы класса.
⚠️ Ограничения и нюансы:
🔸 Только для типизированных свойств: Ассиметричная видимость работает только с типизированными свойствами.
🔸 Более строгая видимость для сеттеров: Видимость сеттера должна быть такой же или более строгой, чем у геттера.
🔸 Финальные свойства: Если свойство имеет приватный сеттер, оно считается финальным и не может быть переопределено в подклассе.
💡 Почему это важно?
Asymmetric Visibility — это полезный инструмент для повышения гибкости и безопасности данных в приложениях. Он позволяет ограничить возможность изменения состояния объекта, сохраняя при этом доступность данных для чтения. Это помогает минимизировать риски и улучшить архитектуру вашего кода.
👉 Читать статью
PHP 8.4 представил функцию Asymmetric Visibility, которая позволяет задавать разные уровни видимости для чтения и записи свойств. Это новая концепция, которая, хотя и не получила широкого распространения, имеет огромный потенциал для улучшения инкапсуляции и безопасности данных в приложениях.
🔑 Что такое Asymmetric Visibility?
Теперь можно задавать разные уровни видимости для геттеров и сеттеров свойств. Например, вы можете позволить свойству быть доступным для чтения из внешнего мира, но ограничить его изменение только внутри класса или его подклассов. Это позволяет вам лучше контролировать доступ к внутренним данным объекта.
Вот как выглядит синтаксис:
[GETTER_VISIBILITY] [SETTER_VISIBILITY(set)] [TYPE] $propertyName;
Пример:
protected private(set) string $title;
Это означает, что свойство $title можно читать публично (через геттер), но изменять только внутри класса.
⚙️ Как это работает?
В PHP 8.4 вы можете установить видимость для получения (геттера) и изменения (сеттер) свойств отдельно. Например, можно настроить так, чтобы свойство было доступно для чтения всеми, но изменять его могли только методы класса или его наследники. Это улучшает инкапсуляцию, позволяя скрывать внутренние изменения данных, но предоставлять доступ к их чтению.
🔍 Когда это полезно?
Такая возможность особенно полезна в ситуациях, когда необходимо скрыть детали реализации объекта, но при этом предоставить доступ к его состоянию. Например, если нужно разрешить чтение информации, но не позволять её изменять извне, или наоборот — запретить доступ к данным, но предоставить возможность их обновления через методы класса.
⚠️ Ограничения и нюансы:
🔸 Только для типизированных свойств: Ассиметричная видимость работает только с типизированными свойствами.
🔸 Более строгая видимость для сеттеров: Видимость сеттера должна быть такой же или более строгой, чем у геттера.
🔸 Финальные свойства: Если свойство имеет приватный сеттер, оно считается финальным и не может быть переопределено в подклассе.
💡 Почему это важно?
Asymmetric Visibility — это полезный инструмент для повышения гибкости и безопасности данных в приложениях. Он позволяет ограничить возможность изменения состояния объекта, сохраняя при этом доступность данных для чтения. Это помогает минимизировать риски и улучшить архитектуру вашего кода.
👉 Читать статью
Please open Telegram to view this post
VIEW IN TELEGRAM
💻 Подборка новостей по PHP за неделю:
🔹 JetBrains Junie для PhpStorm — новая эра агентных IDE: Junie способен выполнять объёмные задачи самостоятельно, выводя продуктивность на новый уровень.
🔹 Laravel 12.19 — добавлены атрибут
🔹 Filament v4 Beta — переработанный интерфейс, повышенная производительность, больше контроля при создании интерфейсов. Бета-версия уже доступна для тестирования.
🔹 Symfony 16–22 июня — активная разработка Symfony 7.4 и 8.0: добавлена интеграция с FrankenPHP, удаляются устаревшие функции, улучшена гибкость контроллеров.
Библиотека пхпшника #свежак
🔹 JetBrains Junie для PhpStorm — новая эра агентных IDE: Junie способен выполнять объёмные задачи самостоятельно, выводя продуктивность на новый уровень.
🔹 Laravel 12.19 — добавлены атрибут
UseEloquentBuilder
, каст AsFluent
, middleware FailOnException
для очередей, улучшенные тестовые ассерты и другие нововведения.🔹 Filament v4 Beta — переработанный интерфейс, повышенная производительность, больше контроля при создании интерфейсов. Бета-версия уже доступна для тестирования.
🔹 Symfony 16–22 июня — активная разработка Symfony 7.4 и 8.0: добавлена интеграция с FrankenPHP, удаляются устаревшие функции, улучшена гибкость контроллеров.
Библиотека пхпшника #свежак
Forwarded from Библиотека задач по PHP | тесты, код, задания
Каким будем массив $b после выполнения кода?
Forwarded from Библиотека задач по PHP | тесты, код, задания
Каким будем массив $b после выполнения кода?
Anonymous Quiz
52%
$b = array(4, 5, 6, 1, 2, 3 )
13%
Ошибка
21%
$b = array( 1, 2, 3, 4, 5, 6 )
14%
$b = array( 4, 5, 6 )