Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.34K photos
20 videos
26 files
4.03K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Приходилось ли вам приукрашивать опыт работы на собеседовании? Ловили ли вас на слове?
#интерактив
🥰1
4 лучших калькулятора памяти MySQL

Почему распределение памяти в MySQL имеет значение?


Распределение памяти в MySQL напрямую влияет на скорость и эффективность работы вашей базы данных, что, в свою очередь, отражается на быстродействии приложений и надежности системы.

Чем могут помочь калькуляторы памяти MySQL?

Калькуляторы памяти MySQL помогают администраторам баз данных определить оптимальные настройки памяти для их MySQL-серверов, учитывая ресурсы системы и специфику использования базы данных.

1. Калькулятор памяти от Александра Авчинникова

Этот онлайн-калькулятор имеет минималистичный интерфейс без каких-либо инструкций. Введите объём памяти вашего сервера и 12 других параметров из вашего конфигурационного файла. Полоса заполняется, визуализируя, какой процент памяти вашего сервера потребляется вашими настройками.

🟢Плюсы: Лёгкость использования, минималистичный интерфейс, отличная визуализация потребления памяти сервера.

Минусы: Нет рекомендаций и инструкций. При необходимости изменений конфигурации, отсутствует понимание их влияния на производительность.

2. Калькулятор памяти MySQL

Этот веб-инструмент предлагает простой интерфейс для ввода значений 13 параметров, связанных с памятью, из вашего файла my.cnf. После заполнения таблицы он предоставляет оценку максимального использования памяти MySQL, ожидаемого от вашей конфигурации.

🟢Плюсы: Показывает значение по умолчанию для каждого параметра MySQL. Удобен для быстрых проверок.

Минусы: Предоставляет только информацию о максимальной потребности в памяти, без каких-либо рекомендаций.

3. Калькулятор памяти Abhinavbit для MySQL

Этот калькулятор памяти MySQL — ещё один простой веб-калькулятор в аналогичном формате. Он запрашивает значения конфигурации для различных параметров. После ввода значений вы узнаете: базовую память, память на одно подключение, общее минимальное и максимальное потребление памяти.

🟢Плюсы: Простой интерфейс, показывает базовую память и память на одно подключение.

Минусы: Не предоставляет рекомендаций или предложений по настройке.

4. MySQLTuner

MySQL Tuner — популярный скрипт, выполняющий всестороннюю проверку состояния вашего сервера MySQL, включая использование памяти. Скрипт запускается напрямую из командной строки, что делает его быстрым в развертывании без необходимости сложной настройки.

🟢Плюсы: Легкость использования с прямыми, понятными рекомендациями. Подходит для быстрых проверок и мгновенных улучшений. Работает с различными версиями MySQL и их форками, такими как MariaDB и Percona.

Минусы: Ограничен анализом существующих конфигураций, а не прогнозированием будущих потребностей в памяти. Может не предоставлять углубленной настройки, касающейся конкретно памяти.
👍6
История успеха автоматизированного перехода с FuelPHP на Laravel для 400k+ строк приложения

Здесь рассказывается о том, как команда мигрировала своё большое PHP-приложение с FuelPHP на Laravel с помощью инструмента автоматического рефакторинга Rector.
👍6😁2🤔1
Отслеживание чего-то, например, просмотров страниц с помощью MySQL может создать значительную нагрузку на производительность при высоком объеме трафика. Redis намного лучше справляется с этой задачей. Вы можете использовать Redis и команду планирования для поддержки синхронизации с MySQL на фиксированный интервал времени.
👍24
Как в PHP очистить память?

В PHP память очищается автоматически после окончания выполнения скрипта. Однако, есть несколько способов управлять памятью для оптимизации работы скрипта:

1. Очистка переменных: Удалив все ссылки на объект или массив, PHP автоматически освободит память, занимаемую ими. Использование функции `unset()` позволяет явно удалить переменную или ее элементы.

2. Освобождение памяти после работы с большими массивами: Для этого можно использовать функцию `unset()` или присвоить переменной пустое значение (`$var = null`), чтобы удалить ссылку на массив и освободить память.

3. Использование `unset()` после работы с объектами: Аналогично предыдущему пункту, нужно удалить ссылку на объект, чтобы очистить память. Если объект был инициализирован с помощью конструктора, то вызов `unset()` может привести к вызову деструктора объекта.

