PHP Fart Time
1.91K subscribers
119 photos
7 videos
2 files
214 links
Привет, фартаны!

Дурачимся, пилим OpenSource и рассказываем про пердовые технологии в php.

Авторы контента: @roxblnfk и @butschster
Download Telegram
Запасайтесь пивом!
PHP #RandomBeer сегодня в 18:00мск

Место встречи: meethub.ru
🔥115
Друзья, кто не спит, давайте на прямой эфир!
Обзор претендентов на дизайн PHP 8.5 от CutCode+FartTime!
Спонтанный обзор от Алексея Гагарина и меня!
https://www.youtube.com/live/h4gaxrFpp0s
8
Вчера с Даней отсмотрели все дизайнерские работы на конкурс страницы релиза PHP 8.5.
Чтобы не смотреть 2 часа видео, вот мой топ:

1. Работа ben-joostens

Как я понимаю, за основу взята страница релиза PHP 8.4, но с доработками: рамки на блоках кода, расположение, интересная задумка с затенением "старого" кода; по наследству органично вписывается в текущий дизайн php.net.
Немного отделяется последний блок, но это легко можно пофиксить.
В общем, получилась достаточно приятная страница

2. Работа thiagoolivier

Release Page здорового PHPшника. Вся страница пропитана духом бэкенда. Всё чистенько, ни одного лишнего элемента, просто ноль бесполезных свистоперделок, которые часто добавляют по принципу "прикольную штуку нашёл, надо куда-то повесить" или "смари как могу".

Это тупик эволюции того дизайна, который получается у бэкендера или фуллстека, накидывающего веб-морду на коленке с мыслью "самое основное сделаю, а блёстки пусть дизайнер рисует".

Выбрал бы его на первое место, но есть только одно но: есть ощущение, что шапка php.net тут ну ни как не впишется.

3. Работа lumnn
Да, выглядит ужасно и недоделано, как будто пилилось в последние 4 часа: контент с лопаты накидан или вообще недокидан, какие-то эмоджи в шапке...
Вот если убрать 4 кнопки из шапки, отформатировать код, добавить текст и всё, то получится твёрдое третье место.

Но важно в этой работе совсем другое. Автор предложил очень интересную идею, как можно минимальными усилиями освежить весь php.net: банально добавить зумерский градиент, немного подкрутить шрифты и ещё что-то по-мелочи. Главная страница тоже выглядит интересно.


5. Отдельно прокомментирую продвигаемую инфлюенсерами работу от nunowar, которая в моём рейтинге занимает 5-7 место.

Меня поймут те, кто раньше распечатывал интернет-странички в режиме экономии тонера: весь цветно фон пропадал или становился серым; местами ещё продрисью виднелись какие-то элементы; в целом, это получалось как блоки текста, раскиданные по бумаге.

Вот примерно так выглядит светлая тема в этом дизайне.

В тёмной теме лучше: блоки кода, блоки блоков кода и сегменты страницы уже имеют разный фон. Видны текстуры, орнаменты и анимация. Я не падкий на орнамент и анимацию, по мне это лишнее, но пофиг. Пофиг даже на бесполезный блок "PHP is used by the world's leading companies".
Мене здесь не нравится конкретно другое: нельзя просто наложить на сайт синюю плёнку и продвигать это решение как лучшее или современное. Спасибо, что шрифт не голубой, но почему-то в других работах догадались добавить в палитру третий цвет.

Я понимаю, что о вкусах не спорят, но... надеюсь PHP Foundation поступит как в той присказке: "послушай женщину сообщество и сделай наоборот как надо".

Призываю фартанов тоже пощёлкать по работам и поставить лайки понравившимся.
8
Ничего личного, просто #ТоксикСреда
😁324💊3
Оказывается, у нашего канала есть Telegram-подарок!

Спасибо, Тринчик. Этот комментарий — лучший знак признания!
Не сомневайся, мы будем и дальше с тем же усердием делать laravel-workflow.
1😁21🔥62
В блоге PHPStorm опубликована статья про плагины Дмитрия Дерепко.
Среди прочих там упомянут и Buggregator Plugin ❤️

Дима действительно делает много бесплатных и полезных IDEA-плагинов, и круто, что об этом пишут на такой популярной площадке.
Но список в статье не полный: как минимум не упомянуты плагины на Spiral, Infection, Mago и Testo (новый фреймворк тестирования, подробнее тут).

Сколько же их ещё?
Дофига! Можно зайти в этот чат и оценить масштаб трагедии. Чат подходит для репортов багов и предложений по улучшению.

