Мой web-dev
54 subscribers
62 photos
1 video
66 links
Привет, я php-бэкендер, делюсь своими мыслями и наработками
Download Telegram
Сегодня тимлид упомянул очень интересный термин - "гайзенбаг"

Я такое слышал первый раз и полез гуглить. Нашёл на википедии аж целую статью :D
Такой термин не один и у каждого интересное название - https://ru.wikipedia.org/wiki/%D0%93%D0%B5%D0%B9%D0%B7%D0%B5%D0%BD%D0%B1%D0%B0%D0%B3
Так что если хотите блеснуть умом, когда прод горит синим пламенем, то бегом читать!
Async php?

Я тут недавно наткнулся на доклад по асинхронному пхп - https://youtu.be/w75P9RrVgKg
Очень интересно послушать, а самое главное - я наконец-то понял как это может работать, для чего можно применить генераторы и как организовать кооперативную многозадачность в пхп
Понятно, что язык для других целей совершенно и, возможно, стоит подумать, то ли ты делаешь, если решил к таким методам прибегнуть, но знания крайне полезные
@artemmarenkoff жду фотку твоего лица после просмотра :D
Я зачем-то начал ходить по собесам
Оправдываю это тем, что надо понимать где какой уровень и что надо прокачать
Тем не менее, иногда вопросы правда ставят в тупик, хотя не должны бы
Один из них - как работает пхп по протоколу cgi и что это вообще за cgi такой
По сему вот статейка - http://xandeadx.ru/blog/php/866
Очень рекомендую как прочтению как стартовая точка для изучения этой темы
Подошёл к концу мой период хождения по собесам
Никаких выводов пока не сделал, надо думать что делать дальше
Могу сказать только то, что рынок существенно вырос
Но как оказалось и я тоже вырос, хотя такое ощущение, что полгода хернёй занимался)
Потихоньку буду обмозговывать и выкладывать сюда самые интересные знания, вытянутые из собесов

На сегодня у нас мутационное тестирование - https://www.techtarget.com/searchitoperations/definition/mutation-testing
Штука очень спорная, но от того не менее интересная
Если был у кого-то опыт - буду рад послушать)
Оптимизация

Я увеличил скорость импорта прайсов в 3 раза!
Звучит очень круто, да? А теперь reality check: вместо 480 секунд стало 320 секунд😩
Да, результат всё ещё говно, хотя я за выходные всю голову сломал что ещё можно сделать
Чтобы эти цифры выглядели не совсем плохими, поясню, что в файле импорта 37 тысяч записей, которые надо с кучей правил сложить в базу, при этом при появлении дублей по определённым полям, надо распихать значения в другие таблицы, чтобы их не потерять (так требует бизнес)

Итак, что я пробовал и что выгорело:
1. Группировка мелких запросов на апдейт в базу и отправка одним куском
Это снизило время импорта на 1/6 просто потому что теперь вместо 15 запросов теперь уходил 1
2. При нахождении полных дублей не делать запросов вообще
При первичном кодировании этого функционала такой вариант развитий я не учёл; показания скорости после этого разнятся - где-то импорт ускорился в 3 раза, где упал до 0.9

Что я пробовал и что сделало всё только хуже:
1. Вынос функционала по сохранению дублящихся значений в отдельную команду и вызов через MessageBus
Говно идея, скорость импорта упала в два раза на всех позициях просто хотя бы ввиду постоянного создания объекта
2. Страшные sql-запросы, которые upsert'ят запись и тут же обновляют все другие записи, проставляя служебные поля новым айднишником
Это вообще жуть - прайс, грузившийся за минуту стал грузиться 3 и более; причина простая - common table expression + update оставляют в базу в полнейшем шоке и она начинает тупить
Вот как выглядел сам этот страшнючий запрос😄
ВНИМАНИЕ - НЕ ПОВТОРЯЙТЕ ЭТО ДОМА!

Вообще, опыт безусловно охрененный, я люблю циферки и попугаев, поэтому кайфанул знатно от оптимизации, оставляя при этом код читаемым
Ура! Вечер прошёл не зря

Перепробовав всё, я решил поставить везде таймеры и измерять суммарное время выполнения разных участков кода
Оказывается, всё это время 95% времени отнимали простые, блин, селекты в базу

Сделал прослойку, которая прелоадит все имеющиеся позиции прайса, чтобы делать выборку из памяти, а не из базы и всё полетело!
Да, первичный импорт, когда в базе пусто, всё ещё не сильно радует, но повторный, с малым количеством изменённых данных - просто ракета!
Можно спать спокойно, а завтра на дейлике кичиться своими достижениями😊
🤯21
Ловите подборку статей и видосов по пхп, в которых разбираются углублённые вопросы:
1. Потребление памяти
2. Iterable и их перебор
3. Про сбор мусора (каюсь, сам пока не читал)
4. Школа магии
5. Увеличение скорости работы приложения
6. PHP JIT
👍3
Новое начало

Сегодня первый день на новой работе
Ощущения крайне странные, потому что это первый раз, когда весь процесс трудоустройства удалённый - с утра приехал курьер, привёз все доки и ноутбук
Весь день знакомство с командой, различные встречи, выдача доступов
С завтрашнего дня уже начнутся задачи как только доступ в гит выдадут и начнётся веселье
Команда огромная - на дейлике было 25 человек :D
В общем, пока что я прям очень доволен

