WeakMaps — скрытая жемчужина в PHP
Компания работает над новой функцией для Flare и столкнулась с задачей оптимизации хранения элементов в массиве. Ранее элементы просто добавлялись в массив, и при превышении лимита удалялся самый старый элемент.
Сложность возросла, когда потребовалось создать структуру узлов (Node), где каждый узел может содержать дочерние узлы и элементы. Для нахождения нужного узла использовался MagicNodeFinder, но при удалении элементов возникли проблемы: не было способа точно определить, в каком узле находится элемент, что приводило к неэффективному обходу дерева.
Решение пришло с использованием WeakMap, нового в PHP 8.0. WeakMap позволяет хранить объекты без увеличения их ссылочного счетчика, поэтому при удалении объекта из памяти, он автоматически удаляется и из WeakMap. Это позволило легко управлять элементами в узлах без необходимости обхода дерева при удалении.
Использование WeakMap улучшило производительность и упростило код. Теперь, когда элемент удаляется из массива, он автоматически удаляется и из WeakMap узла.
Компания работает над новой функцией для Flare и столкнулась с задачей оптимизации хранения элементов в массиве. Ранее элементы просто добавлялись в массив, и при превышении лимита удалялся самый старый элемент.
Сложность возросла, когда потребовалось создать структуру узлов (Node), где каждый узел может содержать дочерние узлы и элементы. Для нахождения нужного узла использовался MagicNodeFinder, но при удалении элементов возникли проблемы: не было способа точно определить, в каком узле находится элемент, что приводило к неэффективному обходу дерева.
Решение пришло с использованием WeakMap, нового в PHP 8.0. WeakMap позволяет хранить объекты без увеличения их ссылочного счетчика, поэтому при удалении объекта из памяти, он автоматически удаляется и из WeakMap. Это позволило легко управлять элементами в узлах без необходимости обхода дерева при удалении.
Использование WeakMap улучшило производительность и упростило код. Теперь, когда элемент удаляется из массива, он автоматически удаляется и из WeakMap узла.
👍3🔥2❤1💯1
Анонимные и стрелочные функции: как использовать их вместо create_function в PHP 8
В статье рассказано, как команда проводила рефакторинг кода при переходе с PHP 7.4 на PHP 8 и на что заменили одну из самых популярных функций — create_function.
В статье рассказано, как команда проводила рефакторинг кода при переходе с PHP 7.4 на PHP 8 и на что заменили одну из самых популярных функций — create_function.
Хабр
Анонимные и стрелочные функции: как использовать их вместо create_function в PHP 8
Привет, Хабр! Меня зовут Виталий Киреев, я руководитель разработки SpaceWeb. В статье расскажу, как мы с командой проводили рефакторинг кода при переходе с PHP 7.4 на PHP 8 и на что заменили одну из...
🌚9🥱5👍4😁2
Сколько раз в неделю вы ездите в офис? Вы бы хотели перейти на удалёнку?
#интерактив
#интерактив
Использование Temporal для эффективного управления жизненным циклом документов
В современном мире важно эффективно управлять большими объемами данных и сложными рабочими процессами. Temporal.io предлагает мощное решение для создания масштабируемых и надежных рабочих процессов. Рассмотрим, как использовать Temporal для управления жизненным циклом документов, обрабатывая изменения документов без перегрузки системы.
Проблема
Представьте, что нужно отслеживать изменения файлов или документов. Эти документы обычно неактивны и не потребляют много ресурсов, пока пользователь не внесет изменения или не загрузит новый файл. В этот момент начинается активная работа системы. Некоторые процессы (например, создание сводок с помощью ИИ) не могут выполняться одновременно с активностью пользователя и должны накапливать изменения или ждать завершения работы.
Решение
Temporal позволяет создавать таймеры и обработчики событий, что помогает управлять сложными состояниями и наблюдать за событиями. Это обеспечивает чистую и последовательную обработку изменений документов без лишней нагрузки на ресурсы.
Шаги реализации:
📋 Предпосылки: Определите основные классы для событий и очередей событий.
🛠️ Создание базового рабочего процесса: Создайте Workflow с методами для сигналов и запуска.
📤 Отправка событий в Workflow: Реализуйте метод для отправки событий в Workflow.
⏱️ Введение таймеров: Добавьте таймеры для более эффективного управления поведением пользователей.
🔄 Продолжение как новый: Реализуйте механизм перезапуска Workflow при достижении лимита истории.
🚀 Продвинутые таймеры и дедупликация: Реализуйте RollingTimer и дедупликацию в очереди для более эффективного управления событиями.
В современном мире важно эффективно управлять большими объемами данных и сложными рабочими процессами. Temporal.io предлагает мощное решение для создания масштабируемых и надежных рабочих процессов. Рассмотрим, как использовать Temporal для управления жизненным циклом документов, обрабатывая изменения документов без перегрузки системы.
Проблема
Представьте, что нужно отслеживать изменения файлов или документов. Эти документы обычно неактивны и не потребляют много ресурсов, пока пользователь не внесет изменения или не загрузит новый файл. В этот момент начинается активная работа системы. Некоторые процессы (например, создание сводок с помощью ИИ) не могут выполняться одновременно с активностью пользователя и должны накапливать изменения или ждать завершения работы.
Решение
Temporal позволяет создавать таймеры и обработчики событий, что помогает управлять сложными состояниями и наблюдать за событиями. Это обеспечивает чистую и последовательную обработку изменений документов без лишней нагрузки на ресурсы.
Шаги реализации:
📋 Предпосылки: Определите основные классы для событий и очередей событий.
🛠️ Создание базового рабочего процесса: Создайте Workflow с методами для сигналов и запуска.
📤 Отправка событий в Workflow: Реализуйте метод для отправки событий в Workflow.
⏱️ Введение таймеров: Добавьте таймеры для более эффективного управления поведением пользователей.
🔄 Продолжение как новый: Реализуйте механизм перезапуска Workflow при достижении лимита истории.
🚀 Продвинутые таймеры и дедупликация: Реализуйте RollingTimer и дедупликацию в очереди для более эффективного управления событиями.
👍3🔥1
Конкурс года в «Библиотеке программиста»: смонтируйте короткий вертикальный ролик формата Shorts/Reels* на тему программирования и разработки — лучший автор получит 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 и методы мутации массивов решают актуальные задачи программирования.
🔗 Читать статью
🔗 Зеркало
Нововведения нацелены на повышение читаемости и эффективности кода. Рассмотрим, как Object.groupBy, регулярные выражения с V-флагом, Promise.withResolvers и методы мутации массивов решают актуальные задачи программирования.
🔗 Читать статью
🔗 Зеркало
🥱2
#дайджест новостей по PHP за неделю:
🔎Версионирование API в Laravel 11 — С выходом Laravel 11 скелет приложения был урезан, чтобы удалить лишние файлы, которые не нужны в каждом проекте. Частью этого изменения стало удаление из исходного кода приложения всех поставщиков услуг, кроме AppServiceProvider.
🔎Built with Laravel — BuiltWithLaravel.com — список компаний и организаций, использующих Laravel в мире, не связанном с Laravel.
🔎PHP 8.4.0 Alpha 2 доступен для тестирования — Команда PHP рада объявить о выходе второго тестового релиза PHP 8.4.0, Alpha 2. Это продолжение цикла выпуска PHP 8.4, примерный план которого указан в PHP Wiki.
🔎Неделя Symfony #916 (15-21 июля 2024 года) — На этой неделе активность разработчиков была медленнее, чем обычно, и была сосредоточена на исправлениях и доработках во всех поддерживаемых ветках.
🔎Версионирование API в Laravel 11 — С выходом Laravel 11 скелет приложения был урезан, чтобы удалить лишние файлы, которые не нужны в каждом проекте. Частью этого изменения стало удаление из исходного кода приложения всех поставщиков услуг, кроме AppServiceProvider.
🔎Built with Laravel — BuiltWithLaravel.com — список компаний и организаций, использующих Laravel в мире, не связанном с Laravel.
🔎PHP 8.4.0 Alpha 2 доступен для тестирования — Команда PHP рада объявить о выходе второго тестового релиза PHP 8.4.0, Alpha 2. Это продолжение цикла выпуска PHP 8.4, примерный план которого указан в PHP Wiki.
🔎Неделя Symfony #916 (15-21 июля 2024 года) — На этой неделе активность разработчиков была медленнее, чем обычно, и была сосредоточена на исправлениях и доработках во всех поддерживаемых ветках.
❤3👍1
Алгоритмы в PHP: Deque (и круговые буферы + связанные списки)
PHP массивы хорошо подходят для многих задач, но операции добавления элементов в начало массива (array_unshift) являются медленными, поскольку требуют сдвига всего массива. Решение для этого проблемы — использование deque (двусторонней очереди).
Очереди и стеки
В программировании, очереди и стеки играют важную роль:
Очередь (FIFO): первый пришел — первый ушел. Работает как очередь в магазине.
Стек (LIFO): последний пришел — первый ушел. Работает как стопка тарелок.
Двусторонняя очередь (Deque)
Deque позволяет добавлять и удалять элементы с обоих концов с эффективностью O(1). Обычно реализуется на основе связанных списков или кольцевого буфера и идеально подходит для реализации функций отмены (undo).
Реализация кольцевого буфера
Для улучшения производительности можно использовать кольцевой буфер, что минимизирует затраты на операции добавления и удаления элементов. Кольцевой буфер использует два курсора (head и tail), что позволяет добавлять и удалять элементы с обоих концов массива.
Добавление элемента в начало буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в начальной позиции, переместить его в конец массива.
🔸Иначе, декрементировать курсор.
🔸Добавить элемент в массив.
Добавление элемента в конец буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в конце массива, переместить его в начало.
🔸Иначе, инкрементировать курсор.
🔸Добавить элемент в массив.
PHP массивы хорошо подходят для многих задач, но операции добавления элементов в начало массива (array_unshift) являются медленными, поскольку требуют сдвига всего массива. Решение для этого проблемы — использование deque (двусторонней очереди).
Очереди и стеки
В программировании, очереди и стеки играют важную роль:
Очередь (FIFO): первый пришел — первый ушел. Работает как очередь в магазине.
Стек (LIFO): последний пришел — первый ушел. Работает как стопка тарелок.
Двусторонняя очередь (Deque)
Deque позволяет добавлять и удалять элементы с обоих концов с эффективностью O(1). Обычно реализуется на основе связанных списков или кольцевого буфера и идеально подходит для реализации функций отмены (undo).
Реализация кольцевого буфера
Для улучшения производительности можно использовать кольцевой буфер, что минимизирует затраты на операции добавления и удаления элементов. Кольцевой буфер использует два курсора (head и tail), что позволяет добавлять и удалять элементы с обоих концов массива.
Добавление элемента в начало буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в начальной позиции, переместить его в конец массива.
🔸Иначе, декрементировать курсор.
🔸Добавить элемент в массив.
Добавление элемента в конец буфера
🔸Проверить, заполнен ли буфер.
🔸Если курсор уже в конце массива, переместить его в начало.
🔸Иначе, инкрементировать курсор.
🔸Добавить элемент в массив.
👍5❤1🔥1🥰1👏1
✍️ «Библиотека программиста» находится в поиске автора на написание книжных рецензий
Кто нужен?
● Энтузиасты (джуны и выше), которые которые разбираются в IT
● Любители книг, которые хотели бы получать деньги за чтение и написание рецензий
● Работаем с самозанятыми (компенсируем налог), ИП
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
✉️ Станьте частью нашей команды — присылайте резюме и примеры работ [email protected]
Кто нужен?
● Энтузиасты (джуны и выше), которые которые разбираются в IT
● Любители книг, которые хотели бы получать деньги за чтение и написание рецензий
● Работаем с самозанятыми (компенсируем налог), ИП
Мы предлагаем частичную занятость и полностью удаленный формат работы — можно совмещать с основной и находиться в любом месте🌴
✉️ Станьте частью нашей команды — присылайте резюме и примеры работ [email protected]
👍2
Forwarded from Proglib.academy | IT-курсы
В 2024 году IT-специалисты остаются на пике популярности. Но стоит ли вам становиться одним из них? Рассмотрим основные аргументы, чтобы понять, стоит ли вам становиться IT-специалистом в нашей статье.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
Golang убивает PHP
В последние годы на рынке наблюдается тенденция к замене PHP на Golang, и многие компании рассматривают возможность переписывания своих проектов с PHP на Golang. Такой подход имеет свои основания, однако каждый язык программирования предназначен для решения определенных задач, и производительность во многом зависит от разработчика, а не от самого языка программирования.
В связи с этим планируется публикация ряда статей, которые будут посвящены особенностям разработки, проблемам, которые необходимо учитывать, а также ролям участников разработки, таким как DevOps-инженеры.
В последние годы на рынке наблюдается тенденция к замене PHP на Golang, и многие компании рассматривают возможность переписывания своих проектов с PHP на Golang. Такой подход имеет свои основания, однако каждый язык программирования предназначен для решения определенных задач, и производительность во многом зависит от разработчика, а не от самого языка программирования.
В связи с этим планируется публикация ряда статей, которые будут посвящены особенностям разработки, проблемам, которые необходимо учитывать, а также ролям участников разработки, таким как DevOps-инженеры.
Хабр
Golang убивает PHP
Последние несколько лет на рынке, по моему сугубо личному мнению, golang вытесняет PHP с рынка, а многие компании считают, что проекты, которые сейчас написаны и работают на PHP должны быть переписаны...
🥱32👍6😁3🔥2👾1
Гайд по Query Scopes в Laravel
В Laravel имеются локальные и глобальные запросные области (query scopes), которые позволяют определять ограничения в запросах Eloquent, делая их повторно используемыми и более читаемыми.
Локальные области запросов необходимо применять вручную, а глобальные области запросов автоматически применяются ко всем запросам модели.
В Laravel имеются локальные и глобальные запросные области (query scopes), которые позволяют определять ограничения в запросах Eloquent, делая их повторно используемыми и более читаемыми.
Локальные области запросов необходимо применять вручную, а глобальные области запросов автоматически применяются ко всем запросам модели.
Laravel News
Learn to master Query Scopes in Laravel - Laravel News
In this article, we're going to take a look at local query scopes and global query scopes
❤4👍1
Как вы используете пагинацию в Laravel?
Laravel предоставляет простой способ постраничной обработки записей базы данных с помощью метода paginate.
В этом примере мы используем метод paginate для получения коллекции пользователей и разбивки результатов на страницы по 10 записей в каждой. Затем мы можем выполнить итерацию по пагинированной коллекции с помощью цикла foreach.
Чтобы отобразить ссылки на пагинацию в представлении, мы можем использовать метод links для пагинационной коллекции.
#вопросы_с_собеседований
Laravel предоставляет простой способ постраничной обработки записей базы данных с помощью метода paginate.
В этом примере мы используем метод paginate для получения коллекции пользователей и разбивки результатов на страницы по 10 записей в каждой. Затем мы можем выполнить итерацию по пагинированной коллекции с помощью цикла foreach.
Чтобы отобразить ссылки на пагинацию в представлении, мы можем использовать метод links для пагинационной коллекции.
#вопросы_с_собеседований
❤5👍1
Как использовать шаблонизатор Laravel Blade в проекте на чистом PHP
Можно интегрировать шаблонизатор Blade из Laravel в проект на чистом PHP. Автор делится пошаговыми инструкциями по реализации этого подхода.
Можно интегрировать шаблонизатор Blade из Laravel в проект на чистом PHP. Автор делится пошаговыми инструкциями по реализации этого подхода.
DEV Community
How to Use Laravel Blade Templating Engine with a Pure Vanilla PHP Project?
Today, I challenged myself to implement a Laravel MVC (Model, View, Controller) approach using pure...
👍7🔥1🌚1
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
В этом видео рассматривается функция whereAny(), которая была выпущена в Laravel 10.47. Это очень элегантный способ захвата данных на основе условного «любой из следующих столбцов»
👾2
Forwarded from PHP jobs — вакансии по PHP, Symfony, Laravel
#дайджест #phpdevjob
Вакансии PHP разработчиков уровня Junior
▪️PHP-программист
Липецк, WL — создание и продвижение сайтов
Подробнее
▪️PHP Laravel/Symfony разработчик
Ульяновск, FrameWork Team — аутсорс-разработка
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️PHP-разработчик
Удаленка, ДосЛаб — разработка ПО
Подробнее
▪️Full-stack developer
Удаленка, Первый Бит — интегратор IT-решений
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️Team Lead
Москва, Драфтер — разработка ПО
Подробнее
▪️PHP-программист
Москва, СИНЬЮС — оперативные новости и аналитические материалы
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии PHP разработчиков уровня Junior
▪️PHP-программист
Липецк, WL — создание и продвижение сайтов
Подробнее
▪️PHP Laravel/Symfony разработчик
Ульяновск, FrameWork Team — аутсорс-разработка
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️PHP-разработчик
Удаленка, ДосЛаб — разработка ПО
Подробнее
▪️Full-stack developer
Удаленка, Первый Бит — интегратор IT-решений
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️Team Lead
Москва, Драфтер — разработка ПО
Подробнее
▪️PHP-программист
Москва, СИНЬЮС — оперативные новости и аналитические материалы
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
lipetsk.hh.ru
Вакансия PHP-программист (junior) в Липецке, работа в компании Интерактивное агентство WL (вакансия в архиве c 9 августа 2024)
Зарплата: от 50000 ₽. Липецк. Требуемый опыт: 1–3 года. Полная занятость. Дата публикации: 06.08.2024.
👍5🤔3🎉1
Привет, друзья! 👋
Мы готовим статью о самых раздражающих вопросах на собеседованиях и хотим узнать ваше мнение! 🤔💼
📌 Какой вопрос на собеседовании вы считаете самым бесящим или нелепым? Почему?
🎭 Как вы обычно отвечаете на вопрос «Расскажите о своих недостатках»? Поделитесь своими лайфхаками!
🚀 Какой самый неожиданный или креативный вопрос вам задавали на собеседовании? Как вы на него ответили?
Ваши ответы помогут другим кандидатам подготовиться к собеседованиям! Самые интересные истории и советы попадут в нашу статью.
Ждём ваших комментариев! 👇😊
Мы готовим статью о самых раздражающих вопросах на собеседованиях и хотим узнать ваше мнение! 🤔💼
📌 Какой вопрос на собеседовании вы считаете самым бесящим или нелепым? Почему?
🎭 Как вы обычно отвечаете на вопрос «Расскажите о своих недостатках»? Поделитесь своими лайфхаками!
🚀 Какой самый неожиданный или креативный вопрос вам задавали на собеседовании? Как вы на него ответили?
Ваши ответы помогут другим кандидатам подготовиться к собеседованиям! Самые интересные истории и советы попадут в нашу статью.
Ждём ваших комментариев! 👇😊
👏1