Что с этим делать?
- Если вы хотите в будущем увидеть больше полезных плагинов (например для #Temporal) — можете поддержать Дмитрия на boosty.
- Поставить ⭐️⭐️⭐️⭐️⭐️ на страницах используемых плагинов.
- Зайти в блог и рассказать про ваш опыт использования плагинов Дмитрия и, естественно, Багрегатора. Писать только хорошее! :)

Любая социальная активность влияет на популярность и развитие #OpenSource инструментов. Кто знает, может в будущем JB даже проспонсирует работу Димы, а #Buggregator вытеснит Ray шпателей.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2614
А вот и Podlodka всплыла.

Даты: 1..5 декабря
Тема: «Ускоряем PHP-разработку»

Там и Павел выступать будет (что-то про AI-разработку).

Ай да за билетами!
Промокод PHP_FART в силе! (спасибо, Толик)
18💩63
💀 Как один ORM-запрос съел 300 МБ навсегда

История из нашего проекта: неоптимальный запрос через ORM загрузил ~100К записей из базы. Worker в RoadRunner вырос с 80 до ~500 МБ... и больше никогда не вернулся обратно.

Звучит как утечка памяти? Спойлер: это не баг, а особенность архитектуры PHP.

💡 Неочевидный факт: PHP никогда не возвращает память ОС в long-running процессах


Zend Memory Manager выделяет память большими блоками — чанки по ~2-4 МБ. Когда вы делаете unset($data) или переменная выходит из scope — память освобождается ВНУТРИ PHP, но операционная система об этом не узнаёт.

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

Почему это критично для RoadRunner, Laravel Queue, демонов?

В PHP-FPM каждый запрос = новый процесс, память автоматически очищается. В long-running процессах один worker обрабатывает тысячи задач — и каждый "пик" памяти становится новым baseline навсегда.

Ну а теперь про то, как себя обезопасить от всего этого?
- Использовать батчинг для выборок
- Ограничивать объём данных в памяти в рамках одной операции
- Обрабатывать данные потоково, без загрузки всего набора сразу
- Выносить тяжёлые операции в отдельные функции для автоматического освобождения локальных переменных
- Применять gc_mem_caches() для очистки внутренних пулов, и молиться, что поможет именно в вашем случае)
- Анализировать участки кода, создающие единовременные всплески в десятки МБ. Лучше не игнорировать всплески памяти, надеясь что “само освободится”

Что можно сделать на уровне PHP воркеров:
1. Можно использовать ротацию по количеству задач, например в RoadRunner pool.max_jobs=1000, Laravel Queue --max-jobs=1000. После выполнения 1000 задач, воркер будет перезапущен. Но не стоит полагаться на ротацию как на замену оптимизации, ведь пик может возникнуть в первых же запросах.
2. В RoadRunner — при необходимости включать soft-лимиты по памяти, при достижении которого воркер перезапускается.

Куда ещё может утекать память:
- Статические переменные, накапливающие данные
- Глобальные массивы, в которых растёт состояние
- Singleton-сервисы с неограниченными кешами
- ORM-кеши, которые не сбрасываются
- Списки подписчиков/слушателей, которые не удаляются
- Циклические ссылки объектов друг на друга.
1🔥42🤯109🤔2
Розыгрыш проходок на подлодку 🌈

Для регистрации в конкурсе, нужно:

1. Перейти по этой ссылке с секретным токеном (возможно, потребуется включить ускоритель интернета)
2. Ввести имя своего github-аккаунта
3. Нажать кнопку УЧАСТВОВАТЬ на плашке события "На подлодку!"

Для повышения шанса на победу, нужно всего лишь поставить звёздочки на все репозитории из списка.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🤮53
Forwarded from Open Source: PHP (Dmitrii)
True Async PHP

Edmond Dantes призывает всех к обсуждению особенностей реализации нашумевшего True Async RFC.

Если вы делаете фреймворки или библиотеки, которые работают (или хотелось бы) с асинхронностью; пишите на других языках с поддержкой асинхронности и параллелизма или просто хотите что-то добавить дельного, то заходите в обсуждение.

Чем быстрее закроются все вопросы, опасения и корнер кейсы, тем быстрее PHP начнет нагинать Go!

Цитата Edmond’а:
Итак господа все желающие, приглашаю вас к обсуждению. На текущем этапе считаем, что никакого RFC не было. В теме ключевой вопрос. Он видимо и будет обсуждаться ближайшее время.



👩‍💻 https://github.com/true-async/php-true-async-rfc/discussions/8
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥20🤔5