Объясните, почему мой рокет-саенс бэкенд билдится пару секунд, а четыре формы на фронте — полгода

    На прошлой неделе мне удалось невозможное — я уговорил родителей забрать моих детей на все выходные. Если у кого-то из вас есть несколько мелких, вы должны понимать, какое счастье на меня свалилось. Я уже предвкушал лучшие два дня в своей жизни — но семейная жизнь не ограничивается проблемами от детей. Я проводил мало времени с женой последнее время — и был приговорен к выходным в загородном эко-отеле. Тут надо сказать, что я идиот — единственный в мире разраб, у которого нет ноута, поэтому если я уезжаю из дома, то могу попрощаться с любыми планами поработать, или вообще поделать что-то значимое, потому что телефон для меня — не инструмент.

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

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

    Проблема идиотов в том, что они не понимают сути происходящего, просто копируют действия умных людей, и результат разочаровывает. Вот так и у меня — по дороге домой я получил смс-ку, что доставка ноута затягивается, и мне придется подождать ещё пять дней. Но я все выходные жил идеей получить ноутбук, и ждать был не готов. Так что взял самое лучшее, что было в наличии — весьма среднюю машинку, с гигантским недостатком — 8гб оперативы. Но. Есть ещё один слот, можно будет расширить до 16-ти. 

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

    Но проблемы начались — потому что кто-то когда-то допустил фронтендеров к разработке ПО. 

    Смотрите, я запускаю ноут, на нем начинает крутиться операционка, со всеми своими службами и драйверами. Дотнет, студия, райдер, плеер, почтовый клиент, FIFA18, проводник, телега. И это все — 20% моей оперативы. А потом я запускаю интерпретаторы и исполнители js. 80+ % оперативы. Браузер, нода, вскод. Три приложения, которым я дал одно простое задание — отрендерить формы и интерпретировать жс в них. Двумерные, простые формы, без физики.

    Оказывается, мой современный ноут за 80 кусков недостаточно хорош для этого. С пустяками вроде трехмерного футбола с очень серьезной физикой и графикой, мощным ИИ, и очень серьезными расчетами в реальном времени ноут справляется. Но футбол — это херня собачья. Вот двумерные формы — это именно та штука, на которую я должен всрать всю свободную память.

    Давайте так — я нихрена не эксперт в производительности, я очень слабо себе представляю, как отличается программирование операционной системы от создания штуки вроде Node.js — на мой дилетантский взгляд ОС решает гораздо более сложные и ресурсоемкие задачи, но хрен с ним. Нода у меня билдит код, который я написал на тайпскрипте. Но у меня ещё есть код, который я написал на сишарпе — его билдит, запускает и исполняет дотнет. Почему он жрет в десятки раз меньше памяти? Дотнет что, решает более простые задачи? Или может он медленнее? Меньше функциональности? Хер там плавал. 

    Тут мне хватает опыта, чтобы оценить — студия и дотнет решают не меньше задач, чем вскод с нодой. Зато работают намного, намного быстрее, и куда функциональнее. Но почему тогда им хватает горстки ресурсов, а жс окружение сходит с ума на машине, которая стоит три среднемесячных зарплаты в этой стране?

    У меня гигантейший бекенд проект, и к нему малюсенький фронтендик — на четыре формы. Я делаю фичу — вношу изменения в кодовые базы обоих проектов. Когда изменения внесены — надо билдить. Я нажимаю f5 в райдере, альтабаюсь на вскод — и когда вижу перед собой стройные ряды typescript кода, получаю десктопную нотификацю: "build succeed". Все.

    Теперь билдим фронтенд — тут с f5 не получится, надо открыть консоль и ввести ЭнПиЭм команду. Я прогер, я умею печатать, и легко справляюсь. Комп начинает шуметь. Конечно, мы же решаем сложнейшую задачу — превращаем один жсный говнокод в другой — поменьше — для оптимизации. Это, конечно, надолго — четыре формы все-таки. 

    Просто сидеть и ждать за компом сил нет, поэтому решаю убить время и заварить кофейку. Я довольно ленив — путь на кухню со второго этажа на первый представляется для меня как целая экспедиция на южный полюс, поэтому несколько минут я сижу, туплю и собираюсь с силами. Вот почему так? Если бы кухня была со мной на одном этаже — пусть хоть в два раза дальше — дойти бы не было такой проблемой. Но чертовы лестницы! Физикам надо как следует приглядеться, не происходит ли там каких-то временных и гравитационных искажений.

    Я все-таки доплелся до кухни, но ощущение было такое, что рабочее место я покинул уже в прошлой жизни. К сожалению, шикарная жизнь программиста приучила к хорошему кофе, и тут важен обстоятельный подход. Записывайте:

    • Нужно высыпать из кофемолки среднепрожаренную бурду, которую пьет жена

    • Достать нужные зерна из специальной непроницаемой баночки, 

    • Засыпать в кофемолку, 

    • Выставить верный помол, включить её, 

    • Тщательно промыть френч-пресс. 

    • Пока чайник кипит, нужно держать френч под горячей водой — чтобы холодные стенки не остудили кипяток

    • Быстро ошпарить огромное количество молотого кофе. 

    • Заливаем, и пока заваривается, ставим кружку с молоком в микруху — нельзя, чтобы молоко остудило напиток. 

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

    Прошелся по двору, вернулся на кухню. Тут запишите еще пункт:

    • Пара ложек тростникового сахара, тщательно размешиваем. 

    Меееедлено, чтобы не пролить не капли на новый ковер, я пополз обратно наверх с наполненной до краев кружкой. Добрался через пару световых лет до ноута, очень медленно поднял ноут одной рукой — тяжелый, падла. Все-таки пролил пару капель кофе, но не на ковер, а на плитку —  в стотысячный раз благодаря Господа нашего, что дал мужчинам носки — изящное движение ноги, и следы преступления исчезают. Усаживаемся, ставим кофе рядом с собой, ноут на ноги, смотрим в экран —

    А билд ещё идет. Четыре формы, сынок.

    Я вот сам не строил инструменты вроде ноды. Такие важные инфраструктурные штуки — удел умных ребят со степенями, которые изучали сложные науки, пока я бухал в универе. Моей экспертности недостаточно, чтобы аргументированно объяснять — фронтендеры должны шлепать формы, им нельзя разрешать делать серьезные проекты со сложной логикой и алгоритмами. 

    Но. Но. Есть известная проблема с сектами и теориями заговоров. Когда смотришь на них снаружи, ты такой — ну это же полная чушь. Они отбитые, опасные идиоты. Ни один человек, у которого есть хотя бы одна нейронная связь, не станет верить в плоскую землю. Нейронные связи есть у всех людей, и даже самые тупые из нас — все ещё достаточно умны, чтобы не верить в этот бред. При этом последователи сект и теорий заговора многочисленны и сильны. Так происходит потому, что люди в какой-то момент уходят от мышления в общем, и начинают мыслить частностями — тогда учение о плоской земле перестает быть очевидным абсурдом, и становится стройной цепочкой логичных и цельных умозаключений. Она разлетится в щепки, как только ты попробуешь взглянуть на ситуацию целиком, но ирония в том, что ты не захочешь — и твое учение научит тебя презирать и гнать палками всех глупцов, которые вздумают предлагать такое.

    Все инженеры мира смотрят на херотень, которую фронтендеры называют своим туллингом, и говорят — да это же говно собачье! Оно не работает, оно жрет слишком много ресурсов, оно решает только те проблемы, которые само же и создает. Это самый худший способ решения проблемы, который только можно себе представить. Вы, блин, переизобрели тысячу вещей, которые отлично справлялись со своими задачами, и сделали это жутко некачественно, и только продолжаете себя хоронить. Но приходят фронтендеры, и объясняют, что мы ничего не поняли.

    Они придут и сюда. Они скажут, что вообще-то есть хот-релоад, чтобы не перебилживать проект. Они скажут, что вскод можно настроить так, чтобы билдилось по нажатию f5, скажут, что у меня не та версия ноды, и не тот ноут. Что на самом деле тот факт, что у меня на рабочей машине одновременно работает 4! клона сиплисплюсного кода, который интерпритирует жс — это отличный подход. Они вообще много чего скажут — все что угодно, лишь бы не переделывать свое дерьмо. 

    А я скажу вот что. Я отвалил штуку баксов за комп, и пока писал эту статью — у меня четыре раза свалился вскод — потому что выжрал всю память. И вот я ее дописал 

    А билд ещё идет. Четыре формы, сынок.


    На правах рекламы

    Эпичные серверы - это мощные серверы на базе новейших процессоров AMD EPYC. Частота процессора до 3.4 GHz. Максимальная конфигурация - 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe!

    VDSina.ru — хостинг серверов
    Серверы в Москве и Амстердаме

    Комментарии 349

      +27

      А надо было подождать всего пять дней.

        +26
        Причем в идеале — сделать это вместо публикации статьи.
          +1

          Да, тут у автора, совпадение? — не думаю… С ноутом как и с кофе — отборные зерна, спец помол, температура и чистота воды и… ФРЕНЧ Пресс!!!)) сколько не пил кофе из пресса — это изврат… И бычками потом жижа воняет. Может не слишком отборный сорт кофе?

          +27
          а где линк на код? или по кофейной гуще гадать чего там билдиться так долго?
            +20

            С линком не такая статья интересная.

              0

              Главное сильной (или слабой?) прожарки.

                +6
                Фиг с ним с линком, где фирменная КДПВ с кодом на тёмном фоне?
                  +1
                  Слишком многие фишку просекли. Что то новое придумывает теперь видимо. F# в тегах тоже теперь отсутствует.
                  +6
                  Есть линк на хостинг серверов, ради этого статья и писалась. Какие еще линки тут нужны?
                  +16

                  Старый ноут (ему 4года) I56300U, 16GB, SSD + Всякая гадость которая его мониторит от компании, проект на 961,713 byte — реакт + тайпскрипт, билдится с нуля где то секунд 90. В HMR режиме — около 2 секунд.


                  Возможно нужно сначала разобраться с инструментарием, а потом искать тему для хайпа?

                    +4
                    «961,713 byte» это же где-то примерно чуть меньше килобайта, если, конечно, я верно понял

                    И оно билдится «всего» 90 секунд?
                      +2

                      961713/1024 = 939 KB, если я не все забыл конечно.
                      На диске это 1.25 MB.

                        +9
                        Запятая смутила немного, извиняюсь.

                        Всё равно, проект весом около мегабайта билдится 90 секунд?
                        Это размер исходников или уже опубликованного продукта?
                        Я конечно понимаю, что SLOC это плохая метрика, но сколько строк в таком проекте, хоть приблизительно для восприятия масштаба?
                          +1

                          Это исходники.
                          В билд входит транспайлинг из tsx + линтинг + преобразование SCSS в scoped CSS + еще кое что по мелочи.
                          SLOC — ~10k, 188 файлов.

                            +19

                            У меня Gradle за столько 100к строк джавового кода для Android билдит, и я думаю, что это долго, а ту 10к. Как-то грустно.

                              0

                              Проблема в том, что проект собирается не только из моих несчастных 1mb но и огромной кучи мелких файлов, вот и выходит не быстро.

                                +47
                                «Они вообще много чего скажут — все что угодно, лишь бы не переделывать свое дерьмо.» (с)
                                  0

                                  Самый лучший аргумент.

                                    –5
                                    «Они вообще много чего скажут — все что угодно, лишь бы не переделывать свое дерьмо.»
                                    Автор этим пользуется, значит это и его дерьмо.
                                      0
                                      Он не просто этим пользуется, он что-то такое написал, что оно так долго компилится… И виноваты какие-то фронтендщики, они же его под дулом пистолета заставляли использовать это все))
                                  +1
                                  Вот только вам ведь после каждого изменения кода нужно заново билдить проект? А у нас HMR за секунду и даже состояние инпутов сохраняется.
                                    +2

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

                                      +2
                                      Я как раз нашёл старый проект — виндовую софтину на Delphi, начала 2000-х, там примерно полтора мегабайта чистых исходников, не считая всякой бинарной байды. Как раз скачивается апдейт на Visual Studio, время есть, решил собрать. Установил Delphi 7. Ну как установил — запустил инсталлятор, в это время там студия что-то спросила, я переключился, ответил, вернулся обратно, а установка Delphi уже закончилась.
                                      Так вот, запустил билд проекта, собрался за пару секунд.
                                        +1
                                        В те времена еще умели сражаться с драконами.
                                          0
                                          Следы древней, высокоразвитой цивилизации.

                                          Я недавно, на одном стройобъекте по надобности ненадолго сел за компьютер прораба: давно пожелтевший системник, принтер вроде HP1005, процессор примерно Pentium 1600, внутри Word 2003 для печати документов, эксель для заполнения ежедневных отчетов, и кажется Nanocad для чертежей.

                                          Так вот, вся эта археология работает быстрее и отзывчивей, чем моя рабочая система, с NVME, Ryzen, 16Gb и последними версиями Autocad.
                                    +8

                                    А зависимости в node_modules посчитали?

                                      +3

                                      Нет, просто сделал npx soc ./src. Но какая разница, с аргументом уровня


                                      Они вообще много чего скажут

                                      Не поспоришь.

                                        +1
                                        Дык и в java-проектах на maven/graddle тоже есть зависимости. И в C# тоже пакетики с зависимостями есть.
                                          +3

                                          Дык в бинарничках же?

                                            0
                                            Дык а у фронтендеров почему не в бинарничках?
                                              0

                                              Дык браузер скотинка такая не кушает бинарнички… Такие дела :(

                                                +1
                                                Ну вот Вы сами признали несовершенность фронтенда. Все ведь на поверхности лежит.
                                                  –1

                                                  А я говорил что он совершенен? Где?


                                                  Все что я говорил, что автор не разобрался в инструментарии а пошел писать на хабр. Хотя теме место на стековерфлоу.


                                                  Понятно что фронт не совершенен. И бэк тоже не совершенен, и даже рыбалка не совершенна. Но я же не иду на форум рыболовов с криками я купил супер удочку а у меня руки устают ее деражть?

                                                    0
                                                    Не знаю говорили ли об этом Вы, но об этом говорит автор, к которому Вы стоите в оппозиции, и в этом случае он как никогда прав. Фронтент имеет серьезные фундаментальные недостатки, которые при всей их очевидности, к сожалению, никем не исправляются. Это не значит, что нужно прекратить зарабатывать на нем деньги — но давайте хотя бы не будем делать вид, что все в порядке и нужно просто разобраться в инструментарии.
                                                      +1

                                                      Да кто вам сказал что они не исправляются?


                                                      Вот, например появился WASM который позволяет отправлять в бразуер бинарники (инструментария не так много пока что но процесс идет).


                                                      Появился Дено решающий проблемы с типизацией "из коробки" + всякие полезные права на исполнение.


                                                      Появился Parcel для тех кто не смог/не захотел в вебпак.


                                                      И так далее. Но об этом же знать надо, гораздо проще написать вы фронтендщики говно!

                                                        –1
                                                        Вот WASM как раз очень наглядно демонстрирует что именно нужно производителям браузеров. Вместо того что бы взять LLVM и встроить ее в браузер… давайте придумаем свою абсолютно новую виртуальную машину (ну и что, что медленную), и код будем передавать в виде синтаксического дерева, пусть клиентские девайсы каждый раз при загрузке скрипта его в байткод переводят, а то ведь им заняться нечем. И плевать, что скорость WASM'а лишь слегка больше чем у Javascript'а (естественно, в этом отчасти виновата скорость V8) — главное, что стандарт получился настолько сложный, что конкурентам Chromium и Gecko только повеситься остается.
                                                        гораздо проще написать вы фронтендщики говно!
                                                        Я не писал что фронтенд-программисты говно — собственно, я так и не считаю. Но технологии фронтенда — объективно полный отстой.
                                                          +1
                                                          Вместо того что бы взять LLVM

                                                          Напомнить что произошло с Flash, Java Applets и Unity Web Player, который "просто встроили в браузер"? Я напомню:


                                                          1. они были постоянно дырявыми, и по факту просто были дырками
                                                          2. они были привязаны к конкретному производителю
                                                          3. они не управлялись программистами, а были костылём который был приколочен рядом
                                                          4. если у пользователя что-то случалось, то цепочка виновных была: сайтостроитель, производитель браузера, операционной систем и только потом производитель плагина. Просто потому что так оно видно для пользователя.

                                                          И хоть сейчас и очень заметна монополизация гугла, веб всё равно остаётся областью паритета нескольких сил. Не было бы этого паритета был бы Apple и тот же Гугл со своими 30%.


                                                          Я для себя смирился с достаточно простой мыслью: веб это общественнозначимая помойка. И именно поскольку она общественно значимая её будут охранять от vendor lock'а и государства, и сами компании. Но общественное не может быть одновременно хорошим и удобным. Потому что нужно учитывать общее мнение и не может быть Сталина, который стукнет кулаком по столу и отменит поддержку es3 или html.


                                                          технологии фронтенда — объективно полный отстой

                                                          Да, потому что это наследие. Потому что люди когда придумывали эти технологии они совершенно не думали о проблемах, которые эти технологии будут решать через 20-30 лет. Вспомним хотя бы первые сети, которые не предусматривали шифрования, потому что никому в голову не приходило, что в сети могут пустить домохозяек и хакеров.

                                                            0
                                                            Как с silverlight? По идее сейчас бы это был многоплатформенный opensource продукт.
                                                              +1
                                                              Напомнить что произошло с Flash, Java Applets и Unity Web Player, который «просто встроили в браузер»?
                                                              И ведь Вы не назвали ни одной технической причины. Ну что, принципиально невозможно сделать плагин недырявым? Или может в особенном фронтенде без привязки к одному производителю никак?
                                                              Да, потому что это наследие. Потому что люди когда придумывали эти технологии они совершенно не думали о проблемах, которые эти технологии будут решать через 20-30 лет.
                                                              Да я согласен, что обвинять отцов-основателей бессмысленно. Но сейчас всеми стандартами веба руководит вполне конкретная небольшая группа монополистов, и о своей монополии они заботятся куда больше, чем о каком-либо развитии.
                                                              0
                                                              и код будем передавать в виде синтаксического дерева

                                                              Вообще-то код на WASM передаётся в бинарном виде.

                                                            0

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


                                                            Ну это уже давно обсуждали тысячу раз. Есть вещи для которых определённый подход хорошо, есть для которых плох. То что сейчас веб переживает проблему роста не значит что он говно. Это значит что сейчас люди наберутся злости и произойдёт что-то ещё новое. Тот же wasm является ступенькой к этому новому. Не само новое, а ступенькой к нему.


                                                            То что у автора есть проблемы и он огульно поливает грязью целую индустрию без доказательств говорит только о его "профессионализме". Вот только пользы от этого нет. Проблемы эти заметны уже давно и их так же давно пытаются решить. GCC (который компилятор от гугла, а не от GNU), typescript, dart, wasm, webpack, jquery — это всё представители этих самых решений. Это не решения которые "решают проблемы которые сами же создают", а инструменты, попытки сделать что-то лучше и удобнее. Да, сейчас всё обстоит так, что за удобство мы платим скоростью транспиляции, оптимизации, загрузки страницы, рендера страницы etc. Но не волнуйстесь, ничто не вечно под луной, особенно проблемы, которые видны каждому первому проходящему, вроде автора.

                                                              0
                                                              Насколько я знаю, на Android летит java byte-code, который при установке приложения компилируется под конкретную платформу. То есть это уже не простыня сырого джаваскрипта, который моя бедная мобилка должна компилировать — это код хорошо спроектированной VM, который быстро и легко переводится в натив. Во-вторых — это происходит в момент установки, один раз за историю использования приложения, а джаваскрипт я компилирую каждый раз когда перехожу на страницу в Интернете. Так что по логике вещей как раз компиляция скриптов в браузере должна быть лучше оптимизирована, чем установка Android-приложений.
                                                              Есть вещи для которых определённый подход хорошо, есть для которых плох.
                                                              Правда? Ну и чем же фронтенд такой особенный, что он не может заранее распарсить JS-код и передавать в браузер уже байткод, который будет компилироваться в машинные коды клиентского девайса?
                                                              0

                                                              Автор — сквернословящий чудак, не способный затащить билд фронта в свой бекэндерский проект. Не знаю, насколько это сложно в шарпах, в java-мире это делается элементарно и там всё билдится по одной кнопке. И правильно настроенный билд spa (а не четыре формочки) почему-то занимал меньше минуты.
                                                              Так что я напрочь уверен, что его говнокодные формочки можно было сбилдить за ~5-10 секунд при правильной настройке. НО! Он же король разработки! Зачем разбираться в чужом стеке и уметь правильно настраивать, правда? Давайте обосрём и будем довольны. Но почему-то на плюсовиков он не отважился лезть. Полез, почему-то только на фронтендеров.


                                                              PS бекэндер на java, с небольшим опытом фронта. И да, я вот или не лезу сам формировать фронтовый билд или не жалуюсь, что долго. Зато в своё время разобрался с мавеном и знаю как легко билд на 15 секунд может выполняться больше минуты… если билд-скрипт написан через жопу.

                                            +13

                                            Хотел бы я посмотреть на эти 0,713 байта после запятой ;-)

                                              0
                                              Легко, 5 целых бит и 0.704 от бита
                                                0
                                                Хотел бы я посмотреть на эти 0,704 бита после запятой ;-)
                                                  +1

                                                  Берёте одну монетку с вероятностью выпадения одной из сторон в 80.4%…

                                                    0
                                                    А это байт из 1000 бит состоит. В итоге хватает 704 бита, чтобы описать остаток.
                                                  +1

                                                  Очень просто: достаточно взять 8 монеток с вероятностью выпадения одной из сторон в 80.4%.

                                                    0
                                                    Ещё проще, в условиях задачи стоит байт, а не октет. Соотвественно берем байт состоящий из 1000 битов, отсчитываем 713 и предъявляем к просмотру.
                                                      0

                                                      Ну это слишком просто!

                                                  +3

                                                  А представляете, сколько будет билдиться си-плюсовый код такого размера? :-)
                                                  Так-то картинка-мем про сражающихся на стульях программистов и проходящего мимо начальника изначально про плюсовиков была...

                                                    0

                                                    На прошлой работе 15к лок на плюсах (без учета зависимостей) собирались с нуля за 8 минут, чяднт?

                                                      0

                                                      8 минут, вроде нормальное время для одного поединка на стульях, всё сходится

                                                        0
                                                        Не знаю что конкретно, но что-то точно не так. Пет-проект на 30K строк (не loc, считал через Ctrl+Shift+F "\n") собирается за 12-13 секунд на R5 3600 в VS 2019.
                                                          0

                                                          А сверх-шаблонизированные библиотеки вроде boost.intrusive там есть?

                                                        0
                                                        Представляю. Исходники проекта, о котором написал ниже по ветке, весят 1,12 MB, собирается за 12-13 сек.
                                                    0
                                                    В «меньше килобайта» с трудом влезут конфиги вебпака и тайпскрипта. Скорее, тут почти мегабайт. И да, в такой ситуации 90 секунд — это «всего», я видел проект вдвое меньше, который собирался вдвое дольше.
                                                    0
                                                    И причём можно еще не брать вебпак, который сам по себе небыстр (rollup быстрее).
                                                    У меня, кстати, чуть меньший проект (800Кб) билдится с нуля за секунд 15-20, но у меня не старенький ноутбук, а вполне себе еще «торт» FX-8350. И это никто особо не страдал над скоростью билда, а можно было и пооптимизировать.

                                                    Памяти на это всё + VS Code + браузер уходит больше гига, но меньше двух, причём в основном её радостно сжирает хром, а не VS Code или билд.
                                                      +25

                                                      Ваш пример — как раз хорошая иллюстрация, что современная массовая разработка шагнула куда-то не туда. В Делфи проект аналогичного размера компилировался секунд 15 — 20 на Celeron 600 MHz

                                                        +1

                                                        Ну так как бы автор на это и жалуется. Просто в этот раз очень топорно.

                                                          –9

                                                          А то, что инструменты немножко со времён Дельфи выросли, как-то учитывается?


                                                          У меня файл в 30 строк


                                                          вот такой
                                                          module Surface.Theorems.Thinning
                                                          
                                                          import Data.Fin
                                                          import Data.List
                                                          import Data.Vect
                                                          import Data.Vect.Quantifiers
                                                          
                                                          import Surface.Syntax
                                                          import Surface.Derivations
                                                          import Surface.Theorems.Lemmas
                                                          import Surface.Theorems.TCTX
                                                          
                                                          import Helpers
                                                          
                                                          %default total
                                                          
                                                          mutual
                                                            export
                                                            twfThinning : Sublist g g' -> ok g' -> (g |- t) -> (g' |- t)
                                                            twfThinning _      g'ok (TWF_TrueRef g') = TWF_TrueRef g'ok
                                                            twfThinning subPrf g'ok (TWF_Base t1 t2) = let expCtxOk = TCTX_Bind g'ok (TWF_TrueRef g'ok)
                                                                                                        in TWF_Base (tThinning (AppendBoth subPrf) expCtxOk t1) (tThinning (AppendBoth subPrf) expCtxOk t2)
                                                            twfThinning subPrf g'ok (TWF_Conj twfr1 twfr2) = TWF_Conj (twfThinning subPrf g'ok twfr1) (twfThinning subPrf g'ok twfr2)
                                                            twfThinning subPrf g'ok (TWF_Arr twf1 twf2) = TWF_Arr
                                                                                                            (twfThinning subPrf g'ok twf1)
                                                                                                            (twfThinning (AppendBoth subPrf) (TCTX_Bind g'ok (twfThinning subPrf g'ok twf1)) twf2)
                                                            twfThinning subPrf g'ok (TWF_ADT preds) = TWF_ADT (thinAll preds)
                                                              where
                                                                thinAll : All (\t => g |- t) ls -> All (\t => g' |- t) ls
                                                                thinAll [] = []
                                                                thinAll (a :: as) = twfThinning subPrf g'ok a :: thinAll as
                                                          
                                                            export
                                                            tThinning : {e : STerm} -> Sublist g g' -> ok g' -> (g |- e :. t) -> (g' |- e :. t)
                                                            tThinning subPrf g'ok (T_Unit gokPrf) = T_Unit g'ok
                                                            tThinning subPrf g'ok (T_Var _ elemPrf) = T_Var g'ok (superListHasElems subPrf elemPrf)
                                                            tThinning subPrf g'ok (T_Abs arrWfPrf body) = let arrWfPrf' = twfThinning subPrf g'ok arrWfPrf
                                                                                                              body'ctx = TCTX_Bind g'ok (arrWfImpliesDomWf arrWfPrf')
                                                                                                              body' = tThinning (AppendBoth subPrf) body'ctx body
                                                                                                           in T_Abs arrWfPrf' body'
                                                            tThinning subPrf g'ok (T_App t1 t2) = T_App (tThinning subPrf g'ok t1) (tThinning subPrf g'ok t2)
                                                            tThinning subPrf g'ok (T_Case twf scrut branches) = T_Case (twfThinning subPrf g'ok twf) (tThinning subPrf g'ok scrut) (thinBranches branches)
                                                              where
                                                                thinBranches : BranchesHaveType g cons bs t -> BranchesHaveType g' cons bs t
                                                                thinBranches NoBranches = NoBranches
                                                                thinBranches (OneMoreBranch eprf rest) =
                                                                  case T_implies_TCTX eprf of
                                                                       TCTX_Bind _ tyPrf => let conTyOk = twfThinning subPrf g'ok $ assert_smaller (OneMoreBranch eprf rest) tyPrf
                                                                                             in OneMoreBranch (tThinning (AppendBoth subPrf) (TCTX_Bind g'ok conTyOk) eprf) (thinBranches rest)
                                                            tThinning subPrf g'ok (T_Con arg adtTy) = T_Con (tThinning subPrf g'ok arg) (twfThinning subPrf g'ok adtTy)
                                                            tThinning subPrf g'ok (T_Sub x y) = ?thinning_sub_hole

                                                          тайпчекается (до компиляции не доходит) минуты три с половиной, это ближе к дельфи или к джаваскрипту?


                                                          Впрочем

                                                          в idris 2 это починили, и оно компилируется где-то миллисекунд за 500, но там есть свои проблемы, которые, впрочем, естественно ожидать от инструмента с версией 0.2.1.

                                                            +10
                                                            У меня файл в 30 строк тайпчекается минуты три с половиной

                                                            И это отвратительно
                                                              0

                                                              А какие альтернативы? Покажете, как это сделать на дельфи?

                                                                +4
                                                                Нет, не покажу, т.к. Delphi не трогал с 2012, а ваш код я вообще не понимаю. Альтернативы, соответственно, тоже не подскажу.
                                                                Но из ваших слов (предыдущий комментарий) получается, что инструменты выросли… в чём? Во времени тайпчека?

                                                                В любом случае, исходник на 1 экран, который даже не начинает собираться за 3,5 минуты — это не есть хорошо. Я могу за схожее время собрать какой-нибудь огромный проект: только что пересобрал с нуля FreeSWITCH, и даже с учётом автотулзов у меня на полную сборку ушло 2 минуты. А ведь там много файлов по несколько тысяч строк кода…
                                                                Да, ждать по две минуты (а периодически приходится делать чистую сборку) — тоже некомфортно, но ждать ещё дольше для тайпчека одного экрана текста… что-то в этом явно не правильно…
                                                                  0
                                                                  Но из ваших слов (предыдущий комментарий) получается, что инструменты выросли… в чём? Во времени тайпчека?

                                                                  В выразительной мощности.


                                                                  Я там пишу формулировку и доказательство


                                                                  полутора маленьких лемм


                                                                  а машина проверяет, что это доказательство корректно и полно. Насколько я знаю, дельфи (как и C++, JS, rust и почти все остальные языки) не позволяет ни формулировать, ни доказывать чего бы то ни было.


                                                                  Да, 30 строк на три с половиной минуты — это крайний случай для прототипа нового языка, усложнённый тем, что я в этом коде очень сильно налегаю на неявные аргументы, которые компилятору приходится выводить, и это алгоритмически не очень тривиальный процесс, но средняя скорость в этак секунду на 100 строк — это плюс-минус норма.

                                                                    +6
                                                                    Коллега, автор про 4 экранных формы, чего вы со своей доказательной математикой лезете?
                                                                      0

                                                                      Он первый начал! А чего они со своими дельфями?

                                                                  +1

                                                                  Вы бы хоть комментарии писали. Сами не путаетесь в своем коде?


                                                                  Насколько я знаю, дельфи (как и C++, JS, rust и почти все остальные языки) не позволяет ни формулировать, ни доказывать чего бы то ни было.

                                                                  А зачем оно нужно для разработки прикладного ПО?

                                                                    0
                                                                    Вы бы хоть комментарии писали. Сами не путаетесь в своем коде?

                                                                    Неа, они там особо не нужны.


                                                                    Для человека там типы функций (twfThinning : Sublist g g' -> ok g' -> (g |- t) -> (g' |- t) и tThinning : {e : STerm} -> Sublist g g' -> ok g' -> (g |- e :. t) -> (g' |- e :. t)) — там для знакомых с предметной областью всё понятно (даже был шанс проверить это на практике). Особенно если шрифт с лигатурами, и всякие |- превращаются в принятые в области значки. Тела этих функций человеку читать не нужно, они для машины, чтобы она могла проверить, что утверждения, закодированные в типах функций, действительно выполняются.


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

                                                                    как пример. Тело, опять же, неважно.


                                                                    А зачем оно нужно для разработки прикладного ПО?

                                                                    Чтобы всё было доказуемо и ничего не падало, и сбылась мечта многих о безбажном ПО!


                                                                    А если чуть серьёзнее, для подавляющего числа прикладного ПО с принятыми там ограничениями по времени разработки и/или бюджету это всё совершенно не нужно. Просто это скорее к тому, что само по себе время компиляции ни о чём не говорит.

                                                                      0

                                                                      Жесть какая-то...

                                                                        0

                                                                        Ну а что делать? Вариантов лучше всё равно нет.

                                                                –1
                                                                А это уж вы сами решайте (проект маленький, всего ~250к строк)
                                                                image
                                                                –1
                                                                А вам не кажется, что сравнивать нативную компиляцию и транспиляцию, плюс либы, плюс стили, плюс линт немного некорректно?
                                                                  +3

                                                                  Эмм а можете рассказать мне в чем отличие по обработке с вашей точки зрения?

                                                                    –2
                                                                    В одном случае нужно парсить исходники и строить AST, а во втором нужно скопировать байты.
                                                                      +1

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

                                                                        +2
                                                                        А во втором думаете линковщик и компилятор волшебным образом все о библиотеках знают? Ага. Аж 500 раз. Что мешает фронтендным менеджерам зависимостей в определенном формате хранить апи этих зависимостей позволяющем не выполнять лишнюю работу?
                                                                          +1
                                                                          Что мешает фронтендным менеджерам зависимостей в определенном формате хранить апи этих зависимостей позволяющем не выполнять лишнюю работу?

                                                                          Вы предлагаете разработчикам NPM добавить ещё и полноценный ABI добавить в стандарт языка и поддерживать его? Не то чтобы я был против, но боюсь, что они не согласятся. Вообще если пойдете, то лучше не в NPM, а к разработчикам Babel, наверное ну или TypeScript. А и лучше сразу WebAssembly нормально поддержать. И опциональную типизацию, наверно.
                                                                            +1
                                                                            Эта проблема давно возникла в С++ и была успешно решена за счет precompiled headers.
                                                                            Что мешает использовать опыт из других языков?
                                                                            До введения precompiled headers, скорость компиляции файлов для Delphi превосходила компиляцию С++ во много раз.
                                                                        0

                                                                        А что крутого в том что исходники так организованы что в них не разобраться быстро даже при работе в 8 потоков… Человек вообще наверное не понимает, что в них на самом деле написано :) сложность ведь запредельная ;)

                                                                          0
                                                                          Разница в алгоритмической сложности одного и другого, во-первых
                                                                          И в окружении, во-вторых
                                                                          JS никогда не будет быстрее классических компилируемых или даже интерпретируемых языков, потому что в нем кучу извращенных костылей, образовавшихся исторически, нужно слепить с кучей библиотек и пакетов (нет, их нельзя собрать заранее или как-то упростить процесс, как вы предлагаете ниже, потому что это будет постоянно создавать проблемы версионирования и консистентности, потому что нативного репозитория тоже не существует), а потом впихнуть это в такой формат, чтобы его понял даже старинный IE…
                                                                            0

                                                                            Полифилы и прочие подпорки занимают от силы 10% от всего того треша что собирается.

                                                                              0
                                                                              потому что это будет постоянно создавать проблемы версионирования и консистентности
                                                                              А можно по-подробнее? Чем проблемы версионирования бинарников будут отличаться от проблем версионирования исзодников, из которых они собраны?
                                                                            +1

                                                                            Звучит, как будто в во втором случае меньше работы, так как часть вещей делается в рантайме

                                                                              0
                                                                              Так в рантайме оно и довольно быстро
                                                                              Медленно — это когда вы пишете что-то типа «ng build --prod» и идете пить чай, потому что там уже немного другое колдунство происходит
                                                                              0

                                                                              Нативная компиляция сложнее, особенно если компилятор оптимизирующий, и есть проверка типов.

                                                                                0
                                                                                Современный транспилятор тоже оптимизирующий и есть проверка типов, в том и фигня )
                                                                                Angular при продовой сборке выкидывает целые неиспользуемые модули и компоненты, проверяет типизацию и вот это все
                                                                                И да, поэтому он это и делает довольно долго
                                                                              0

                                                                              Нет. В дельфи подобного размера всегда компилировалось в пару секунд. 20 сек это билд всего с 0, но это крайне редко практикуется

                                                                                +1

                                                                                В отличии от TypeScript, в Дельфи нет проблемы вывода типов. То есть в том же Дельфи компилятор может за несколько фаз собрать необходимый набор объектных файлов, причем каждый исходник может быть пройден независимо от других. В TypeScript может быть функция в стиле display = () => convert(this.name), то есть тип функции display определяется функцией convert. А она может, в свою очередь, ссылаться на другую функцию.


                                                                                Аналогично с выводом типов уже внутри функций — он запускается только после фазы выше, тогда как в Дельфи типы определяются в самой переменной, так что этот пункт можно пропустить.


                                                                                Как следствие — компиляция в Дельфи крайне хорошо параллелится, не требует много памяти (так как до линковки не надо поднимать в оперативку весь граф зависимостей) и так далее. Тогда как в условных TypeScript/Scala/C# программист может положиться на вывод типов, так что компилятору приходится выполнять больше грязной работы.

                                                                                  +2
                                                                                  В отличии от TypeScript, в Дельфи нет проблемы вывода типов.

                                                                                  Ну так потому что система типов никакущая. Почти как в яве, только еще более никакущая. Нет сложности — нет и проблем.
                                                                                    0

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


                                                                                    Хотя лично я бы сказал, что и все топ-левел-байндинги должны быть аннотированы, но фиг знает, как оно там с этим в TS/Scala.

                                                                                      0
                                                                                      В TypeScript может быть функция в стиле display = () => convert(this.name), то есть тип функции display определяется функцией convert. А она может, в свою очередь, ссылаться на другую функцию

                                                                                      Может, но кто-то во мне подсказывает, что даже если программист расстарался, и там в модулях десятикратная вложенность типов, затянуть всю иерархию типов проекта в одно развесистое дерево в памяти из разных модулей и определить их все — не бог весть какая задача для компьютера, делающего несколько миллиардов операций в секунду. И медленно оно отнюдь не поэтому, а… просто вот так реализовано.
                                                                                  +3
                                                                                  Я бы сказал это очень долго, должно быть примерно на порядок меньше(именно сборка+линтер). У тса конечно не самый быстрый компилятор(я бы сказал ооочень медленный), но у меня бек на нем собирается менее 10 секунд на CI(думаю там машинка выделена не сильно быстрее вашей). Линтер-6 секунд.
                                                                                  Джавовый проект есть на 100к строк код с мавеном — сейчас лень смотреть, но время сборки +линтера в сумме в несколько раз меньше.
                                                                                  Но если говорить про CI то js значительно медленнее чем другие языки-очень медленный туллинг, который написан на джсе, нпм инсталл занимает десятки секунд-и с этим сложно что-то сделать, линтер даже на 1к строк кода запускается и пробегает поряка 5 секунд, тесты также в разы медленнее исполняются.
                                                                                  А на фронте еще куча наворотов поверх самого js.
                                                                                    +8

                                                                                    Меня больше всего прикалывает тот факт, что при этом жавовый код со всеми зависимостями закешированнными из мавена и умеющий дофига всего, может весить меньше frontend проекта с модулями ноды :)

                                                                                      0
                                                                                      нпм инсталл занимает десятки секунд-и с этим сложно что-то сделать


                                                                                      Yarn 2 Berry уже сделали с этим что-то. PnP называется, почитайте. Выглядит довольно дико на первый взгляд, с непривычки. Но я уже пользуюсь этим и доволен как слон — зависимости хранятся прямо в репе, никакого npm install при деплое.
                                                                                      0
                                                                                      не, тема для хайпа интереснее
                                                                                      –2

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

                                                                                        +53

                                                                                        У него достаточно компетенций, чтобы заметить, что его огромный бэк собирается куда быстрее 4 форм.

                                                                                          +3

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

                                                                                          +4
                                                                                          Ну так ему есть с чем сравнить
                                                                                          +42
                                                                                          Оказывается, мой современный ноут за 80 кусков недостаточно хорош для этого

                                                                                          Главное, что статьи можно на хабр клепать не останавливаясь
                                                                                            +22
                                                                                            На правах шутки
                                                                                            А комментари читать уже нельзя, скролл лагает.
                                                                                              +1

                                                                                              А почему шутки? Бывали ситуации когда у меня вкладка с комментариями под статьей просто начинала неистово течь и жрать процессор.

                                                                                              0
                                                                                              Жажда денег у человека
                                                                                                +2

                                                                                                А почему нет? Рейтинг положительный? Положительный. Значит сообществу это заходит. Значит можно продолжать.
                                                                                                Сколько еще чудных статей нас ждет...

                                                                                                +1
                                                                                                Буду следить за кармой автора, на данный момент — 295.
                                                                                                  +22

                                                                                                  Все кто мог уже определились статей пять тому :)

                                                                                                  +5
                                                                                                  Решение напрашивается само, пусть VDSina выдаст выделенный эпичный сервер, с ноута за 80 тыр заходим по RDP и всё ок. Заодно и идея для новой статьи — «как перестать беспокоиться и полюбить програмирование». А VDSinе польза, после этого их выделенные сервера будут разлетаться как горячие пирожки.

                                                                                                  Ну а так, судя по диагнозу ему HDD, вместо SSD подсунули, а JS пакеты, это тысячи мелких файлов, можно пару часов ждать пока всё в первый раз выстроится.

                                                                                                  Если же там ещё в бэкграунде какой-нибудь антивирус крутиться, с параоноидальными опциями, то может ещё интереснее быть.
                                                                                                    +8
                                                                                                    пусть VDSina выдаст выделенный эпичный сервер, с ноута за 80 тыр заходим по RDP и всё ок

                                                                                                    Автор, конечно, перегибает, но ведь это именно та проблема, о которой он пишет. Вместо того, чтобы оптимизировать инструменты, ставим более монструозную железяку.
                                                                                                      0
                                                                                                      Есть кратко/средне срочное решение проблемы и есть долгосрочное.

                                                                                                      Если ему надо сегодня завершить билд (Фил, как он кстати, добилдился?), то это возможное решение.

                                                                                                      И зачастую более мощная (или правильно настроенная железка) это правильное решение. hardware дешево, а время программистов дорого. Тем более пару статей назад у него было истинное виденье — десктопы рулят, мобильные (ну и лаптопы заодно) это хлам (для разработчиков).

                                                                                                      Если програмкой будет пользоваться три калеки, то дешевле железку получше купить. Тем более что lifetime железок лет пять, позже или раньше, все равно поменяют.
                                                                                                        0
                                                                                                        А какой вариант долгосрочного решения проблемы? Если краткосрочное — железо, решение для «трех калек» — железо, то выходит что всегда надо эту дырку затыкать железом, и тогда для всех временных рамок решение одно.
                                                                                                        +1
                                                                                                        время программистов дорого

                                                                                                        Раз время такое дорогое — почему его не экономят, ведь за то, что программист ждёт окончания компиляции, тоже кто-то платит?

                                                                                                          0

                                                                                                          Да ладно, есть множество способов экономить.
                                                                                                          Просто автор поста об них не в курсе.

                                                                                                        +1

                                                                                                        Скорость чтения/записи на диск это то во что ты упираешься пиши хоть на ассемблере. Если твоя программа работает с файлами, выше этой цифры не прыгнешь. Если опускаться на уровень операционной системы она тоже работает с файловой системой, например когда ты запрашивает новый срез memory mapped файла. Не возьмусь утверждать, но вроде винда скидывает дамп памяти на диск при выходе за границы виртуальной памяти процесса. JS код это очень-очень много мелких файлов (node_modules). Билд на SSD и HDD небо и земля, личный опыт.

                                                                                                          0
                                                                                                          Не возьмусь утверждать, но вроде винда скидывает дамп памяти на диск при выходе за границы виртуальной памяти процесса.

                                                                                                          Конечно скидывает (pagefile.sys), что ещё винде остаётся делать?

                                                                                                          Ноутные HDD обычно на 5400 rpm. Да, сегодня для разработки SSD это минимум, а ещё лучше хороший NVMe SSD.
                                                                                                            +3
                                                                                                            Скорость чтения/записи на диск это то во что ты упираешься пиши хоть на ассемблере.

                                                                                                            Это потому, что вы пытаетесь бороться со следствием, а не с причиной:
                                                                                                            JS код это очень-очень много мелких файлов (node_modules)

                                                                                                            Я не говорю, что надо все бросить и переделать, но сейчас многие даже думать не хотят о том, что что-то может быть построено иначе. Просто используют метод грубой силы, благо возможности есть.
                                                                                                          +5
                                                                                                          JS пакеты, это тысячи мелких файлов

                                                                                                          похоже прогресс примерно здесь пошел не туда
                                                                                                          хотя да, зерлинги, большими толпами, рулят :)
                                                                                                            +1
                                                                                                            Думаете в ноуте за 80к hdd стоит?
                                                                                                              0
                                                                                                              Если Фил успел кофе испить, покурить (не помню в туалет от там описывал как и с каким удовольствием ходил или нет) — то как бы вывод напрашивается сам собой.

                                                                                                              Конечно он преувеличил, ну и я поддержал его шутку. Хотя всё может быть, вон иногда гибриды ставят. Так что я бы проверил. To be on a safe side.
                                                                                                            –18
                                                                                                            С пустяками вроде трехмерного футбола с очень серьезной физикой и графикой, мощным ИИ, и очень серьезными расчетами в реальном времени ноут справляется.

                                                                                                            Так напишите систему сборки фронта на видеокарте, если конечно получится. Вся физика и графика замечательно распараллеливается и обсчитывается на видеокартах. Со сборкой кода такое вряд ли прокатит.
                                                                                                            ноут за 80 кусков

                                                                                                            Печатная машинка конечно дорогая, но вы вроде собирались ноутбук для разработки покупать? Я вот стационарный комп год назад покупал, он мне без видеокарты в 90К обошелся, аналогичный по производительности ноутбук будет все 120К, а то и больше. Но это же рабочий инструмент.
                                                                                                              +1
                                                                                                              А зачем вскод? Разве райдер не умеет в консоль чтоб запустить npm?
                                                                                                              Или не умеет открывать js, html etc файлы?
                                                                                                                +1
                                                                                                                Моя рабочая машинка, куплена в 2012
                                                                                                                iMac (21.5-inch, Mid 2011)
                                                                                                                Процессор 2,5 GHz Intel Core i5
                                                                                                                Память 8 ГБ 1333 MHz DDR3
                                                                                                                SSD 120Gb
                                                                                                                HDD 500GB


                                                                                                                Вот это всё сейчас запущено, работает, переключается и тормоза бывают крайне редко
                                                                                                                Хром — 126 вкладок в 3-х окнах
                                                                                                                Dash Kapeli
                                                                                                                Dropbox
                                                                                                                VSCode с небольшим проектом
                                                                                                                PHPStorm с проектом потяжелее
                                                                                                                foobar2000, крутящий flac'и с Джонни Кэшем
                                                                                                                SublimeText 3 — 7 окон, примерно 50-60 вкладок
                                                                                                                qBittorrent, 14 раздач
                                                                                                                Skype
                                                                                                                Telegram
                                                                                                                ForkLift
                                                                                                                AraxisMerge
                                                                                                                nvALT (759 файлов-записей)
                                                                                                                iTunes
                                                                                                                iTerm (zsh) с запущенным webpack
                                                                                                                Сервисы: nginx+php-fpm, mysql, elasticsearch, rabbitmq, nodejs


                                                                                                                Я это к тому, что нужно код смотреть и искать причину долгого билда.
                                                                                                                  +18
                                                                                                                  Не нужно. Можно набросить и оно само бурлить начнёт, будут гореть и рваться пердаки, за этим всем можно будет здорово понаблюдать. Не нужно разбираться в проблеме, если можно просто накинуть каках на вентилятор.
                                                                                                                    +2
                                                                                                                    Если бы у меня не было такого бы имака я бы может бы и поверил что не тормозит. Но у меня есть и даже с 24рамы. На такой машине можно конечно работать но запуск докера -и все можно сушить весла полностью, даже без хрома.
                                                                                                                      +1
                                                                                                                      Докер, к сожалению, не использую, весь стек на основной машине.
                                                                                                                      Не тормозит, вернее, тормоза бывают крайне редко, и я их устраняю.
                                                                                                                      Может, причина в OS (у меня до сих пор установлена HighSierra), но я склоняюсь к тому, что причина в подходе к настройке.
                                                                                                                      Пример: nvm (nvm use) при переходе в папку проекта я запускаю вручную, а не даю на управление шеллу, так как начинает страдать отзывчивость. Мне это несложно — аптайм исчисляется неделями.
                                                                                                                      Моё примерное рабочее окружение описано тут.

                                                                                                                      Ну, можете заехать и убедиться сами ¯\_(ツ)_/¯
                                                                                                                      Можно по видеосвязи демонстрацию устроить.
                                                                                                                      Можно Фила попросить заехать и глянуть, он в этом же городе живёт :-)
                                                                                                                      0

                                                                                                                      Про вкладки хрома, они бывают "разные" одно дело текстовые странички, другое, к примеру вкладки с забором с большим количеством комментариев :)

                                                                                                                        0
                                                                                                                        Вы действительно хотите получить список открытых вкладок?
                                                                                                                        Я могу. Сейчас их 141.
                                                                                                                          0
                                                                                                                          У меня в браузере на домашнем ноутбуке открыто 830 вкладок, на рабочем ПК — чуть поменьше. Я открываю ссылки во вкладках, а потом читаю, заношу в закладки, закрываю ненужные и т.д. Домашний ноутбук — неплохой по быстродействию даже по современным меркам, на работе ПК — раза в 2 похуже, но с нагрузкой справляются.
                                                                                                                            0
                                                                                                                            Ну так современные браузеры вкладки и не грузят сразу, только после обращения к ним. Количество вкладок больше вообще не показатель.
                                                                                                                              0
                                                                                                                              Ну так активных (используемых) вкладок почти всегда не меньше полсотни.
                                                                                                                        +1

                                                                                                                        Ох сколько всего интересного можно запустить на таком железе вместо одной лишь Android Studio

                                                                                                                        +4
                                                                                                                        топовейший ноут
                                                                                                                        80 кусков
                                                                                                                        что-то не сходится. Такое ощущение, что вы отстали от цен лет на пять. Сейчас топовый ноут дешевле 100-150к найти крайне сложно.
                                                                                                                          +1
                                                                                                                          150к — это только 16G RAM, 1Tb NVMe, 4K экран. Но — низковольтажный проц. Точнее — 160к. Если хочешь ноут для разработки — видимо, придётся ещё 20к-50к подкинуть на 45W проц.

                                                                                                                          Беда с этим какая-то, доходы падают в железном эквиваленте. :(
                                                                                                                            0
                                                                                                                            Ну или за $1K собрать десктоп, AMD — Ryzen 9 3900XT 3.8GHz 12-Core/
                                                                                                                            ASUS — B550M-PLUS/64GB RAM/2x256GB SSD — выходит $909 (если уже есть корпус и блок питания). Видео конечно набортное, но программисту оно как бы без разницы. Ну или подождать новую карту от nvidia.

                                                                                                                            Все лаптопы отдерёт как тузик грелку. На один SSD систему поставить и IDE, а проект на другой SSD.

                                                                                                                              +1
                                                                                                                              Увы, ноуты вне конкуренции. Их с собой носить можно.
                                                                                                                              Мы же все сейчас любим удаленку и хотим иметь возможность возить рабочее место с собой.

                                                                                                                              Стоит 150-200к. Ленова x1 или Мак по вкусу. Оба хороши.
                                                                                                                                +8

                                                                                                                                Это если есть куда носить. А если даже на удалёнке сидишь на одном обустроенном рабочем месте, то смысл в ноутбуке как-то пропадает.

                                                                                                                                  +1

                                                                                                                                  Да как бы нет. Если дома — полноразмерный стационар с правильной посадкой, если на работе — то же самое. Весьма неудобно смотреть в мелкий ноутбук, слегка сгорбившись.

                                                                                                                                    +2
                                                                                                                                    К ноуту тоже можно подключить внешние монитор и клавомышь и горбиться только когда используешь ноут в пути
                                                                                                                                      0
                                                                                                                                      А зачем использовать ноут в пути? У автора была нормальная ситуация, которую он испортил. Я про только стационарник и последующую покупку ноута, чтобы работать всегда и везде. Вот не нужно это на самом деле.
                                                                                                                                        +1

                                                                                                                                        Правильно. Нужно так устроить свою жизнь, чтобы работать всегда и везде с десктопа!

                                                                                                                                          +2
                                                                                                                                          Не выходи из комнаты, не совершай ошибку? )
                                                                                                                                    +2

                                                                                                                                    Не хотел бы я таскать ноут за 200к с собой

                                                                                                                                      +1
                                                                                                                                      У меня наверное штук семь ноутов, включая macbook pro, но всё равно использую их только как тонкий клиент для RDP на десктоп, чего и вам советую.

                                                                                                                                      Докстанция, клаваиатура, мышь и хороший монитор.
                                                                                                                                        +3
                                                                                                                                        Покупаем мощный десктоп, плохой лэптоп, подключаемся по RDP и билдим на мощном десктопе из любого места
                                                                                                                                          +1

                                                                                                                                          Звёздочку забыли:
                                                                                                                                          *из любого места: при наличии стабильного коннекта; ping <100мс, speed>20мс и без потерь.

                                                                                                                                            0
                                                                                                                                            А еще лучше арендуем мощности в облаке…
                                                                                                                                              0
                                                                                                                                              На мощном десктопе можно отлично поиграть, не всё время же работать.
                                                                                                                                                0
                                                                                                                                                Вы удивитесь, но и в облаке тоже!
                                                                                                                                                  0
                                                                                                                                                  Если не жить рядом с датацентром, то ряд игр (например, сетевые шутеры, МОБЫ и прочие тайминго-зависимые игры, те же Dark Souls) вряд ли будут приносить что-то, кроме раздражения из-за приличной задержки
                                                                                                                                            +1

                                                                                                                                            Для этого изобрели SSH и удалённый рабочий стол. Ставишь дома десктоп с жирными вещами и соединяешься издалека.

                                                                                                                                              +1
                                                                                                                                              Ну, у меня хоть ноута нет (которым бы пользовался, так то старенький лежит в шкафу), но лично я терпеть не могу работать удаленно. Проверено. То интернет отвалится. То он с такой скоростью и пингом (3g/edge) что любое действие мучение. То просто лаги раздражают. Еще и в случае удаленного рабочего стола часть хоткеев перехватывается.
                                                                                                                                                0

                                                                                                                                                Это не работает с разработкой 3D приложений от слова "совсем".
                                                                                                                                                Все будет тормозить, либо вылезать артефакты, что неприемлимо.

                                                                                                                                                  0
                                                                                                                                                  C RDP — да.
                                                                                                                                                  Но достаточно давно VMware внедрила PCoIP протокол (пусть он и требовал тогда ускорителей) именно для работы всяких 3D-разработчиков удаленно.
                                                                                                                                                  Ну или более новая версия — тот же Parsec (изначально — для стриминга игр, вполне нормально стримит, и он вообще бесплатный).
                                                                                                                                                  Недостатки конечно есть но некритичнные:
                                                                                                                                                  — ОЧЕНЬ желательны аппаратные кодер и декодер (обычно встроенного в процессор или видеокарту хватает). Если нет — будут лаги и артефакты.
                                                                                                                                                  — Канал кушается мегабитами, можно настроить чтобы десятками мегабит кушался если надо совсем уж высокое разрешение. Если канал не держит — будут лаги и артефакты.

                                                                                                                                                    0
                                                                                                                                                    Заводить аккаунты, использовать сторонние сервисы и страдать, если они лягут или в них найдут дырень?
                                                                                                                                                    Пробовал я Parsec — всё равно не зашло, артефачит, удобство использования не очень.
                                                                                                                                                    Страдал с VNC/AnyDesk/NoMachine/X2Go/ещёдесятокспособов, потом в итоге купил ноутбук и будто заново родился.
                                                                                                                                                    Для обычной разработки удалённое подключение — нормально, жить можно.
                                                                                                                                                    Для 3D графики — при всём желании невозможно ужать гигабиты видеотрафика в мегабиты. Всегда где-то в чём-то будет плохо.
                                                                                                                                                    +1
                                                                                                                                                    Это не работает с разработкой 3D приложений от слова «совсем»
                                                                                                                                                    То ли дело ноутбук, летает, работать с 3D одно удовольствие.
                                                                                                                                                      0
                                                                                                                                                      Ну можно купить хороший гробик с парой видеокарт в SLI или просто самой мощной десктопной. Но ценники на такое конечно совсем негуманные и найти непросто.
                                                                                                                                                        0

                                                                                                                                                        Тут ведь и так обсуждаются ноутбуки ценой 200+ тысяч рублей.

                                                                                                                                                        0
                                                                                                                                                        То ли дело ноутбук, летает, работать с 3D одно удовольствие.

                                                                                                                                                        Конечно! В хороший ноутбук и в GeForce RTX 3080 влезет!
                                                                                                                                                        image
                                                                                                                                                        3dnews.ru/assets/external/illustrations/2020/08/07/1017647/axp1.jpg
                                                                                                                                                      0

                                                                                                                                                      И всё тормозит и лагает из-за пинга издалека, а смысл в двух мониторах пропадает.


                                                                                                                                                      По крайней мере, мне с пингом в 10-20 мс уже некомфортно работать, а вайфай + пара хопов через интернет такое вполне может дать.

                                                                                                                                                    +1
                                                                                                                                                    в 3900xt нет встроенного видео
                                                                                                                                                      0
                                                                                                                                                      Вы правы, попутал с другой моделью. Но карта сопостовимой производительности стоит в пределах $40-50
                                                                                                                                                      0
                                                                                                                                                      Вы ничего не путаете? один только проц ~45 тысяч остальное в 30 ну никак не влазит

                                                                                                                                                      Но по дексктопу согласен, отдельным пунктом 34 21:9 монитор или два монитора и где здесь место ноуту не могу сообразить
                                                                                                                                                      0

                                                                                                                                                      У Ryzen 3900XT нет интегрированного видеоядра, так что на видеокарту всё-таки придётся раскошелиться дополнительно. Правда, если не играть на машинке, то в цене прибавит не намного, примерно как ещё один блок питания.

                                                                                                                                                        0
                                                                                                                                                        Так видеокарта и старая может быть. Это же ПК.
                                                                                                                                                          0

                                                                                                                                                          Ну вообще-то да, но тогда условие "если есть уже корпус и блок питания" во-первых, перестаёт быть опциональным, а во-вторых превращается из задачи сборки нового компьютера в задачу апгрейда.
                                                                                                                                                          Со старой видеокартой я вот именно так и сидел прошедшие полгода, правда не на 3900XT, а на 3800X.


                                                                                                                                                          Бормотание под нос

                                                                                                                                                          А потом купил RTX 2070S утром в день анонса RTX 3070. Да, до сих пор немного штормит.

                                                                                                                                                      0
                                                                                                                                                      А можно взять нормальный ноут а не сверхтонкое поделие.
                                                                                                                                                        0

                                                                                                                                                        Нет, нельзя. Потому, что если ищешь 4K экран — то до ~180 тыс. абсолютно все модели — с низковольтажными процессорами. А хорошие модели стоят уже 200 тыс. и больше.

                                                                                                                                                          0
                                                                                                                                                          А, да 4к пропустил действительно. Просто я не обращаю на это внимания, вот и привык мимо глаз пропускать количество пикселей.
                                                                                                                                                            0

                                                                                                                                                            А зачем 4к экран? Он ведь не в ем нужен, у кого о глаза не видят этих 4к на 14 дюймах…
                                                                                                                                                            Да и последние процессоры часто идут в варианте не 15Вт а 28Вт, что при отсутствии нагрузки на видеоядро уже не так скудно...

                                                                                                                                                              0

                                                                                                                                                              В действительности, оказалось весьма удобно на 14": позволяет отмасштабировать до 1920*1080 (200%) или до 1280*720 (300%) и получается достаточно хороший шрифт, который вообще не превращается в "радугу" или "мыло" при целочисленном масштабировании (т.е. интерфейсы не "плывут").


                                                                                                                                                              Я, лично, использую 300% — меньше для меня просто мелко. Исчезло ощущение, что песка в глаза набросали, какое бывает при работе за стационаром из-за слегка мыльных или радужных шрифтов. Глаза меньше за ноутбуком устают.


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


                                                                                                                                                              Матерюсь на себя: лучше бы не тратил уйму денег (157к) на ThinkPad T14s, а взял себе внешний монитор (да тот же ThinkVision S28-10, если уж захотелось брендовую хорошую вещь ;) ). Но, как обычно, силён лишь задним умом, увы.


                                                                                                                                                              Причём я знал, что так захочется, просто перед отпуском в спешке купил себе ноут, надеялся поработать над хобби проектами, пока время будет (ха, наивный).

                                                                                                                                                                0
                                                                                                                                                                Не видеть разницу между FHD и 4к, даже на 14", может только совсем слепой человек. У меня коллега заметил 4К с 2х метров из за моего плеча и подскочил со словами :«офигеть как круто» (была открыта идея).

                                                                                                                                                                На FHD шрифты — это кошмар. Лично для меня 4K в 2020 году — это обязательная штука, как и SSD.
                                                                                                                                                                  0
                                                                                                                                                                  Ну, у меня где то -7 с копейками зрение. Мне как то не очень заметно даже в очках (очки где то до -1.5 или -2 корректируют). Разве что прям вглядываться вплотную.
                                                                                                                                                                    0
                                                                                                                                                                    Не видеть разницу между FHD и 4к, даже на 14", может только совсем слепой человек

                                                                                                                                                                    Ну, у меня где то -7 с копейками зрение

                                                                                                                                                                    Сорри, но не вижу расхождений в ваших тезисах :)
                                                                                                                                                                    Был у меня 15.6" ноут с FullHD, с которого перешел на MBP16" с 3072x1920 (наверное, это 3k назвать можно). И разница между 140 и 226 ppi коллосальная в ощущении (хоть у меня и -1.5 зрение примерно). На FullHD на такой диагонали виден "песочек" на шрифтах, на маке уже нет с рабочего расстояния. Хотя на смартфоне, конечно, и 226ppi смущали бы, там 300+ обязательны.

                                                                                                                                                                      0
                                                                                                                                                                      Видимо нюансы восприятия. Тут недавно в какой то теме скидывали скриншоты RDP и я, как и многие другие видели артефакты на изображении, а автор скриншота и еще несколько человек не видели. Притом лично я отсмотрел 5 разных устройств и на всех видел, а оппонент аж девушку дизайнера привлекал со своими девайсами которая тоже не увидела, и сам он на разных устройствах смотрел.
                                                                                                                                                                    +1
                                                                                                                                                                    Не видеть разницу между FHD и 4к, даже на 14", может только совсем слепой человек.

                                                                                                                                                                    Вы видимо забыли закончить: ведь только топовые конфигурации совсем не лагают на 4k. Визуально — нулевое различие для ~80% населения

                                                                                                                                                                      0
                                                                                                                                                                      А что именно лагает? Игры в разрешении 4К? Да, есть такое, чем больше разрешение, тем топовее нужна карта.

                                                                                                                                                                      OS, Идея, браузер, прочее 2Д (и фильмы) прекрасно работает в 4К без каких либо лагов. У меня железка совсем не новая и не топовая: Intel Core i7-6700HQ CPU @ 2.60GHz × 8 / Mesa Intel HD Graphics 530 (SKL GT2)
                                                                                                                                                                        0

                                                                                                                                                                        Ну вот у меня видео подлагивает под W10 на i5 и напрочь тормозит (и возникают всякие зелёные фрагменты) на ubuntu с i3 (на неттопе, который заявлен как 4k ready). Можно, конечно, попытаться списать на ресайзинг под 1080p экраны, но пропорциональное уменьшение картинки это вот вообще не задача для современных видео. И нет, я как не геймер не вижу большого смысла тратить х2-5 денег на железо.

                                                                                                                                                                          0
                                                                                                                                                                          Можно, конечно, попытаться списать на ресайзинг под 1080p экраны, но пропорциональное уменьшение картинки

                                                                                                                                                                          Вы говорите о просмотре 4К роликов, а PocketM о 4К экранах. 4К экраны ведь не только для просмотра роликов в таком разрешении. Мы тут вроде больше о четкости в целом, скажем, текстов говорили.

                                                                                                                                                                      0
                                                                                                                                                                      На FHD шрифты — это кошмар.

                                                                                                                                                                      На FullHD с 24 дюймами виндовые шрифты без сглаживания это благо, абсолютная чёткость. Большинство других вариантов это мыло разной степени мылкости.
                                                                                                                                                                    0

                                                                                                                                                                    У меня сейчас ноут с 3к-экраном, а до этого был ноут с 1920×1080-экраном, и я не думаю, что разница обоснована. Хотя я очень люблю мелкие шрифты и разрешения, и у моего десктопа два 4k-экрана (27-дюймовых, правда).

                                                                                                                                                                      0
                                                                                                                                                                      Да нет, разница в цене неадекватна и не оправдывает стоимости ноутбуков с UHD экранами, оно того не стоит. Я уже писал, что уже пожалел, что погорячился и взял, не покрутив в руках. Правда такие модели хрен найдешь в оффлайне, за них магазины даже предоплату требуют при доставке.
                                                                                                                                                                  +1
                                                                                                                                                                  Нееее, год назад брал XPS15. 45W i7 9750h, 1tb nvme, 16g ram, 4k экран. Как раз 156к было, сейчас из-за курса наверное подороже. Так получилось что у меня оказался еще и десктоп — ryzen 3 3200g, 32g ram, 256mb nvme. И вот этот десктоп на глаз в несколько раз быстрее, тупо даже по отзывчивости интерфейса системы.
                                                                                                                                                                  +3
                                                                                                                                                                  Это, видимо, я отстал от жизни, если для разработки требуется такое железо. Ну, и ноут для работы, лично для меня неудобно: один маленький монитор, урезанная клавиатура. Но, у каждого свои требования, понимаю.

                                                                                                                                                                  Одно время, я работал над проектом на nodejs. Сборка была автоматизирована и проблем с этим не было, но запуск и работа была, скажем так, небыстрой.
                                                                                                                                                                  Полностью согласен с автором, что существующие средства разработки очень медленные. И жадные до памяти.

                                                                                                                                                                  P.S. долго думал над «вскод». Сперва показалось, что ошибка/опечатка. Когда дошёл до «жскод», стало понятно. VSCode/Atom/Electron жрут немало ресурсов. С теплотой вспоминаю VS6.
                                                                                                                                                                    0
                                                                                                                                                                    VS6 наш solution закрывал минут 5, приходилось срубать…
                                                                                                                                                                    У меня лучшие воспоминания от 2005/2008 версий. Шустрые (кроме IntelliSense — тут только Visual Assist), удобные и симпатичные, не то что нынешнее «плоское» убожество.
                                                                                                                                                                    +1
                                                                                                                                                                    | топовейший ноут
                                                                                                                                                                    | 80 кусков
                                                                                                                                                                    что-то не сходится. Такое ощущение, что вы отстали от цен лет на пять. Сейчас топовый ноут дешевле 100-150к найти крайне сложно.

                                                                                                                                                                    Тут как раз все сходится. Топовейший ноут автору не успели поставить, и автор взял


                                                                                                                                                                    самое лучшее, что было в наличии — весьма среднюю машинку

                                                                                                                                                                    хотя и


                                                                                                                                                                    современный ноут

                                                                                                                                                                    но это уже всего лишь показатель времени создания ноута, а не уровня его железа.

                                                                                                                                                                      0

                                                                                                                                                                      Тут же от размеров зависит, если устроит 15.6 то вариантов побольше, у автора 8 Гб оперативы ведь, он конечно не топ но за эти деньги вполне можно найти норм проц без видеокарты с ssd да там не будет супер экрана супер батареи но производительности будет немало

                                                                                                                                                                        0
                                                                                                                                                                        Хорошие топовые ноутбуки стоят даже еще больше — выше 200т.р. Я, в частности, уже нацелился на ASUS ZenBook Pro Duo UX581GV (Core i9 9-го поколения), хотя и имеющийся у меня ноутбук — с достаточно хорошими характеристиками. Также неплохой вариант — ASUS ROG Zephyrus Duo 15 (Core i9 10-го поколения). Оба ноутбука — с двумя экранами 4К и хорошими десктопными видеоадаптерами; а работа с двумя экранами 4К — очень удобна для разработчиков (есть модели и для игроманов с экраном FullHD, частотой обновления 300Гц и временем отклика 3мс). Такие ноутбуки с мощной начинкой могут использоваться также для игр (с самыми высокими параметрами обсчета сцен), программирования больших проектов, обсчета большого объема данных (в т.ч. с использованием ускорения обработки на видеокарте), одновременного использования кучи виртуальных машин (например, для тестирования серверного ПО), нелинейного видеомонтажа и создания медиаконтента, и множества еще самых разных применений.
                                                                                                                                                                          0
                                                                                                                                                                          Для разработки странный выбор. Мы же все еще о ней говорим?

                                                                                                                                                                          Все совсем тяжелое все равно на серверах собирать и запускать. Для всего не слишком тяжелого хватает типичных ультрабуков. Они еще и легкие. Ваши гробики по 2.5 (с зарядкой все 3 небось) килограмма особо не потаскаешь.
                                                                                                                                                                            0
                                                                                                                                                                            Я со своим ноутбуком 15.6" и в дальние поездки езжу, вместе с БП — 2,5кг.
                                                                                                                                                                        +10
                                                                                                                                                                        «Вот почему так?»
                                                                                                                                                                        потому что ноду изобрели недопрограммисты. Никакой нормальный программист не будет использовать жс ни для чего, кроме как манипулирования хтмл.
                                                                                                                                                                          +25
                                                                                                                                                                          Темы для холиваров, затронутые в посте:
                                                                                                                                                                          1. фронтендеры vs бэкендеры
                                                                                                                                                                          2. js fameworks: «тормозное гэ» vs «новые технологии, ускоряющие разработку от процесса до релиза»
                                                                                                                                                                          3. ноут за 80к: «топовый гаджет» vs «бюджетная печатная машинка»
                                                                                                                                                                          4. кофе с молоком и о ужас сахаром: «как можно это пить» vs «а что, мне вкусно».
                                                                                                                                                                            0
                                                                                                                                                                            5. JS: полноценный язык или говноязык для анимаций на страничках
                                                                                                                                                                            +8

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

                                                                                                                                                                              +11
                                                                                                                                                                              У меня есть подозрения, что шел нелегкий выбор не на жизнь, а на смерть между «придумать несколько технических подробностей» и «написать про кофе». Победил сами видите какой вариант.
                                                                                                                                                                                0

                                                                                                                                                                                Ну тут как всегда… есть варианты и другие случаи… Когда еще лучшим из доступных компьютеров был Yamaha MSX, так же известная как КУВТ… Запускаешь компилятор C… Идешь с четвертого этажа на первый в кафе, отстаиваешь очередь, пьешь кофе. Возвращаешься на 4-й этаж по лестнице (лифт был, но у студентов на нем ездить было не принято), смотришь на экран… идешь снова на первый этаж "покурить" с курящими друзьями… Возвращаешься… Ура, освободился соседний компьютер! Запускаешь Zanac и… на самом интересном месте… оно скомпилировалось… Правда, был еще "Трубо-поскакал"… Хоть над ним все и смеялись, но компилировал того же уровня сложности код за минуту-две… Ну да, была тонкость. Примерно максимум объема кода был около 32 килобайт… На C можно было сделать include и скомпилировать пару сотен килобайт кода за раз. Правда толку-то? В компьютере всего 64 килобайта оперативной памяти из которых что-то около 12 килобайт съедал DOS… (А как я радовался, когда придумал способ заменить 3 "матрицы" 64x64x64 float, которые требовались формально для расчета, на две матрицы 64x64! Что такое полтора мегабайта в наше время? У меня сейчас эта небольшая страница Хабра почти 200 мегабайт памяти скушала...)


                                                                                                                                                                                PS: И не надо говорить про контрол с текстовым редактором. Я в свое время уместил текстовый редактор с синтаксической подсветкой кода в .exe файл 12 килобайт размером. Без сжатий и чего-то подобного. (исходников было что-то около 20 килобайт, ЕМНИП).

                                                                                                                                                                                +12

                                                                                                                                                                                Видимо, чтобы показать сколько всего можно успеть сделать за время билда. Описание в подробностях тут — литературный приём.

                                                                                                                                                                                  0

                                                                                                                                                                                  Художественная литература, увы, публикуется в другой хаб

                                                                                                                                                                                    +1

                                                                                                                                                                                    Это называется лирическое отступление, чтобы показать всю боль от сложившейся ситуации… Ну и вся статья явно не техническая :)

                                                                                                                                                                                  +2
                                                                                                                                                                                  Это чтобы дать четырем формочкам шанс добилдиться, пока пишется статья.
                                                                                                                                                                                  +36
                                                                                                                                                                                  Добрый вечер, Филип. К сожалению Вы не указали ссылок на код вашего фронтенд проекта, поэтому нам трудно понять причину долгой сборки Вашего проекта. Тем не менее мы предполагаем, что долгая сборка Вашего проекта связана с тем, что несмотря на маленький размер проекта, к нему подключено большое количество сторонних библиотек. Библиотеки для JS не имеют стандартного бинарного формата для статические подключаемых библиотек и обычно поставляются в исходных кодах. По этой причине при полной пересборке проекта компилятору JS-кода приходится обрабатывать не только код вашего проекта, но и все подключенные библиотеки, применяя к ним операции транспиляции и минификации. Вы можете избежать этого используя либо инкрементальную компиляцию (watch режим в webpack) либо динамически подключая заранее собранные библиотеки (опция externals в webpack).

                                                                                                                                                                                  С уважение, Ваши фронтенд-разработчики.
                                                                                                                                                                                    +16

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

                                                                                                                                                                                      +9

                                                                                                                                                                                      Ребят это костыли чистой воды. Сколько уже времени прошло с момента изобретения пакетов и минификации? Лет десять не? И до сих пор сборка и минификация js занимает чудовищное количество времени, жрет чудовищное количество ресурсов, а так же занимает дофига места на диске. Что еще веселее многие nodejs именно приложения просто не работают после минификации и требуют наличия node_modules.


                                                                                                                                                                                      Чтобы избежать вопросов этого не может быть сразу даю ссылку на проект https://github.com/koenkk/zigbee2mqtt
                                                                                                                                                                                      Задача простая взять проект и собрать минифицированную версию которая будет запускаться на ноде. Я ее уже даю раз в третий и каждый раз все заканчивается, сорян товарищ, там либы кривые никак.

                                                                                                                                                                                        –1
                                                                                                                                                                                        И до сих пор сборка и минификация js занимает чудовищное количество времени, жрет чудовищное количество ресурсов, а так же занимает дофига места на диске.

                                                                                                                                                                                        Так нет, не занимает и не жрёт. Если вы делаете нормально. Вот места занимает дофига, да — по той банальной причине, что npm никаких ограничений на содержание пакетов не накладывает, и типичное содержание пакета — это несколько «готовых» версий библиотеки (минифицированных и в разных модульных обертках), плюс весь-весь исходный код. А то еще и пару картинок (для документации) догадаются положить, размером как весь остальной проект.

                                                                                                                                                                                        то еще веселее многие nodejs именно приложения просто не работают после минификации и требуют наличия node_modules.

                                                                                                                                                                                        Я ее уже даю раз в третий и каждый раз все заканчивается, сорян товарищ, там либы кривые никак.

                                                                                                                                                                                        Значит у вас такие программисты, которые даже исключения в минификации настроить не в состоянии, чтоб «кривые либы» тем не менее собирались в единый проект без внешних зависимостей, пусть даже часть кода в них останется не минифицированной.
                                                                                                                                                                                          +9
                                                                                                                                                                                          Так нет, не занимает и не жрёт. Если вы делаете нормально.

                                                                                                                                                                                          Автор как раз на это и указывает. Почему на куче других языков это просто работает, а вот под js мне обязательно делать "нормально"? И да это делать нормально не гарантирует, что оказывается эти пакеты надо и с этим ничего не поделаешь живите так.


                                                                                                                                                                                          Вот места занимает дофига, да — по той банальной причине, что npm никаких ограничений на содержание пакетов не накладывает, и типичное содержание пакета — это несколько «готовых» версий библиотеки (минифицированных и в разных модульных обертках), плюс весь-весь исходный код. А то еще и пару картинок (для документации) догадаются положить, размером как весь остальной проект.

                                                                                                                                                                                          И еще зависимости внутри ага.


                                                                                                                                                                                          Значит у вас такие программисты, которые даже исключения в минификации настроить не в состоянии

                                                                                                                                                                                          Ребят еще раз задам вопрос, а не дофига ли мне надо знать притопов и прихлопов? И более того специфичных знаний о куче упаковки. Если у вас руки прямые вон я ссылку дал. Покажите так сказать мастерство. А то рассказывать что руки кривые это прям всегда прекрасно, а как просишь рассказать как то ой.

                                                                                                                                                                                            +1
                                                                                                                                                                                            Почему на куче других языков это просто работает, а вот под js мне обязательно делать «нормально»?

                                                                                                                                                                                            Нет, не обязательно. Я вам сейчас может картину мира порушу, но — «под js» вам вообще ничего не обязательно билдить. Честное слово. Оно и так работает. На моей позапрошлой работе у меня был очень большой сложный проект почти на мегабайт минифицированного JS, который «билдился» в пределах пяти секунд, и точное количество секунд зависело исключительно от производительности HDD по переносу файлов в папку с дистрибутивами (повальная минификация занимала вообще миллисекунды).

                                                                                                                                                                                            А вот если вы хотите присосаться к мегабайтам чужого кода в экосистеме npm, к крутым фичам, которых совсем даже нет в голом JS, и еще много к чему — вот тогда извините, но да, вам придётся в этом всем хотя бы немного ориентироваться, чтоб оно у вас было «нормально», а не как живописуется в статье.

                                                                                                                                                                                            И еще зависимости внутри ага.

                                                                                                                                                                                            Они не «внутри», а в других пакетах. И да, конечно возможны ситуации, когда десяток-другой пакетов импортировался аж пять раз с разными версиями. Но если вы не пользуетесь мёртвыми пакетами с кучей зависимостей (а зачем ими такими пользоваться?), то таких ситуаций на самом деле сильно меньше, чем может казаться. Скажем, в моем нынешнем рабочем проекте (215Мб node_modules) одни и те же пакеты разных версий занимают 13Мб. Специально недавно интересовался.

                                                                                                                                                                                            Ребят еще раз задам вопрос, а не дофига ли мне надо знать притопов и прихлопов?

                                                                                                                                                                                            Таки вы уже купили весь npm, чтоб весь этот опен-сорс стал вам что-то должен, например то, чтоб у вас было всё хорошо? Если нет, то почему вы считаете, что кто-то другой будет решать ваши проблемы? А для решения ваших проблем вам самому всё ж таки придётся что-то знать.

                                                                                                                                                                                            Если у вас руки прямые вон я ссылку дал.

                                                                                                                                                                                            Но количество денег не указали.
                                                                                                                                                                                              +1
                                                                                                                                                                                              А вот если вы хотите присосаться к мегабайтам чужого кода в экосистеме npm, к крутым фичам, которых совсем даже нет в голом JS, и еще много к чему — вот тогда извините, но да, вам придётся в этом всем хотя бы немного ориентироваться, чтоб оно у вас было «нормально», а не как живописуется в статье.

                                                                                                                                                                                              Еще раз намекну что в других языках, даже в php этого нет. А вот в js и npm есть. И да большинство говорящих делай "нормально" забывают рассказать где почитать как нормально и даже банально дать ссылок на почитать. Или мне обязательно надо самому прочитать референс, дальше поизучать как там минифицируется поразматывать кучу всего и только потом делать "нормально". Мне кажется в какой-то момент мы свернули не туда.


                                                                                                                                                                                              Таки вы уже купили весь npm, чтоб весь этот опен-сорс стал вам что-то должен, например то, чтоб у вас было всё хорошо?

                                                                                                                                                                                              Лол. Теперь вопросы воспринимаются как будто мне должны. Вы вот сами скажите, считаете что та помойка что наблюдается в npm это нормально? Как бы проблеме не один год, а воз и ныне там.


                                                                                                                                                                                              Но количество денег не указали.

                                                                                                                                                                                              Так и запишем, как "нормально" делать мы вам не расскажем это тайные знания. А потом они вопрошают почему люди не делают "нормально".

                                                                                                                                                                                                –1
                                                                                                                                                                                                Еще раз намекну что в других языках, даже в php этого нет.

                                                                                                                                                                                                Так и в js этого нет. Компренде?
                                                                                                                                                                                                Это появляется, когда вы начинаете использовать чужой код, и чем больше вы его используете, тем больше шансов словить разные интересные эффекты. Для php этот принцип тоже отлично работает — были у меня знакомые пхписты, рассказывавшие всякие интересные истории.

                                                                                                                                                                                                И да большинство говорящих делай «нормально» забывают рассказать где почитать как нормально и даже банально дать ссылок на почитать.

                                                                                                                                                                                                Так вы не задаете конкретных вопросов и не приходите с конкретными проблемами. Я не могу сказать вам, что почитать по проблеме «у меня всё плохо», уж извините.

                                                                                                                                                                                                Вы вот сами скажите, считаете что та помойка что наблюдается в npm это нормально?

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

                                                                                                                                                                                                Так и запишем, как «нормально» делать мы вам не расскажем это тайные знания.

                                                                                                                                                                                                Я вам рассказал еще в позапрошлом посте. Решением проблемы «кривые пакеты не минифицируются правильно» является настройка правил или исключений минификации конкретно для этих пакетов. Или вам нужны инструкции в стиле «для бабушек», в какую конкретно часть экрана ткнуть и на какие кнопки на клавиатуре нажать? Нет уж, это сами.
                                                                                                                                                                                                  0
                                                                                                                                                                                                  Это появляется, когда вы начинаете использовать чужой код, и чем больше вы его используете, тем больше шансов словить разные интересные эффекты. Для php этот принцип тоже отлично работает — были у меня знакомые пхписты, рассказывавшие всякие интересные истории.

                                                                                                                                                                                                  В php раньше было хуже не спорю. Но сейчас есть compositor


                                                                                                                                                                                                  Так вы не задаете конкретных вопросов и не приходите с конкретными проблемами. Я не могу сказать вам, что почитать по проблеме «у меня всё плохо», уж извините.

                                                                                                                                                                                                  Я конкретный пример привел. И там вполне конкретная проблема нет?


                                                                                                                                                                                                  Я вам рассказал еще в позапрошлом посте. Решением проблемы «кривые пакеты не минифицируются правильно» является настройка правил или исключений минификации конкретно для этих пакетов. Или вам нужны инструкции.

                                                                                                                                                                                                  Мне нужен банальный пример. Или где посмотреть это. Я вот смотрел конечно знаете ли сидеть и разматывать и изучать 100500 минификаторов не очень прикольно. А рассказывать я вам дал референс. Ну я тоже могу дать референс.

                                                                                                                                                                                                    0
                                                                                                                                                                                                    Я вот смотрел конечно знаете ли сидеть и разматывать и изучать 100500 минификаторов не очень прикольно.

                                                                                                                                                                                                    У вас есть конкретная ситуация, выливающаяся в конкретные сообщения об ошибках (когда минифицированный код сломается), почему вы не изучаете её, а пишете про «100500 минификаторов»?
                                                                                                                                                                                                    Вы каким конкретно пользовались? Вот его и изучайте. Нет в нем возможности сконфигурировать исключения? Возьмите другой. Есть? Настройте. Минификатор по умолчанию делает что-то небезопасное над кодом? Отключите. И так далее.

                                                                                                                                                                                                    Что за отношение «не хочу ничего знать, у меня лапки»?
                                                                                                                                                                                                      0

                                                                                                                                                                                                      К примеру потому что про нормальную по вашим словам настройку, про ту самую нормально делай нормально будет нет внятного мануала. Ни для одного минификатора. Есть только референс и начальные туториалы делай так и все. Вот вам начальный туториал, смотрите как клево и вот вам референс. Думаю мне не надо рассказывать что между простым туториалом и референсом пропасть?


                                                                                                                                                                                                      Из этого и рождается ваш js уг и компиляция идет медленно. Этому же еще способствует и инфраструктура и настройки по умолчанию и общая культура кода в npm. Если уж вы знаете как и можете написать нормальный мануал you are welcome. Вполне достаточно будет просто описать самые часто встречаемые случаи и как их лучше решать. Такой сборник рецептов. Если знаете сборники рецептов можно просто ими поделиться.


                                                                                                                                                                                                      А говорить делай нормально и я умею.

                                                                                                                                                                                                        –1
                                                                                                                                                                                                        К примеру потому что про нормальную по вашим словам настройку, про ту самую нормально делай нормально будет нет внятного мануала.

                                                                                                                                                                                                        Вы это всерьез пишете? Или это уже троллинг, или что-то из серии «сам не слушал, Рабинович напел»?
                                                                                                                                                                                                          0

                                                                                                                                                                                                          Нет это не троллинг. Это именно проблема. Ну вот вы мне дали reference. Дальше я беру ставлю, собирается медленно как у автора. Какие мои дальше действия? Давайте откроем документацию и посмотрим. А там про это ничего не говорится.


                                                                                                                                                                                                          Я максимум могу подозревать что надо запустить с флагом --timings а потом смотреть каждую подозрительную либу почему же медленно да?

                                                                                                                                                                                                            0
                                                                                                                                                                                                            Вы начинаете путаться в показаниях. То у вас внешние зависимости и ничего нельзя собрать в кучу, потому что минификация не проходит, то уже у вас «медленно как у автора». Какую проблему вы вообще пытаетесь решать?
                                                                                                                                                                                                              0

                                                                                                                                                                                                              У меня есть обе проблемы. Если уж интересно. И да про второй случай там так же особо ничего не написано. Как и то как найти эту проблему и на каком модуле это происходит.

                                                                                                                                                                                                                0
                                                                                                                                                                                                                Отлично, значит и разбираться с этим нужно по отдельности, а не «ой сделайте мне хорошо».

                                                                                                                                                                                                                По поводу тормозов — сколько кода у вас в проекте вашего и внешнего? Сколько файлов? Какой размер получается в итоге? Что еще (помимо минификации) выполняется при билде? Сколько времени и ресурсов занимает каждый шаг билда по отдельности?

                                                                                                                                                                                                                Хотите что-то улучшить — диагностируйте, выясните, что конкретно у вас происходит, и в какой момент всё плохо (и плохо ли это, может быть у вас размер кода такой, что оно нормально).
                                                                                                                                                                                                                  0
                                                                                                                                                                                                                  Сколько времени и ресурсов занимает каждый шаг билда по отдельности?

                                                                                                                                                                                                                  И тут возникает вопрос как это смотреть и диагностировать. Ручками ходить по node_modules?

                                                                                                                                                                                                                    –1
                                                                                                                                                                                                                    И тут возникает вопрос как это смотреть и диагностировать.

                                                                                                                                                                                                                    Эм. Билд-то ваш, а не чей-то. Выполнить каждый шаг билда по отдельности, померить время?
                                                                                                                                                                                                                      0

                                                                                                                                                                                                                      Вопрос про инструменты. Я вот смотрел в эту сторону и вижу только ручками разве что ковыряться. А это не сказать что быстро.

                                                                                                                                                                                                                        0
                                                                                                                                                                                                                        Конечно «ручками ковыряться». Это явно вытекает из «опенсорс вам ничего не должен» — если у вас что-то работает не так, то разбираться в этом придётся вам, и даже если вы достоверно определите, что проблема в инструментах — то всё равно вам ничего никто не должен, и вы можете разве что issue открыть, или форкнуть инструмент и доделать сами, или пользоваться чем-нибудь еще.
                                                                                                                                                                                                                        По-другому — только тогда, когда вы инструменты покупаете, а совсем по-другому — когда ежемесячно платите за выделенную техподдержку. Вот тогда ради вас если уж и не расшибутся, то по крайней мере пойдут отрабатывать ваши инциденты, а не скажут «сам вкуривай».
                                                                                                                                                                                                                          0

                                                                                                                                                                                                                          И теперь мы возвращаемся к делай "нормально". По этому и не делают. Потому что банально нельзя просто посмотреть почему и надо разматывать весь node_modules. И рекомендаций кроме запускай 100500 раз и ковыряй в ручную модули никаких нет.


                                                                                                                                                                                                                          Зато каждый раз рассказать нормально делай могут да. А когда реальная критика доезжает до указания проблем, дискуссия уезжает в это "opensource" вам тут никто ничего не обязан.


                                                                                                                                                                                                                          Штош больше вопросов не имею :)

                                                                                                                                                                                                                            0
                                                                                                                                                                                                                            Потому что банально нельзя просто посмотреть почему и надо разматывать весь node_modules.

                                                                                                                                                                                                                            Можно, но это ж надо смотреть (соответствующими инструментами, анализаторами сборки, подробными логами билдов, и так далее), а не ныть на хабре. Первое — сложно, второе — просто. Вот и не делают. Сложно.

                                                                                                                                                                                                                            И рекомендаций кроме запускай 100500 раз и ковыряй в ручную модули никаких нет.

                                                                                                                                                                                                                            Я вам предложил список действий к проблеме «билдится долго». Беда в том, что он вам опять не нравится, т.к. опять надо идти разбираться с этим самому, а не то, что вдруг приедет Санта-Клаус и сделает хорошо.
                                                                                                                                                                                                                            Конечно, я мог бы посмотреть в ваш код и предложить чуть менее общие слова, но т.к. принцип «писать на хабре просто, а вкуривать код сложно» работает и для меня тоже — то не буду. Вам отвечать я могу параллельно с присутствием на совещаниях и разбором входящей почты, например, а вот в код смотреть — уже нет, это куда более затратное занятие.

                                                                                                                                                                                                                            Штош больше вопросов не имею :)

                                                                                                                                                                                                                            Опять Санта-Клаус не пришел?
                                                                                                                                                                                                                              0
                                                                                                                                                                                                                              Можно, но это ж надо смотреть (соответствующими инструментами, анализаторами сборки, подробными логами билдов, и так далее),

                                                                                                                                                                                                                              Я вообще-то про инструменты и спрашивал. На что вы мне же говорите да ручками. Какая-то не стыковочка.


                                                                                                                                                                                                                              Мне нужны инструменты. А не пространные заявления посмотрите там. Внимательно прочитайте мои вопросы. Вопросы просты. За все это время ни одной ссылки ни на анализатор сборок и подобных инструментов нет. Я делаю вывод что их тупо нет и все ковыряются руками.


                                                                                                                                                                                                                              Более того никаких мануалов внятных не гуглится. Тут или я не так задаю ключевые слова либо это просто никто не делает и не описывает, а только говорит "нормально" делай.


                                                                                                                                                                                                                              Так что будут ссылки на какие нибудь анализаторы?

                                                                                                                                                                                                                                –1
                                                                                                                                                                                                                                Я вообще-то про инструменты и спрашивал. На что вы мне же говорите да ручками. Какая-то не стыковочка.

                                                                                                                                                                                                                                Ничего подобного — инструменты скорее всего есть, а вот разбираться вам придётся «ручками».

                                                                                                                                                                                                                                За все это время ни одной ссылки ни на анализатор сборок и подобных инструментов нет. Я делаю вывод что их тупо нет и все ковыряются руками.

                                                                                                                                                                                                                                Какие вы ожидаете ссылки, если вы не приходите с полной технической информацией о вашем билде? Анализаторы для разных билд-инструментов тоже разные (внезапно). Гугл их все знает, к слову.

                                                                                                                                                                                                                                Это уже не говоря про то, что вообще такой диалог напоминает классическое «а если я скажу из окна прыгнуть — вы прыгнете?». Вас не забанили же в гугле, нет?

                                                                                                                                                                                                                                Более того никаких мануалов внятных не гуглится. Тут или я не так задаю ключевые слова либо это просто никто не делает и не описывает, а только говорит «нормально» делай.

                                                                                                                                                                                                                                Ага, и при этом вы приходите, говорите «у меня всё плохо», и ждете конкретных указаний и ссылок. Хотите конкретики — приходите со своей конкретикой, а не с «у меня всё не работает и вообще медленно». Почему вы считаете, что вы можете ожидать на хабре конкретики в ответ претензии, которые на stackoverflow вообще бы молча закрыли? Телепаты и на хабре тоже в отпуске.
                                                                                                                                                                                                                          +2
                                                                                                                                                                                                                          По-другому — только тогда, когда вы инструменты покупаете, а совсем по-другому — когда ежемесячно платите за выделенную техподдержку. Вот тогда ради вас если уж и не расшибутся, то по крайней мере пойдут отрабатывать ваши инциденты, а не скажут «сам вкуривай».

                                                                                                                                                                                                                          Я как-то работал с платной техподдержкой редхата на тему «в вашем DTS gcc валится вот на таком коде», и это было так себе. В итоге я сам нашёл проблему, сам нашёл патч на gcc'шной багзилле, сам им всё скинул и в итоге они доблестно собрали новый gcc специально для нашей команды (через два месяца, когда я нашёл и workaround, так что мы его даже ставить не стали).


                                                                                                                                                                                                                          Но да, поддержка есть, это факт. Деньги тоже исправно берут.

                                                                                                                                                                                                    0
                                                                                                                                                                                                    Да. Более того, я уверен, что любая опенсорс-экосистема неизбежно превращается в помойку с ростом популярности и эволюцией технологий. Вы вот помойку компонентов дельфи видели в годы её расцвета? Я видел.

                                                                                                                                                                                                    Любая вообще экосистема.


                                                                                                                                                                                                    Я видел пару корпоративных — там та же ерунда, просто вы о ней никогда не узнаете, не соприкоснувшись с этими корпорациями (то есть, считайте, не поработав в них).

                                                                                                                                                                                                    0
                                                                                                                                                                                                    Еще раз намекну что в других языках, даже в php этого нет.

                                                                                                                                                                                                    Ну начнем с того что PHP — это серверный язык. Никто серверные проекты для ноды, написанные на JS, не собирает и уж точно не минифицирует. Минификация — это чисто фронтовая вещь. Максимум вам может транспиляция потребоваться для поддержки неутвержденных возможностей языка. Ну так на PHP Вы просто не сможете использовать неутвержденные возможности языка.
                                                                                                                                                                                                    Продолжить можно, упоминавшейся здесь Java. Где проекты, написанные на Java 8 почему-то не работают на Java 6, если им просто установить target=1.6, и точно также требуют различных костылей для сборки под старые Android.
                                                                                                                                                                                                    Ещё можно вспомнить про несовместимость C++ библиотек, собранных разными версиями компилятора.
                                                                                                                                                                                                      0
                                                                                                                                                                                                      Никто серверные проекты для ноды, написанные на JS, не собирает и уж точно не минифицирует. Минификация — это чисто фронтовая вещь.

                                                                                                                                                                                                      Ага и в итоге приложение которое я выше привел которое перекладывает байты из com порта в mqtt транспорт даже после tree shaking занимает 76 мегабайт. А если его попробовать минимифицировать занимает 1.2 мега но перестает работать. Или вы мне хотите сказать что на серверах места же много? Ну как сказать не везде. И сам интерпретатор ноды весит вообщето в переделах 50. Почему мне вот критичен такой размер я уже рассказывал, но повторюсь, мне к примеру надо запихнуть его на arm машину где 128мегабайт флеша под систему.


                                                                                                                                                                                                      В java такой вот ерунды нет. Там проект после сборки не требует тащить за собой все либы которые ставились для разработки.

                                                                                                                                                                                                        +1
                                                                                                                                                                                                        Никто серверные проекты для ноды, написанные на JS, не собирает

                                                                                                                                                                                                        Я собираю. В результате получается один небольшой быстро запускаемый js-ник, а не 100500 ненужных файлов, более 9000 из которых приходится загружать при старте.


                                                                                                                                                                                                        Минификация — это чисто фронтовая вещь.

                                                                                                                                                                                                        Она и на фронте не особо нужна.


                                                                                                                                                                                                        Максимум вам может транспиляция потребоваться для поддержки неутвержденных возможностей языка.

                                                                                                                                                                                                        И для статической типизации.

                                                                                                                                                                                                          0

                                                                                                                                                                                                          Ну вот хоть кто-то это делает. Рассскажете как и чем минимифицируете и что делать если не хочет? :)

                                                                                                                                                                                                            0

                                                                                                                                                                                                            Я ничего не минифицирую же.

                                                                                                                                                                                                              0

                                                                                                                                                                                                              Хм. Просто собирается в один файл без минимификации? Ну может прокатить.

                                                                                                                                                                                                          0
                                                                                                                                                                                                          и точно также требуют различных костылей для сборки под старые Android.

                                                                                                                                                                                                          Потому что на Android нету Java. У Java есть набор правил, которым необходимо следовать, иначе она не работает, и Android их нарушает. Это — одна из причин их суда с создателями Java, ни много ни мало. В общем случае, библиотеки, написанные на Java, вообще не обязаны запускаться на Android.

                                                                                                                                                                                                +3
                                                                                                                                                                                                только вот режим watch работает через раз и часть изменений просто игнорит, и один фиг приходится пересобирать всё заново.
                                                                                                                                                                                                Безотносительно сборки intelisense на тайпскриптовом проекте работает в разы медленнее того же c# и часто вообще не работает. Можно просто сравнить удобство работы в Rider над C# кодом и Typescript в Webstorm — одни и те же создатели, и такой разный user expirience.

                                                                                                                                                                                                Я на самом деле не холивара ради, ну реально работать феерически неудобно. Я допускаю, что я делаю что-то не так. Но на беке всё работает быстро и удобно из коробки — с фронтом постоянные анальные боли. Был бы очень востребован цикл статей «как работать с фронтендом без боли» или «повышаем удобство разработки на фронтенде»
                                                                                                                                                                                                  0
                                                                                                                                                                                                  ради интереса — а не пробовали vscode? меня связка vscode + typescript устраивает, но, возможно, я просто не видел хорошей жизни (C# и Rider).
                                                                                                                                                                                                +3
                                                                                                                                                                                                Ждем следующей огненной статьи «Код на моем лэптопе работает быстрее чем на 100500-ядерном сервере: скандалы, интриги, расследования».
                                                                                                                                                                                                  +1
                                                                                                                                                                                                  Это, кстати, часто так для однопоточного кода.
                                                                                                                                                                                                  Если взять i7 и xeon одного поколения и там будут только вычисления без дикого использования памяти, разница может быть 15-20% в пользу ноутбучного i7. Не скажу, что делал всеобъемлющее тестирование, но подобные результаты на разном коде в разные года наблюдал.
                                                                                                                                                                                                    0
                                                                                                                                                                                                    Если не вдаваться в подробности, то однопроцессорные Xeon'ы, это те же i7, и раньше могли быть взаимозаменяемы (серверный проц в десктопную мамку или наоборот). Потом интел подкрутила гайки. А вот двухпроцессорные и более — имеют гораздо более низкую частоту, чтобы уложиться в пакет и нормально синхронизированно работать в паре. А ядро в целом — то же. Т.е. для числодробилок разница в результатах ровно такая же как и разница в частоте. Т.е. десктопный i7 порвёт ксеоны на грелки и ещё успеет кофе налить (у него же Турбобуст есть).
                                                                                                                                                                                                  –1
                                                                                                                                                                                                  Игры тоже разными бывают. Одни умело запаковывают все в несколько ресурсных файлов, другие держат в своей директории тысячи мелких файлов, из-за чего файловая система и антивирус сходят с ума все это проверять, устанавливать и удалять.
                                                                                                                                                                                                    +1
                                                                                                                                                                                                    Статьи про кофе интересные, но хотелось бы и технических ответов на такие вопросы.
                                                                                                                                                                                                      +1

                                                                                                                                                                                                      Могу предположить, что проблема кроется в браузерах. По их вине фронт это JS, который не приспособлен для сложный проектов из коробки. Если бы у вас фронт был такой, каким JS задумывали — вы бы просто открыли HTML+JS файлик в браузере и увидели результат (вопрос о быстродействии браузера это отдельная тема, вот например).
                                                                                                                                                                                                      Тут же происходит натягивание совы на глобус в виде транспайлинга тайпскрипта в JS, статических чеков, компиляции стилей, линковки горы библиотек (для которых происходит почти то же самое, так как они в исходниках), минификации и прочей вакханалии.
                                                                                                                                                                                                      Так что не стоит винить фронтэндеров в том, что они не умеют в кодинг. Если бы ваш бэк ограничили только перфокартами я бы посмотрел на время сборки проекта в 1000 строк.

                                                                                                                                                                                                        +2

                                                                                                                                                                                                        Совсем нет. То, что автор использовал для попытки разжечь холивар, и то, что вы называете "проблемой" — всего лишь запросы пользователей. Вы же отправили этот комментарий в браузере. И я. И автор. Мы все тут используем инструмент, называемый "Хабр" и сделанный на обсуждаемых технологиях. При этом почему-то никому не приходит в голову расстраиваться, что у нас вместо летающих досок из "Назад в будущее" есть максимум электрические самокаты на колёсиках, дрыгающиеся на каждом камушке. Это не проблема, просто вода течёт вниз, а масло — масляное.


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

                                                                                                                                                                                                          +2
                                                                                                                                                                                                          почему-то никому не приходит в голову расстраиваться, что у нас вместо летающих досок из «Назад в будущее» есть максимум электрические самокаты на колёсиках, дрыгающиеся на каждом камушке.

                                                                                                                                                                                                          В смысле никому?
                                                                                                                                                                                                        +4
                                                                                                                                                                                                        Хочу поддержать автора, пусть даже он и перегибает палку. Но зайду немного с другой стороны — а для чего вообще нужна разного рода компиляция для интерпретируемого языка? На мой взгляд проблема кроется не в криворукости фронтендеров, а в отсутствии нормальных DOM-примитивов, которыми можно было бы эффективно управлять из JavaScript. По идее, сегодня для создания фронтенда нужен только JS и CSS, для HTML же остается только ниша статики.

                                                                                                                                                                                                        Вот только производители браузеров по какой-то причине не хотят сделать нормальные нативные DOM-примитивы, которые позволяли бы не заниматься разного рода извращениями, а писать простой и понятный код, сдабривая его CSS-оформлением. Приведу только один пример, близкий мне. Вот почему для DOM-элемента table нет реализации горизонтальной и вертикальной прокрутки таблицы, размеры которой превышают заданный прямоугольник? Лично мне не понятно.

                                                                                                                                                                                                        Ладно раньше, когда Microsoft козлячил, пытаясь двигать свои стандарты поперек сообщества. Но сегодня-то что мешает? Отсюда и разного рода извращения, по разному реализованные у Google, Microsoft и других разработчиков, чтобы реализовать ту же таблицу, которую в Java 1.1 более 20 лет назад можно было сделать с нуля за неделю, а затем использовать в Java-апплетах.

                                                                                                                                                                                                        Ну ладно корпорации, которым выгодно создавать на пустом месте рынки сбыта для своей продукции. Но вот почему эта тема не звучит в профессиональном сообществе? Предлагаю поднять этот вопрос на площадке Хабра.
                                                                                                                                                                                                          +2
                                                                                                                                                                                                          Вот только производители браузеров по какой-то причине не хотят сделать нормальные нативные DOM-примитивы, которые позволяли бы не заниматься разного рода извращениями, а писать простой и понятный код, сдабривая его CSS-оформлением

                                                                                                                                                                                                          Вам не кажется забавным читать вперемежку обсуждения про то, что браузеры настолько сложные, что впору говорить о технической монополии, и про то, что разработчики браузеров козлячат и извращаются вместо того, чтобы просто взять и сделать простейшие вещи красиво (и обязательно так, как хочется автору)?

                                                                                                                                                                                                            0
                                                                                                                                                                                                            Для инфраструктурных проектов такое положение дел в порядке вещей. Просто в последние годы сложность элементарных вещей на фронтенде начинает просто зашкаливать. И если тот же Google со своим движком V8 не будет ничего делать в этом направлении, то на ровном месте может появится его конкурент, который в один прекрасный момент сделает ненужным все эти TypeScript, React, Angular и прочие костыли для JavaScript.

                                                                                                                                                                                                            Для начала это будет браузер, ориентированный на корпоративных клиентов, позволяющий писать легкие и быстрые SPA на JS в ООП-стиле без всякого рода прокладок в виде фреймворков. Затем через некоторое время для этого браузера будет реализован веб-офис (почта, текстовый редактор, электронная таблица), который будет не ползать, а летать. Ну а дальше начнется экспансия этого браузера в попсовый интернет, может медленная, а может и взрывная.
                                                                                                                                                                                                              +1
                                                                                                                                                                                                              легкие и быстрые SPA на JS в ООП-стиле без всякого рода прокладок в виде фреймворков
                                                                                                                                                                                                              Допустим да, можно сваять свой маленький и лёгкий DSL, чтобы делать нишевые приложения с шахматами и поэтессами. А экспансия будет тоже без прокладок и костылей?
                                                                                                                                                                                                                0
                                                                                                                                                                                                                Может быть, хитрая реализация, которая определённые функции напрямую пробрасывает в движок, а в сторонних браузерах — в обычную JS-прослойку?
                                                                                                                                                                                                                  0
                                                                                                                                                                                                                  В точку.
                                                                                                                                                                                                                    0
                                                                                                                                                                                                                    Чуть ниже уже указал на XUL. Как оказалось, FF уже дропнули его, зато есть некий Basilisk. Понятия не имею, что не так с FF, раз они дропнули XUL, и что не так с Basilisk, раз они не начинают экспансию в попсовый интернет.

                                                                                                                                                                                                                    Беглый поиск не показал, что есть какие-либо полифилы для поддержки XUL в других браузерах. Значит вы можете приблизить светлое будущее, занявшись этим :)
                                                                                                                                                                                                                  0
                                                                                                                                                                                                                  Речь не идет ни о каких DSL, а только о повышении функциональности существующих DOM-элементов, чтобы ими можно было легко управлять средствами JS. Например:

                                                                                                                                                                                                                  1. Для элемента table сделать горизонтальную и вертикальную прокрутку, при этом чтобы элементы td не прокручивались, а лишь менялось содержимое данных таблицы, чтобы можно было делать большие таблицы без просадов по памяти.

                                                                                                                                                                                                                  2. Сделать нормальные компоновщики в виде html-элементов вместо CSS-костылей в виде Flexbox Layout и Grid Layout.

                                                                                                                                                                                                                  3. Сделать дочерние окна, в том числе вызываемые alert, prompt и confirm, в виде компонента типа div, для которого можно настраивать содержимое штатным образом и устанавливать режим модальности.

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

                                                                                                                                                                                                                  Это то, что сразу приходит на ум, когда сравниваешь создание интерфейсов на Java и JavaScript. И еще раз подчеркну, речь идет о приложениях типа Excel и 1С, которые востребованы именно в корпоративном секторе.
                                                                                                                                                                                                                    +1
                                                                                                                                                                                                                    4: ExtJs, jQueryUI и ещё сотня таких же.
                                                                                                                                                                                                                      +1
                                                                                                                                                                                                                      Указанные Вами библиотеки вводят дополнительные уровни абстракций, упрощая программирование за счет снижения производительности и увеличения объема кода. Предлагаемые же предложения направлены на реализацию такой функциональности на уровне движка браузера.
                                                                                                                                                                                                                    0
                                                                                                                                                                                                                    1. position: sticky
                                                                                                                                                                                                                    2. <table>
                                                                                                                                                                                                                    3. <dialog>
                                                                                                                                                                                                                    4. role="tablist" и тд
                                                                                                                                                                                                                      +1
                                                                                                                                                                                                                      Речь не идет ни о каких DSL, а только о повышении функциональности существующих DOM-элементов, чтобы ими можно было легко управлять средствами JS. Например:

                                                                                                                                                                                                                      Есть подозрение, что для этого вам не надо ничего изобретать, надо всего лишь отправиться в ближайшее прошлое на пару десятков лет назад. В прошлое — потому что «этого» уже не существует, «это» уже выпилено из FF, как оказалось. Я про XUL.

                                                                                                                                                                                                                      Вот например вам табы: Табы, там рядом найдёте много всего интересного, в том числе все ваши 4 пункта. И вот это вот всё было готово к использованию, работало вместе с привычными addEventListener() и стилизовалось через css. Но для целей, о которых вы говорите, особой стилизации и не надо.

                                                                                                                                                                                                                      Спустя 20 лет это может показаться куцым, но на тот момент это был очень богатый набор возможностей. Почему же не взлетело?
                                                                                                                                                                                                                0
                                                                                                                                                                                                                Сдается мне, производители браузеров столько раз уже делали подход к этому станку с самых разных сторон, что в итоге получилось… То что получилось.
                                                                                                                                                                                                                  0
                                                                                                                                                                                                                  Ну, еще не все закончено. В принципе, концепция стандарта html5, предполагающая разработку отдельных модулей, позволяет постепенно вносить в модель DOM нужные изменения.

                                                                                                                                                                                                                  Например, возьмем модули Flexbox Layout и Grid Layout, в которых по какой-то странной причине управление размещением компонентов определено на уровне CSS, а не на уровне HTML. В результате из JS-кода приходится работать не напрямую с DOM, а генерить кучу лишнего кода для работы с CSS-файлами, так как из JS кода нет доступа к модели данных CSS, а это означает периодическое обращение к медленному диску, пусть даже и SSD.

                                                                                                                                                                                                                  Так вот, теоретически в дополнение к компоновке на уровне CSS можно сделать реализацию компоновки на уровне HTML, чтобы работать из JS напрямую с контейнерами, которые бы автоматически меняли все размеры при добавлении компонентов в ту или иную область. Чтобы просто писать теги
                                                                                                                                                                                                                  <flex-layout>...</flex-layout>
                                                                                                                                                                                                                  вместо использования конструкции
                                                                                                                                                                                                                  <div class="flex-layout">...</div>
                                                                                                                                                                                                                  c определением в CSS-файле
                                                                                                                                                                                                                  flex-layout { display: flex;}

                                                                                                                                                                                                                  В общем идея применительно к данному модулю заключается в том, чтобы переместить из CSS в HTML любой функционал, который определяет не внешний вид, а поведение отдельных компонентов страницы. Ну а для совместимости оставить функционал в CSS, который будет работать не напрямую с движком браузера, а через DOM-моделью.
                                                                                                                                                                                                                +14
                                                                                                                                                                                                                Вопрос — как сделать, чтобы этот автор не вылезал у меня в ленте хабра вообще нигде?
                                                                                                                                                                                                                  +4
                                                                                                                                                                                                                  Ответ — написать через форму фидбека или в комментариях к очередной статье «АМА с Хабром» предложение создать новую фичу «отписка от отдельных авторов», чтобы в "мою ленту" не попадали статьи указанных авторов, даже когда они пишут в хабы, на которые я подписан.
                                                                                                                                                                                                                  Теоретически, если будет много подобных запросов, то фича будет реализована.
                                                                                                                                                                                                                    0

                                                                                                                                                                                                                    Хотелось бы иметь возможность скрывать таких авторов не только в "Моей ленте", но и в ленте "Все потоки".

                                                                                                                                                                                                                      +2
                                                                                                                                                                                                                      По определению, «все потоки» — это все потоки.
                                                                                                                                                                                                                      Если Вам нужна избранность потоков, то для этого существует настраиваемая «моя лента».
                                                                                                                                                                                                                      Впрочем, каждый может предложить свою идею в форме фидбека, в комментариях под АМА или где-то еще. Включая идею по фильтрации «всех потоков». Если оно действительно нужно и полезно, а не просто «хотелось бы», то для реализации следует приложить какие-то усилия, а не просто жаловаться на несовершенство мира в первом попавшемся месте. Сделайте, хотя бы, первый шаг.
                                                                                                                                                                                                                        –4

                                                                                                                                                                                                                        Спасибо, товарищ воспитатель.
                                                                                                                                                                                                                        Я часто списываюсь с поддержкой Хабра.
                                                                                                                                                                                                                        Оставайтесь на линии, ваша язвительность очень важна для нас.

                                                                                                                                                                                                                          +2
                                                                                                                                                                                                                          Но ведь действительно, все — значит все. Это лента где специально вообще без каких либо фильтров все отображается.
                                                                                                                                                                                                                            –3
                                                                                                                                                                                                                            Так кто ж, спорит, это нормальный тезис.
                                                                                                                                                                                                                            Я же ответил взволнованному товарищу, который зашёл в класс с плохим настроением и стал воспитывать, кому тут какие первые шаги делать надо. ))

                                                                                                                                                                                                                            P.S. Что вдвойне примечательно, так это то, что у комментатора выше, ведущего беседу в такой довольно негативной интонации, в Профиле заявлены ссылки на Хабраэтикет и на "Неочевидные правила спора".

                                                                                                                                                                                                                              0

                                                                                                                                                                                                                              С другой стороны, на разнообразных ресурсах обычно чёрный список учитывается для лент со всем разом. Если вы кого-то заблокировали — вы не хотите его видеть никогда.

                                                                                                                                                                                                                      +1
                                                                                                                                                                                                                      Не читать его, очевидно же
                                                                                                                                                                                                                        0
                                                                                                                                                                                                                        Так на плашке статьи нету большой красной ни большой, ни красной плашки «SMM-отстой», юзер-скрипт писать некогда.
                                                                                                                                                                                                                        0

                                                                                                                                                                                                                        Но 20к просмотров же есть)
                                                                                                                                                                                                                        Это мой первый и последний комментарий под статьями данного автора, вне зависимости от того, насколько меня трогает тема.
                                                                                                                                                                                                                        И вам того же желаю. Только лишь забвение будет наказанием этому хайпожору.

                                                                                                                                                                                                                          +1
                                                                                                                                                                                                                          А ты не читай, вот и все. Я уже сразу по заголовку определяю кто автор
                                                                                                                                                                                                                          +43

                                                                                                                                                                                                                          Вспомнилось
                                                                                                                                                                                                                          image

                                                                                                                                                                                                                            +6
                                                                                                                                                                                                                            Омг, какая же жиза. Да, за вебом будущее, но какое же это говнище в настоящем. Над вебом ещё работать и работать… С нетерпением жду следующую статью про размер папок node_modules на вашем новеньком SSD (и вообще про репозиторий-помойку под именем npm).

                                                                                                                                                                                                                            p.s.
                                                                                                                                                                                                                            Единственный нормальный корпоративный блог. Хотя бы что-то интересное пишут за свои деньги.
                                                                                                                                                                                                                              0
                                                                                                                                                                                                                              Кстати, многие статьи им ( и другим корпоративным блогам) пишет alizar, как он говорил в интервью, помещая эти статьи в своё избранное.
                                                                                                                                                                                                                              +3

                                                                                                                                                                                                                              У меня ноутбук куплен за 36 т.р. в начале года. Добавлено оперативки до 8 гб. Проекты по типу такого как описывает автор собираются ну пару минут максимум в продакшн режиме. Дев стартует за минуту, а потом в процессе работы HMR работает почти мгновенно. ЧЯДНТ?

                                                                                                                                                                                                                                0

                                                                                                                                                                                                                                Yarn почему-то никто не упомянул. И не предложил выкинуть вскод. Не умеете вы холиварить)

                                                                                                                                                                                                                                  +18
                                                                                                                                                                                                                                  image
                                                                                                                                                                                                                                    0

                                                                                                                                                                                                                                    Ждём green code у фронтендеров

                                                                                                                                                                                                                                      +4
                                                                                                                                                                                                                                      Я мечтаю работать там, где js, node и т.д. вообще не используются.
                                                                                                                                                                                                                                      Но чертов веб везде, куда ни сунься.
                                                                                                                                                                                                                                      Не понимаю, как люди могут фанатеть от этих убогих технологий.

                                                                                                                                                                                                                                        0
                                                                                                                                                                                                                                        к сожалению на убогих технологиях построен целый рынок поисковиков и контекстной рекламы.
                                                                                                                                                                                                                                          0
                                                                                                                                                                                                                                          Я потому и выбрал мобайл что на беке скорее всего все равно придется сталкиваться с ними (ну еще и потому что мне сама идея карманного вычислительного устройства нравится, но это к делу не относится).
                                                                                                                                                                                                                                            +1
                                                                                                                                                                                                                                            Я потому и выбрал мобайл

                                                                                                                                                                                                                                            А там/тут теперь тоже "тонкие клиенты", открывающие всё приложение из веб-бандла в системном WebView. Нет сейчас ничего, куда бы оно не просачивалось.

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

                                                                                                                                                                                                                                            Просто эти люди не видели нормальных технологий и все.

                                                                                                                                                                                                                                              0

                                                                                                                                                                                                                                              Уже выросло поколение?

                                                                                                                                                                                                                                            0
                                                                                                                                                                                                                                            Я достаточно поверхностно знаком с фронтенд инструментам сборки, но первое, на что я обратил внимание при знакомстве с ними — они полагаются на hot reload и полностью игнорируют файловый кеш между сборками. И именно из-за этого у бекендеров возникает больше всего негодования — «я только что собрал проект, потом изменил одну строчку и теперь он опять полностью пересобирается. WTF?». А ответ прост — ты два раза запускаешь сборку новой командой, вместо того чтобы использовать hot reload. Обычно кеш можно добавить отдельными модулями, но они редко используются.
                                                                                                                                                                                                                                            Может это и неплохой подход — зачем лишний раз писать кеш на диск, если есть память постоянно запущенного процесса. Но это раздражает, когда нужно быстро переключится на проект и исправить одну строчку. Каждый раз ощущение, что люди писавшие это никогда в глаза не видели нормальных компиляторов. Но видимо это такая вот архитектура.
                                                                                                                                                                                                                                            Поправьте, если я не прав.
                                                                                                                                                                                                                                              +1

                                                                                                                                                                                                                                              Там проблема в том что далеко не все хотрелоадися.

                                                                                                                                                                                                                                                +2
                                                                                                                                                                                                                                                Если одновременно нет кеша между сборками и хот релоада, то это уже не архитектура, а Г. и автор правильно негодует.
                                                                                                                                                                                                                                              +7
                                                                                                                                                                                                                                              И опять «король» на связь выходит. Кто-то, по какой-то причине, еще читает его статьи? Это же просто копирайтинг в корп. блог. Дарья Донцова хабра.
                                                                                                                                                                                                                                                +4
                                                                                                                                                                                                                                                Кто-то, по какой-то причине, еще читает его статьи?

                                                                                                                                                                                                                                                Это же просто приемлемая для хабра литературная обёртка над «ваше N говно» (пока что в N были: C#, js/node/npm, программисты; ждем новых серий). Сюда не статью читать приходят, а под неё.
                                                                                                                                                                                                                                                0

                                                                                                                                                                                                                                                Вводя рекурсивные типы авторы тайпскрипта открыли ящик пандоры. Теперь в пару строк можно запросто подвесить вывод типов на 5 секунд и выжрать всю память. И диагностировать это нормальных средств нет. Кроме того, тайпскрипт не умеет толком кешировать промежуточную работу на диск, а это значит, что запуск не в режиме наблюдения приводит к куче лишней работы.

                                                                                                                                                                                                                                                  0
                                                                                                                                                                                                                                                  Вам нужны рекурсивные типы, чтоб всё поломать? Я в свое время намертво вешал вебпак, когда пытался его изучать «методом научного тыка». Это вообще даже не код, а параметры конфигурации.
                                                                                                                                                                                                                                                  Всё поломать неожиданным способом вообще можно абсолютно всегда. А если вы считаете что нельзя — скорее всего вам не хватает фантазии.

                                                                                                                                                                                                                                                  Кроме того, тайпскрипт не умеет толком кешировать промежуточную работу на диск

                                                                                                                                                                                                                                                  Тайпскрипт уже умеет в инкрементальные билды с сохранением информации на диск. Правда, это пока всё еще не безпроблемно — может вести к ложноотрицательным прохождениям билда при определенных правках кода (инкрементальный билд проходит, а полный падает).
                                                                                                                                                                                                                                                    0

                                                                                                                                                                                                                                                    У меня свой сборщик, который не надо постоянно конфигурировать.


                                                                                                                                                                                                                                                    Инкрементальные билды в тайпскрипте — это про проекты, а не не модули. В рамках проекта — никакой инкрементальности.

                                                                                                                                                                                                                                                      0
                                                                                                                                                                                                                                                      Инкрементальные билды в тайпскрипте — это про проекты, а не не модули. В рамках проекта — никакой инкрементальности.

                                                                                                                                                                                                                                                      Да что вы говорите, неужели. И в tsbuildinfo вы наверное не заглядывали, чтоб увидеть, что ускорение как раз достигается из-за того, что оно «про модули»?
                                                                                                                                                                                                                                                        0

                                                                                                                                                                                                                                                        Я пилил свой сборщик и ускорения от этого "инкрементального" билда не заметил. Но я перепроверю, может сейчас уже от него есть прок.

                                                                                                                                                                                                                                                  0
                                                                                                                                                                                                                                                  «Почему сборка табуретки в моем оборудованном гараже занимает полчаса, а заказ по чертежам через китайцев — полгода?» — я так это увидел.
                                                                                                                                                                                                                                                    –2
                                                                                                                                                                                                                                                    Не знаю, ребята, у меня enterprise проект с базилионами строк кода билдится около минуты с нуля и за наносекунды в дев моде. Наверное, не js плохой, а вы херовые программисты.
                                                                                                                                                                                                                                                      +5
                                                                                                                                                                                                                                                      Совершенно очевидно — вам нужна кофемашина
                                                                                                                                                                                                                                                        +1
                                                                                                                                                                                                                                                        Причем здесь фронтенд вообще в целом? На фронте используется css/js/html, это интепретируемые языки, их не надо ни во что компилировать. Есть отдельные технологии, такие как тайпскрипт, бабел, вебпак, но они не являются официальными, они могут работать как угодно и сколько угодно. Они предназначены для тех, кому они подходят, тем кто разбирается как правильно с ними работать. С чего вы вообще взяли, что вы должны именно их использовать? В конце концов, есть куча альтернатив которые на порядки быстрее — github.com/swc-project/swc, github.com/romefrontend/rome, github.com/evanw/esbuild
                                                                                                                                                                                                                                                          +1

                                                                                                                                                                                                                                                          У меня на проекте бек билдится до 15 минут и это монолит, а еще есть пачка микросервисов. Фронт, в который в ходит 10+ репортов — за минуту-две. Нельзя же так вбрасывать без конкретного примера.


                                                                                                                                                                                                                                                          А если еще вспомнить про тесты на пр… Час времени на пр, и угадайте какие тесты пробегают за пару минут?))

                                                                                                                                                                                                                                                            +1
                                                                                                                                                                                                                                                            Тоже теперь захотел выпить кофе! Уж очень аппетитно написано!
                                                                                                                                                                                                                                                              +1
                                                                                                                                                                                                                                                              Хорошо быть разрабом на сале(salesforce)… 3 мб исходников, под сотню различных файлов, десятки тысяч строк кода, а… Билдить нечего))) Deploy Source to Org и все…
                                                                                                                                                                                                                                                              Впрочем, хочу заметить, что написанный на гребаном джаваскрипте Apex Language Server в VsCode ощутимо тормозит с автокомплитом при редактировании класса в 4000 строк.
                                                                                                                                                                                                                                                                +1
                                                                                                                                                                                                                                                                Тот случай, когда автора можно угадывать по заголовку (и сразу пролистывать к комментам).

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

                                                                                                                                                                                                                                                                Вариант, что дело в прямизне рук автора, которые не в состоянии справиться с созданием вменяемого проекта с 4 формочками, рассматривается? Если это не компетенция автора, а проект чужой, то возможно, стоило бы направить конструктивную критику ту в сторону… но опять же, это противоречит условию задачи.

                                                                                                                                                                                                                                                                И, конечно, если костерить предметно, то речь зашла бы про
                                                                                                                                                                                                                                                                самый тяжелый объект вселенной
                                                                                                                                                                                                                                                                image


                                                                                                                                                                                                                                                                Но по факту статья про то, что автор вместо эффективного рабочего инструмента купил золотой унитаз за три миллиона монгольских тугриков. Потому что разработчик не обязан уметь в конфигурацию железа. И в разработку, между прочим, тоже.
                                                                                                                                                                                                                                                                  +2
                                                                                                                                                                                                                                                                  Вот тут у меня бомбит прямо. Я не могу себе представить что так долго может билдиться, если приложуху делал не криворукий человек.
                                                                                                                                                                                                                                                                  Возьмем обратную ситуацию, неужели неразбирающийся в бэке кодер не может сделать что-то, что будет чудовищно долго работать/жрать память/билдиться? Там нельзя себе в ногу выстрелить? Что, из-за этого мы будем весь бэкенд мир проклинать?
                                                                                                                                                                                                                                                                  Если фронтенд такой ужасный, то юзай чистый html, там ничего билдить не надо.
                                                                                                                                                                                                                                                                    +3
                                                                                                                                                                                                                                                                    Все диииико преувеличено, статья носит скорее развлекательный характер, нежели практический.
                                                                                                                                                                                                                                                                      0
                                                                                                                                                                                                                                                                      Тоже работаю на ПК. Планировал перейти на ноут, но передумал после этой статьи ))
                                                                                                                                                                                                                                                                        +1
                                                                                                                                                                                                                                                                        Объяснение простое — все эти ваши Vue, React и прочие в комплекте с миллионом зависимостей Node сделаны лишь для того, чтобы разработка стоила дороже для заказчика, чтобы простые и элементарные вещи решались суперсложными способами и были подкреплены миллионом зависимостей и необходимостью постоянной пересборки. Весь фронт можно написать на чистом JS, нужно просто постараться, но современные фронтенд разработчики далеко не всегда хотят стараться, а хотят использовать модные инструменты чтобы обосновать свои лишние часы работы, которые в итоге оплачивает бизнес. Не все умеют пользоваться данными инструментами по настоящему эффективно, но ведь «надо быть в тренде». В итоге — код ужасного качества, всё тормозит, зато «модно и в тренде», а бизнес потом ещё заплатит за приведение всего этого ужаса в порядок. Не надо так. Факт остаётся фактом — любая адекватная и реалистичная фронтовая задача на сегодняшний день может быть реализована простыми и доступными инструментами, просто нужно стараться.
                                                                                                                                                                                                                                                                          0
                                                                                                                                                                                                                                                                          Кейс из реальной практики: сайт на Битрикс, к которому ребята-подрядчики прибили гвоздями кусок Laravel для отдельных «сложных страниц» и отдельно приклеили Vue с миллионом зависимостей под весь фронт сайта, чтобы просто реализовать динамическую фильтрацию отдаваемых позиций. На каждый клик — ajax запрос, по которому сам сайт лезет в API поставщика, получает от него ответ, парсит, возвращает обратно пользователю. Клик по любой галочке — секунда на ответ. Подрядчики сказали что не знали как реализовать это иначе, хотя им был показан пример как это сделано у поставщика API — такой же сложный фильтр, но быстрый и эффективный, написан на чистом JS
                                                                                                                                                                                                                                                                            0
                                                                                                                                                                                                                                                                            и отдельно приклеили Vue

                                                                                                                                                                                                                                                                            Не осилили встроенный патченный Vue от самой Битрикс?
                                                                                                                                                                                                                                                                            0
                                                                                                                                                                                                                                                                            Так и нет, в тот же реакт если мусора не тащить — он не будет с «миллионом зависимостей». Подозреваю, что с вью то же самое. Эти ваши «популярные фреймворки» (кроме ангуляра, да и он не то, чтоб прям огромен) — вообще штуки довольно простые и компактные.
                                                                                                                                                                                                                                                                              0
                                                                                                                                                                                                                                                                              Думаю, вы со мной согласитесь, что если не тащить в них (Vue, React и.т.д) мусор, то в чистом виде они останутся совершенно бесполезными
                                                                                                                                                                                                                                                                                +1
                                                                                                                                                                                                                                                                                Нет, не соглашусь. Ваш аргумент вообще вырождается в «на JS ничего написать нельзя», если мы из него уберем еще и фреймворк.

                                                                                                                                                                                                                                                                                Между тем, на VanillaJS всё прекрасно пишется. А на «просто реакте» пишется проще и с меньшим количеством собственного кода. Беда в том, что люди почему-то думают, что это линейный тренд, и что если одна либа всё здорово упрощает, то 100500 либ упростят всё в 100500 раз больше.
                                                                                                                                                                                                                                                                                  0
                                                                                                                                                                                                                                                                                  Не совсем верно вы истолковали мой аргумент. Как раз таки на ванильном(нативном) JS можно написать всё, без использования фреймворков. ИМХО задача фреймворков — делать рутину проще, а не усложнять её. Приведенные выше примеры фреймворков необоснованно усложняют процесс разработки — суть моего аргумента.
                                                                                                                                                                                                                                                                                    0
                                                                                                                                                                                                                                                                                    Приведенные выше примеры фреймворков необоснованно усложняют процесс разработки — суть моего аргумента.

                                                                                                                                                                                                                                                                                    Угу, а пользуются ими только потому, что всем вокруг нравится страдать, да и вообще в программисты одних только хардкорных мазохистов берут.

                                                                                                                                                                                                                                                                                    Нет, фреймворки очень даже значимо упрощают разработку. Что никак не отменяет возможности пользоваться ими не по назначению, и самому себе подкладывать грабли.
                                                                                                                                                                                                                                                                              0
                                                                                                                                                                                                                                                                              Vue — единственный файлик на 300 кило, и на нем можно спокойно сделать кое-какой фронт.
                                                                                                                                                                                                                                                                              0
                                                                                                                                                                                                                                                                              Поверьте, вы далеко не первый у кого бомбануло с «time to market» в пайплайне разработки инструментов сборки javascript проектов :)
                                                                                                                                                                                                                                                                              Из последнего, видел забавный эксперимент: github.com/evanw/esbuild
                                                                                                                                                                                                                                                                              Бандлер и минификатор для javascript, написанный на go. Естественно, компилирующийся в нативный код. Далеко не production ready, целью является именно демонстрация того, что выполняемые под нодой инструменты свернули куда-то не туда.
                                                                                                                                                                                                                                                                              Но это не значит, что на javascript нельзя писать быстро работающий софт (включая завернутые в электрон десктопные приложения). Просто народ обленился до безобразия. Скриптовый язык позволяет быстро прототипировать, а прототип очень руки чешутся выкатить в продакшн не переписывая с нуля. Естественно, весь тулинг на javascript для javascript написан ровно также.
                                                                                                                                                                                                                                                                              В этом есть своего рода плюс: люди, переживающие за производительность, время от времени врываются на белом коне в оупенсорсные проекты и делают x10 производительности на ровном месте. Это хорошая точка входа в оупенсорс для тех, кто хочет сделать мир лучше, а не просто покричать в пустоту о том, как все плохо.
                                                                                                                                                                                                                                                                                0
                                                                                                                                                                                                                                                                                Я вот помню, как только-только начинался rollup, и он тогда тоже билдил всё в десятки раз быстрее вебпака (хотя конечно нода в принципе не может конкурировать на равных с компилятором в native code, это я про esbuild). Но потом время шло, фичи пилились, и в итоге он всё еще быстрее, но уже совсем далеко не в десятки раз.

                                                                                                                                                                                                                                                                                Ну и на самом деле по-моему никто вообще в мейнстримовых сборщиках не боролся толком за скорость сборки. Тот же rollup боролся за понятность и детерминированность процесса сборки, относительно мутности вебпака, да за вменяемую модульность. А скорости в приоритетах и не стояло.
                                                                                                                                                                                                                                                                                  0
                                                                                                                                                                                                                                                                                  Сила и слабость роллапа в том, что он является сравнительно простым пайплайном, функциональность которого обеспечивается легко подключаемыми плагинами. А плагины могут писать совершенно разные люди. Потому сравнение с тем же вебпаком зависит от задач и качества используемых расширений.
                                                                                                                                                                                                                                                                                  Мой рабочий проект сейчас состоит из ~160 мегабайт кода на typescript (кровавый энтерпрайзный геймдев, годы copy-paste driven development). Продакшн билды собираются роллапом, но «в два захода»: сначала дампится на диск javascript который натранспайлил tsc, а затем бандл уже из js собирается роллапом. Потому что с @rollup/plugin-typescript процесс выжирает больше 8 гигабайт памяти =)
                                                                                                                                                                                                                                                                                  Но из имеющихся production-ready инструментов rollup все равно лучшее, что сейчас есть. Rollup с terser'ом пыхтит над проектом 10-15 минут и это еще «хороший» результат.
                                                                                                                                                                                                                                                                                  Для дев мода вообще пришлось писать кастомный watcher, с chokidar для мониторинга изменений на диске, дисковым кэшом, использованием transpile api компилятора typescript и фоновым процессом для тайпчекинга (после экспериментов со всеми готовыми вариантами, разумеется, просто кодовая база огромная и без project-specific решения с производительностью было вообще все плохо).
                                                                                                                                                                                                                                                                                  Впрочем, решения подобные esbuild мне кажутся слишком радикальными. Сложно будет поддерживать кодовую базу на go, которая заменяет все те тонны javascript кода, которые пишет несопоставимо огромное количество разработчиков. Но я слабо представляю, что может мотивировать программистов массово начать заморачиваться производительностью скриптового кода, если только мы не упремся окончательно в возможности железа.
                                                                                                                                                                                                                                                                                    0
                                                                                                                                                                                                                                                                                    Да, кстати плагины TS в роллапе — это и вправду недоразумение какое-то. Я сам всерьез задумываюсь про двухэтапный билд, если вдруг нужно будет много TSа собирать (пока там, где много — там вебпак). Потому что пользоваться этим совершенно невозможно.
                                                                                                                                                                                                                                                                                0
                                                                                                                                                                                                                                                                                Полезная статья! Пока бэкендеры ноют и боятся, мы можем быть спокойны, что они припрутся к нас со своими практиками и мартинами фаулерами.
                                                                                                                                                                                                                                                                                  +1
                                                                                                                                                                                                                                                                                  Вспоминая одну из прошлых статей. Жену-то в Икею свозил? :)
                                                                                                                                                                                                                                                                                    –1

                                                                                                                                                                                                                                                                                    Пятнадцать лет назад на включение компьютера, открытие письма в электронной почте и распечатывание документа уходило пять минут.


                                                                                                                                                                                                                                                                                    Сейчас столько же. Несмотря на повышенные в сотни раз производительность процессора и объемы памяти.


                                                                                                                                                                                                                                                                                    А что изменилось?

                                                                                                                                                                                                                                                                                      +1
                                                                                                                                                                                                                                                                                      Кнопочки стали нескучными (и фиг узнаешь кнопочка это или просто надпись, пока не нажмёшь)
                                                                                                                                                                                                                                                                                        0
                                                                                                                                                                                                                                                                                        пятнадцать лет назад можно было идти чай пить пока комп включится, а сейчас вполне быстрее минуты вами написаное можно сделать, так что не очень понятно к чему такое утрирование.
                                                                                                                                                                                                                                                                                          0
                                                                                                                                                                                                                                                                                          Сейчас у меня ПК выходит из ждущего режима быстрее, чем включается монитор. И это не ПК ускорился, XP на Athlon выходила так же быстро. Это монитор тормозной стал, 5 секунд на включение или переключение режимов.
                                                                                                                                                                                                                                                                                          0
                                                                                                                                                                                                                                                                                          Пятнадцать лет назад на включение компьютера, открытие письма в электронной почте и распечатывание документа уходило пять минут.
                                                                                                                                                                                                                                                                                          С этой задачей отлично телефон справится. Он у меня включён постоянно. А у вас? Причём идти по офису до принтера будет дольше, чем достать телефон, зайти в почту и отправить на печать.
                                                                                                                                                                                                                                                                                          +1

                                                                                                                                                                                                                                                                                          Я думаю придет время когда всех jsников будут отлавливать на законодательном уровне.

                                                                                                                                                                                                                                                                                            0

                                                                                                                                                                                                                                                                                            Смотрю на сборку Java-бекенда, которая гоняет какие-то тесты по 45 минут, а потом на React-фронтенд, где 1200 тестов пробегают за 20 секунд, и задаюсь тем же вопросом, что и автор статьи, только с противоположным знаком.

                                                                                                                                                                                                                                                                                              0
                                                                                                                                                                                                                                                                                              Судя по скорости у вас на java полноценные интеграционные тесты. И они быстро работают.
                                                                                                                                                                                                                                                                                              А на фронте обычные юнит неизвестно что проверяющие.
                                                                                                                                                                                                                                                                                                0

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


                                                                                                                                                                                                                                                                                                За фронтенд могу поручиться – тесты падают при наличии багов и проходят при их исправлении. Нормальные тесты, полезные.

                                                                                                                                                                                                                                                                                                  0
                                                                                                                                                                                                                                                                                                  В C#, который ± Java по производительности в плане прогона тестов, именно юнит тесты (где база, сеть и прочее IO замоканы) выполняются около минуты в количестве примерно 3,5к. А вот 5к интеграционных тестов — уже 3 часа, но то не к языку вопросы. А на фронте ни базы, ни IO вроде как нет, так что тесты можно к категории юнит тестов отнести имхо.
                                                                                                                                                                                                                                                                                                    +1

                                                                                                                                                                                                                                                                                                    Подведем промежуточный итог:


                                                                                                                                                                                                                                                                                                    • Долго собирается фронтенд – виноваты криворукие разработчики
                                                                                                                                                                                                                                                                                                    • Долго собирается бекенд – все нормально, это интеграционные тесты, так и нужно.

                                                                                                                                                                                                                                                                                                    После прочтения статьи и комментариев вывод получается именно такой.

                                                                                                                                                                                                                                                                                                      0
                                                                                                                                                                                                                                                                                                      Дык бэкенд недолго собирается. Сборка — это сборка, а тесты — это тесты)
                                                                                                                                                                                                                                                                                                        0

                                                                                                                                                                                                                                                                                                        Хорошо, вот сборка:


                                                                                                                                                                                                                                                                                                        • mvn install -DskipTests=true – 3мин 30сек
                                                                                                                                                                                                                                                                                                        • npm run build – 45 сек

                                                                                                                                                                                                                                                                                                        Разница не настолько большая, как с тестами, но все равно есть.

                                                                                                                                                                                                                                                                                                          0
                                                                                                                                                                                                                                                                                                          А если mvn install -DskipTests -T 4?
                                                                                                                                                                                                                                                                                                            0

                                                                                                                                                                                                                                                                                                            У вас одна из ситуаций:


                                                                                                                                                                                                                                                                                                            • кривые билд-скрипты на java pom.xml — это проще пареной репы. При небольшом желании можно время компиляции на порядок-два поднять.
                                                                                                                                                                                                                                                                                                            • какая-то из интеграций (или просто дурацкий эксперимент кого-то из разрабов) подтянула кодогенерацию. Это долго.
                                                                                                                                                                                                                                                                                                              +1

                                                                                                                                                                                                                                                                                                              Возможно. А ещё -T 4 из коммента выше может помочь. Важен не конкретный проект, а общее отношение


                                                                                                                                                                                                                                                                                                              • Долго собирается бекенд – в комментарии приходят добрые люди и пытаются помочь
                                                                                                                                                                                                                                                                                                              • Долго собирается фронтенд – в комментарии приходят (возможно, те же самые люди) и предлагают сжечь этот фронтенд к чертям собачьим

                                                                                                                                                                                                                                                                                                              Как в такой ситуации можно хоть что-то обсуждать?

                                                                                                                                                                                                                                                                                                +1
                                                                                                                                                                                                                                                                                                Автор легко угадывается по кричащим заголовкам и графоманским текстам.
                                                                                                                                                                                                                                                                                                  +3
                                                                                                                                                                                                                                                                                                  Картинка в тему

                                                                                                                                                                                                                                                                                                    0
                                                                                                                                                                                                                                                                                                    Вот жеж блин беда — я тут уже изрядного монстра соорудил на Go так он как собирался за пару секунд так и собирается…

                                                                                                                                                                                                                                                                                                    ЧЯДНТ что мне не о чем написать такую статью… :(

                                                                                                                                                                                                                                                                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                                                                                                                                                                                                                    Самое читаемое