Фил Ранжин
Я если честно даже не знаю, как он устроен. Просто коробочная штука, которая никогда не создавала мне проблем
Фил Ранжин
Фил Ранжин
сомневаюсь, что на проектах с четырьмя формами это может стать проблемой
Фил Ранжин
А вот с джваой я кстати хлебнул говна - пришлось звать настоящего джависта, чтоб починил
Фил Ранжин
но тоже на немаленьком проекте
Фил Ранжин
Я так понял, основная проблема билда в жс в том, что он собирает не только твой код, но и либы
Vladislav
как то собирал опенсв, после этого полюбил дотнет
Ayrat
Я вот семь лет с шарпами работаю, я ещё не разу не встречал шарписа, который бы специализировался на оптимизации билда дотнета
Ну я не специализировался, но как-то оптимизировал. Удалось уменьшить с получаса билда (на агенте) до 15минут. Локально на машинах разрабов это 3 минуты занимало
Ayrat
агенты послабее
Фил Ранжин
И в чем заключалась оптимизация?
Фил Ранжин
Я вот ещё какой боли с фронтами хлебнул. Мои подчиненный фронтендеры в каждом пуллреквесте обновляют 1-2 либы, и в половине ПРов добавляю новые
Фил Ранжин
Я вот очень нечасто в дотнет проектах обновлял сторонние либы
Фил Ранжин
Да и никто с кем я работал тоже таким не страдал
Ayrat
И в чем заключалась оптимизация?
в мсбилде можно узнать тайминг операций. Удалось узнать что он тратит дохуя времени на рестор одного и того же. Объединил проекты с одинаковыми зависимостями, время уменьшилось. Потом проанализировал граф сборки, много было мест вида a -> b -> c без ответвлений. Это убивает параллелизм сборки. Объединил такие куски графа в один. Там где получались большие проекты пришлось копаться дольше чтобы разделить проект на N независимых чтобы их мсбилд мог билдить параллельно, а не последовательно
Фил Ранжин
хм хм
Ayrat
код не поменялся, а время сборки сократилось в два раза
Фил Ранжин
т.е. ты по сути немножк структуру проекта поменял, нет?
Ayrat
но там было 200 проектов в солюшне, а не 3
Ayrat
было чо объединить
Фил Ранжин
Типа есть сборка, она юзает сборку А, а её юзает сборка Б, и ты делаешь, что сборка Б юзает сборку А директивно
Фил Ранжин
так?
Фил Ранжин
"много было мест вида a -> b -> c без ответвлений" я вот про это
Фил Ранжин
Просто когда фронтендеры говорят про оптимизацию билда - они имеют ввиду наворчачивание зоопарка тулов
Ayrat
Типа есть сборка, она юзает сборку А, а её юзает сборка Б, и ты делаешь, что сборка Б юзает сборку А директивно
не. есть условно сборка А. Её юзает сборка Б. Которую юзает сборка С мсбилд такое билдит последовательно, при том что компилятор вообще-т может работать паралльно (парсинг лексер). Но компилятор бессилен, т.к. его на запустят на проекте Б пока не выполнится сборка проекта А. Косяк Надо использовать и параллелизм компилятора и мсбилда по максимуму. Для начала схлопнем все три проекта в один и получим параллелизм компилятора (он ограничен). Но уже збс Теперь разделим проект на независимые куски чтобы получить чот типа A - \ B - - D C - / и тогда мсбилд сможет параллельно запустить A, B, C, в которых компилятор будет чот делать паралльльно ну и на последок останется маленький проект D, который всё это юзает
Ayrat
короче, надо чтобы было не A -> B -> C а A - \ B - - D C - /
Ayrat
не даром же у нас рязани 32 ядра
Ayrat
пусть работают
Фил Ранжин
Т.е. это явный трейдоф, где продаешь дизайн, а покупаешь перформанс сборки
Ayrat
но при этом проект разъединить ты не можешь
могу, но почти всегда схлопнутый в один проект граф A -> B -> C будет собираться быстрее
Фил Ранжин
Тогда я нихуя не понял
Ayrat
но я ж не остановился и воткнул второй шаг - по разбитию на независимые проекты
Фил Ранжин
Ага
Фил Ранжин
ты схлопываешь в один, чтобы удобней работать было
Ayrat
то есть первый шаг, где схлопывание - да, трейдофф. Но у нас уже будет не 3 последовательных запуска компилятора, а 1, который сразу может параллелить парсинг
Фил Ранжин
И меняешь дизайн так, чтобы у тебя по сути не было посредников в зависимостях
Ayrat
далее мы разбиваем 1 йоба проект на незавимисые чтобы запустить N компиляторов параллельно
Ayrat
И меняешь дизайн так, чтобы у тебя по сути не было посредников в зависимостях
ну не дизайн. В фшарпе гораздо проще такое делать, там нет циклических зависимостей между файлами
Ayrat
надо только по папкам раскидать)))
Ayrat
в сишарпе это около невозможно где всё на всё ссылается
Фил Ранжин
Я кстати все больше убеждаюсь, что это охуенный подход
Фил Ранжин
Я делал di либу для тайпскрипта, которая по сути то же самое гарантировала
Фил Ранжин
но потом вспомнил, что заработаю в сто раз больше, если не буду корпеть над либой, а буду пиздеть на камеру - но это другая история
Ayrat
в целом, сборка 200 проектов за 3 минуты на машине разраба это всё же охуенно
Roman
в сишарпе это около невозможно где всё на всё ссылается
я как-то был на йоба финтех проекте, где с помощью сервис-локатора смогли сделать циклические ссылки между двумя проектами. Как им это удалось — я так и не понял, но распутать не смог. Но почти все остальное распутал. И после этого ушел нахуй с проекта и из компании заодно
Фил Ранжин
в целом, сборка 200 проектов за 3 минуты на машине разраба это всё же охуенно
мда. Вот одна эта фраза - и все фронты, которые придут меня разъебывать убегут из студии в слезах
Ayrat
проектов правда стало 140 (даже с учётом разбиения)
Фил Ранжин
фронтенд проект такого масштаба как не оптимизируй - тут часы пойдут
Фил Ранжин
Еслли тебе оперативы конеш хватит
Фил Ранжин
(спойлер - не хватит)
Roman
мда. Вот одна эта фраза - и все фронты, которые придут меня разъебывать убегут из студии в слезах
если я не ошибаюсь, на одном из предыдущих проектов для билда ангуляровского фронта использовали сервак с 96 гигами оперативы
Фил Ранжин
ахахаха
Фил Ранжин
блядь
Фил Ранжин
я работал в мс над axapta data management framework
Фил Ранжин
Гигантский проект
Фил Ранжин
Страшно большой. С 92-го года пилился
Фил Ранжин
вот у нас тачки для билда были - 32гб
Фил Ранжин
кто-то даже локально работал - правда с 64, чтоб там остальные тулы не мешались
Roman
не, то был молодой проект
Roman
Бэковская часть вполне прилично написана по меркам сишарпа
Roman
фронт на тайпскрипте кстати
Ilya
Надо бы сравнить скорость компиляции фубли и тс.
Roman
как? Написать один и тот же проект на двух технологиях?
Hog
Главное взять ссд и отрубить антивирус на папке сборки. Все эти жонглирования с проектами от лукавого.
Shub
Ебанистерии?
Ей, родимой
Фил Ранжин
Фил Ранжин
они все либы перебилживают
Фил Ранжин
и минифицируют
Ilya
Так оно ж кешируется.
Vasiliy
https://www.youtube.com/watch?v=47L6jUQ7-jk