Вот только когда подписывал доки мельком пробежался по NDA и не уверен, что много могу говорить теперь, вечером договор перечитать бы надо
Наконец-то дочитал "книгу" Артура Пантелеева из чата phpGeeks
Книгой это очень сложно, конечно, назвать - это, скорее, компиляция множества тем, которые должен знать и понимать мидл-разработчик
Иногда, там половина объявленых на странице тем вообще не раскрыта, но это очень хорошая отправная точка по бэкенду
🔥1
Совершенно случайно наткнулся на практический пример применения Fibers из php8.1
Очень рекомендую к ознакомлению, там достаточно хорошо описано какие именно операции имеет смысл заворачивать в файберы и как это правильно делать
Что такое оптимизация?

Вообще, когда пришла задача по оптимизации на 3 неделе работы в компании, то я сначала дико обрадовался, а потом стало страшно. Такие задачи на самом деле что значат? Что ближайшие 3-4 дня ты проведёшь за исследованием кодовой базы на предмет слабых мест, а затем должен будешь оптимизировать эти слабые места, да ещё и так, чтобы хуже не стало. Это по факту подразумевает глубокое понимание внутренней работы системы, чего у меня пока что нет и что придётся получать в экстренном порядке.

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

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

Собственно, мы и подошли к вопросу поста и ответ вроде бы очевиден - снижение нагрузки на систему и снижение времени ответа апишки. Вот только путей достижения этой цели 2:
1. реальная оптимизация - например, минимизация запросов к базе или переписывание целого класса, потому что вся логика помещается в 2 строки
2. мнимая оптимизация - вынос второстепенных синхронных операций в асинх
Мы пока что выбрали второй путь, так как он очевидно проще и его реальный прикладной эффект будет виден пользователям сразу
А вот дальше оказывается на мне уже висят задачи по реальной оптимизации и там я по-полной смогу повес_ел_иться :D
Время пришло

Последнее время крайне остро встал вопрос нехватки оперативной памяти на моём макбуке. Свободной всегда было 1-2 гига, а своп доходил до 19 гигов из-за докера
Решил наконец-то собрать себе обычную печку и переехать на линукс
Камешек - Ryzen 5 7600, 32 оперативы, OS - PopOS
Посмотрим, как пойдёт полёт в ближайшие пару недель, но пока что меня всё устраивает, всё прям очень плавно и круто
Ну и конечно, куда же без rgb :D
Я оказывается совсем забыл, каково это - иметь ПК

Я сегодня весь день провёл, пытаясь оживить абсолютно внезапно умерший bluetooth. Просто вот прихожу с утра и ни мышка, ни клава не подключаются, а в настройках блютус даже включить нельзя - не видит железку.
Я чего только не перепробовал, и биос обновил, и ОС другую накатил, и fastboot вырубил. А знаете как всё решилось? Надо просто было выключить комп, отсоединить питание, ЗАЖАТЬ НА 30 СЕКУНД КНОПКУ ВКЛЮЧЕНИЯ и снова включить комп
Я просто в шоке, честно говоря, после мака, где, сука, всё работает из коробки
Ну ничего, так если в целом посмотреть, то я доволен новым компом :D
На работе задачи никогда не уходят в тестирование, пока их не посмотрит другой разраб (лучше даже не один)
В связи с этим надо как-то благодарить коллег, тратящих своё время на ревью
Не придумал ничего лучше, чем кидать всратые картинки в ответ на апрувы😃
😁5
Отпуск

Съездил в отпуск. Взял за свой счёт, потому что не отдыхал уже 3 года. Вроде как бы круто, море и всё такое, но в следующий раз только вдвоём с женой и не на юг :D
После отпуска пришёл, смотрю - накидана куча задач :( так себе начало работы, НО! Раскидался с ними очень быстро, то есть получается есть абсолютно реальный эффект от отдыха. Кто бы мог подумать :D
В прошлый раз я отдыхал дома, неделю проведя дома за приставкой, как раз ровно 3 года назад. С тех пор и думал, что отпуск бесполезен
В общем, отдыхайте почаще, желательно далеко от дома и от любых дел, которые могут хоть как-то напомнить привычный образ жизни
3🔥1
Недавно озадачился своими скиллами, давно ничего не читал и не изучал
В связи с этим нашёл пару ресурсов, с которых начну снова процесс обучения:
1. Роадмап. Очень обширный, от джуна до сеньёра, с кучей ссылок. Есть ещё вот такой, о нём я уже слышал, тоже много ссылок и много тем
2. До этого мне далеко, но Как и куда расти инженеру, если он уже Senior
3. Интервью по System Design
4. У меня большие проблемы с пониманием шифрования, поэтому - КАК РАБОТАЕТ ШИФРОВАНИЕ? С НУЛЯ ЗА ЧАС
5. Разработка и проектирование высоконагруженных систем
6. Как правильно выбирать очередь
Если у кого-то есть полезные ссылки, то делитесь, буду рад