4. Использование `gc_collect_cycles()`: Функция `gc_collect_cycles()` используется для принудительного вызова сборщика мусора, который освобождает память, занимаемую неиспользуемыми объектами и циклами ссылок.

5. Управление памятью экстенсионных функций: Если используются расширения PHP, следует обратить внимание на их документацию, так как некоторые расширения могут предоставлять специальные функции для управления памятью.

Но в целом, в PHP не требуется явно очищать память, так как это автоматически выполняется сборщиком мусора. Однако, правила управления памятью в PHP важно понимать, чтобы написанный код был максимально эффективным и не вызывал утечек памяти.

#вопросы_с_собеседований
👍3
Читаемые end-to-end тесты для PHPStan с помощью bashunit

Статья описывает опыт использования end-to-end тестов в проекте PHPStan, который разрабатывается на языке PHP и предназначен для статического анализа кода. Основной акцент делается на том, как эти тесты реализованы с помощью bash-скриптов и GitHub Actions, а также на преимуществах такого подхода.
👍2
📣 Использование двух помощников в Laravel принесет удивительные результаты...

В этом случае сервис будет вызван и попытается снова. Если он все еще не удастся сработать, об этом будет сообщено, но запрос не упадет.
🥱10🔥3🎉2
PHP 8.4: Новые функции поиска в массиве. Пишем с нуля

В PHP 8.4 планируется добавить новые функции массива: array_find, array_find_key, array_any и array_all, которые являются вспомогательными функциями для общих шаблонов проверки массива на наличие элементов, соответствующих определенному условию.

В настоящее время существует несколько функций, обрабатывающих массивы с использованием обратного вызова. Однако по-прежнему отсутствуют функции для поиска отдельного элемента, соответствующего условию, и тесно связанные функции проверки наличия элементов, соответствующих условию. Реализовать эти функции в среде пользователей относительно просто, но они часто требуются, что приводит к тому, что колесо изобретается снова и снова. Кроме того, функции такого типа реализованы и в других языках программирования, таких как Rust, JavaScript или C++.

Поэтому есть причина включить эти функции в стандартную комплектацию следующей версии PHP. Кроме того, реализация этих функций очень похожа на array_filter и относительно проста в реализации, поэтому затраты на обслуживание должны быть низкими.
👍17🥰6🔥3
Практическое логирование для PHP-приложений с помощью OpenTelemetry

Это самый полный гайд по логированию в PHP с использованием OpenTelemetry
👍4
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
PHP Static Analysis Attributes

Этот пакет позволяет использовать атрибуты вместо аннотаций PHPDoc для статического анализа с помощью PHPStan.
👍61
Что означает сложность алгоритма?

Сложность алгоритма представляет собой меру его эффективности и определяет количество ресурсов, таких как время и память, необходимых для его выполнения.

Существуют два основных типа сложности алгоритма: временная сложность и пространственная сложность.

Временная сложность алгоритма оценивает время, необходимое для его выполнения, в зависимости от размера входных данных. Обычно время выполнения алгоритма измеряется в тактах процессора или в секундах. Примеры временной сложности включают константную сложность O(1) (выполнение за постоянное время), линейную сложность O(n) (выполнение занимает время, пропорциональное размеру входных данных) и квадратичную сложность O(n^2) (выполнение занимает время, пропорциональное квадрату размера входных данных).

Пространственная сложность алгоритма оценивает объем памяти, необходимый для его выполнения, в зависимости от размера входных данных. Обычно пространственная сложность измеряется в байтах. Примеры пространственной сложности включают константную сложность O(1) (не зависит от размера входных данных), линейную сложность O(n) (потребляет память, пропорционально размеру входных данных) и квадратичную сложность O(n^2) (потребляет память, пропорционально квадрату размера входных данных).

#вопросы_с_собеседований
👏3😢1
WeakMaps — скрытая жемчужина в PHP

Компания работает над новой функцией для Flare и столкнулась с задачей оптимизации хранения элементов в массиве. Ранее элементы просто добавлялись в массив, и при превышении лимита удалялся самый старый элемент.

Сложность возросла, когда потребовалось создать структуру узлов (Node), где каждый узел может содержать дочерние узлы и элементы. Для нахождения нужного узла использовался MagicNodeFinder, но при удалении элементов возникли проблемы: не было способа точно определить, в каком узле находится элемент, что приводило к неэффективному обходу дерева.

Решение пришло с использованием WeakMap, нового в PHP 8.0. WeakMap позволяет хранить объекты без увеличения их ссылочного счетчика, поэтому при удалении объекта из памяти, он автоматически удаляется и из WeakMap. Это позволило легко управлять элементами в узлах без необходимости обхода дерева при удалении.

Использование WeakMap улучшило производительность и упростило код. Теперь, когда элемент удаляется из массива, он автоматически удаляется и из WeakMap узла.
👍3🔥21💯1
Анонимные и стрелочные функции: как использовать их вместо create_function в PHP 8

В статье рассказано, как команда проводила рефакторинг кода при переходе с PHP 7.4 на PHP 8 и на что заменили одну из самых популярных функций — create_function.
🌚9🥱5👍4😁2
Сколько раз в неделю вы ездите в офис? Вы бы хотели перейти на удалёнку?
#интерактив
Использование Temporal для эффективного управления жизненным циклом документов

В современном мире важно эффективно управлять большими объемами данных и сложными рабочими процессами. Temporal.io предлагает мощное решение для создания масштабируемых и надежных рабочих процессов. Рассмотрим, как использовать Temporal для управления жизненным циклом документов, обрабатывая изменения документов без перегрузки системы.

Проблема

Представьте, что нужно отслеживать изменения файлов или документов. Эти документы обычно неактивны и не потребляют много ресурсов, пока пользователь не внесет изменения или не загрузит новый файл. В этот момент начинается активная работа системы. Некоторые процессы (например, создание сводок с помощью ИИ) не могут выполняться одновременно с активностью пользователя и должны накапливать изменения или ждать завершения работы.

Решение

Temporal позволяет создавать таймеры и обработчики событий, что помогает управлять сложными состояниями и наблюдать за событиями. Это обеспечивает чистую и последовательную обработку изменений документов без лишней нагрузки на ресурсы.

Шаги реализации:

📋 Предпосылки: Определите основные классы для событий и очередей событий.

🛠️ Создание базового рабочего процесса: Создайте Workflow с методами для сигналов и запуска.

📤 Отправка событий в Workflow: Реализуйте метод для отправки событий в Workflow.

⏱️ Введение таймеров: Добавьте таймеры для более эффективного управления поведением пользователей.

🔄 Продолжение как новый: Реализуйте механизм перезапуска Workflow при достижении лимита истории.

🚀 Продвинутые таймеры и дедупликация: Реализуйте RollingTimer и дедупликацию в очереди для более эффективного управления событиями.
👍3🔥1
💵⚡️ДАРИМ 40 000₽ ЗА ВИДЕО

Конкурс года в «Библиотеке программиста»: смонтируйте короткий вертикальный ролик формата Shorts/Reels* на тему программирования и разработки — лучший автор получит 40 тысяч рублей 🤑

Подробные условия:
➡️смонтируйте короткий смешной вертикальный ролик (можно и нужно использовать мемы)
➡️отправьте нам в бота @ProglibContest_bot
➡️лучшие ролики (по мнению редакции) мы будем выкладывать в канал и в наш инстаграм*
➡️тот, чей ролик соберет больше всего просмотров в инстаграм*, получит приз — 40 тысяч рублей

Какие ролики мы не принимаем:
😟не вашего авторства (проверим!)
😟длинные, невертикальные, несмешные

Таймлайн:
2 августа — заканчиваем принимать видео
⬇️
3 августа — начинаем загружать лучшие видео в инстаграм
⬇️
9 августа — подводим итоги

*Организация Meta признана экстремистской в РФ
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4👍1🔥1🎉1
🆕 JavaScript эволюционирует: новые методы и функции для эффективной разработки

Нововведения нацелены на повышение читаемости и эффективности кода. Рассмотрим, как Object.groupBy, регулярные выражения с V-флагом, Promise.withResolvers и методы мутации массивов решают актуальные задачи программирования.

🔗 Читать статью
🔗 Зеркало
🥱2