Pull to refresh

Comments 439

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

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

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

Скорее всего неправильный помол (есть пыль/осколки), или неправильное время заварки (и/или температура воды/чайника), или ожидания не того результата.

зависит от уровня навыка приготовления и от качества зерна

А играть в фифу (так же игра называется? ФИФА) на ноуте? Или программировать на виндовс?))
а где линк на код? или по кофейной гуще гадать чего там билдиться так долго?
UFO just landed and posted this here
потому что 4 формы на чем угодно билдятся примерно моментально

Это смотря насколько кривые руки у того, кто эти формы написал.

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

логичней предположить что автор просто рекламный графоман.

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

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

Фиг с ним с линком, где фирменная КДПВ с кодом на тёмном фоне?
Слишком многие фишку просекли. Что то новое придумывает теперь видимо. F# в тегах тоже теперь отсутствует.
Есть линк на хостинг серверов, ради этого статья и писалась. Какие еще линки тут нужны?
UFO just landed and posted this here
«961,713 byte» это же где-то примерно чуть меньше килобайта, если, конечно, я верно понял

И оно билдится «всего» 90 секунд?
UFO just landed and posted this here
Запятая смутила немного, извиняюсь.

Всё равно, проект весом около мегабайта билдится 90 секунд?
Это размер исходников или уже опубликованного продукта?
Я конечно понимаю, что SLOC это плохая метрика, но сколько строк в таком проекте, хоть приблизительно для восприятия масштаба?
UFO just landed and posted this here

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

UFO just landed and posted this here
«Они вообще много чего скажут — все что угодно, лишь бы не переделывать свое дерьмо.» (с)
UFO just landed and posted this here
«Они вообще много чего скажут — все что угодно, лишь бы не переделывать свое дерьмо.»
Автор этим пользуется, значит это и его дерьмо.
UFO just landed and posted this here
Вот только вам ведь после каждого изменения кода нужно заново билдить проект? А у нас HMR за секунду и даже состояние инпутов сохраняется.

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

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

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

Так вот, вся эта археология работает быстрее и отзывчивей, чем моя рабочая система, с NVME, Ryzen, 16Gb и последними версиями Autocad.
сударь, вы ещё с go или чистым С сравните :)

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

UFO just landed and posted this here
Дык и в java-проектах на maven/graddle тоже есть зависимости. И в C# тоже пакетики с зависимостями есть.
UFO just landed and posted this here
Дык а у фронтендеров почему не в бинарничках?
UFO just landed and posted this here
Ну вот Вы сами признали несовершенность фронтенда. Все ведь на поверхности лежит.
UFO just landed and posted this here
Не знаю говорили ли об этом Вы, но об этом говорит автор, к которому Вы стоите в оппозиции, и в этом случае он как никогда прав. Фронтент имеет серьезные фундаментальные недостатки, которые при всей их очевидности, к сожалению, никем не исправляются. Это не значит, что нужно прекратить зарабатывать на нем деньги — но давайте хотя бы не будем делать вид, что все в порядке и нужно просто разобраться в инструментарии.
UFO just landed and posted this here
Вот WASM как раз очень наглядно демонстрирует что именно нужно производителям браузеров. Вместо того что бы взять LLVM и встроить ее в браузер… давайте придумаем свою абсолютно новую виртуальную машину (ну и что, что медленную), и код будем передавать в виде синтаксического дерева, пусть клиентские девайсы каждый раз при загрузке скрипта его в байткод переводят, а то ведь им заняться нечем. И плевать, что скорость WASM'а лишь слегка больше чем у Javascript'а (естественно, в этом отчасти виновата скорость V8) — главное, что стандарт получился настолько сложный, что конкурентам Chromium и Gecko только повеситься остается.
гораздо проще написать вы фронтендщики говно!
Я не писал что фронтенд-программисты говно — собственно, я так и не считаю. Но технологии фронтенда — объективно полный отстой.
Вместо того что бы взять LLVM

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


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

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


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


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

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

UFO just landed and posted this here
Напомнить что произошло с Flash, Java Applets и Unity Web Player, который «просто встроили в браузер»?
И ведь Вы не назвали ни одной технической причины. Ну что, принципиально невозможно сделать плагин недырявым? Или может в особенном фронтенде без привязки к одному производителю никак?
Да, потому что это наследие. Потому что люди когда придумывали эти технологии они совершенно не думали о проблемах, которые эти технологии будут решать через 20-30 лет.
Да я согласен, что обвинять отцов-основателей бессмысленно. Но сейчас всеми стандартами веба руководит вполне конкретная небольшая группа монополистов, и о своей монополии они заботятся куда больше, чем о каком-либо развитии.
и код будем передавать в виде синтаксического дерева

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

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


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


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

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

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


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

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

UFO just landed and posted this here
Хотел бы я посмотреть на эти 0,704 бита после запятой ;-)
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here

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

UFO just landed and posted this here

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

Не знаю что конкретно, но что-то точно не так. Пет-проект на 30K строк (не loc, считал через Ctrl+Shift+F "\n") собирается за 12-13 секунд на R5 3600 в VS 2019.
UFO just landed and posted this here
Нет, boost'а нет. С другой стороны, PCH тоже не использую.
Представляю. Исходники проекта, о котором написал ниже по ветке, весят 1,12 MB, собирается за 12-13 сек.
В «меньше килобайта» с трудом влезут конфиги вебпака и тайпскрипта. Скорее, тут почти мегабайт. И да, в такой ситуации 90 секунд — это «всего», я видел проект вдвое меньше, который собирался вдвое дольше.
И причём можно еще не брать вебпак, который сам по себе небыстр (rollup быстрее).
У меня, кстати, чуть меньший проект (800Кб) билдится с нуля за секунд 15-20, но у меня не старенький ноутбук, а вполне себе еще «торт» FX-8350. И это никто особо не страдал над скоростью билда, а можно было и пооптимизировать.

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

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

UFO just landed and posted this here
UFO just landed and posted this here
У меня файл в 30 строк тайпчекается минуты три с половиной

И это отвратительно
UFO just landed and posted this here
Нет, не покажу, т.к. Delphi не трогал с 2012, а ваш код я вообще не понимаю. Альтернативы, соответственно, тоже не подскажу.
Но из ваших слов (предыдущий комментарий) получается, что инструменты выросли… в чём? Во времени тайпчека?

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

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


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

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

UFO just landed and posted this here
UFO just landed and posted this here
и сбылась мечта многих о безбажном ПО!

Оно будет безбажном только при безбажном ТЗ.
А отсуствие ошибок, нетоностей формулировок, неосказанностей в ТЗ больше 10 страниц это по-моему фантастика.

UFO just landed and posted this here

Но они не позволят найти противоречия между тем, что ТЗ написано и что подразумевалось при написании...

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

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

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

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

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

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

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

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

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

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

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

Так в рантайме оно и довольно быстро
Медленно — это когда вы пишете что-то типа «ng build --prod» и идете пить чай, потому что там уже немного другое колдунство происходит
UFO just landed and posted this here
Современный транспилятор тоже оптимизирующий и есть проверка типов, в том и фигня )
Angular при продовой сборке выкидывает целые неиспользуемые модули и компоненты, проверяет типизацию и вот это все
И да, поэтому он это и делает довольно долго
Ну справедливости ради конекретно этот аргумент «выкидывание целых модулей и компонент» — так себе.
Т.к. функционально это близкий аналог DCE (dead code elimination) в gcc. Что является достаточно быстрой фазой, т.к. требует однократного прохода по коду программы (разумеется в специальном представлении: IR).
UFO just landed and posted this here
В «микро» вы правы. Но в «макро»: DCE работает с константами времени компиляции.
А за описанную вами оптимизацию отвечает Constant propagation (вероятно в gcc называется также, но не уверен).

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

Во-вторых, меня спросили — я ответил
В смысле, что в современном фронте это тоже есть

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

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


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


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

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

Ну так потому что система типов никакущая. Почти как в яве, только еще более никакущая. Нет сложности — нет и проблем.
А что в Java не так с системой типов?
UFO just landed and posted this here

Если с конкретикой – мне не хватало union types, чтобы можно было Array<number | string> как в Typescript

Берите и пишите на Ceylon. Он тоже на JVM.
Но вообще Union Type в Java можно заменить на библиотеки (это уже официальный подход, см. Optional), запись List<Either<Number, String>> всего лишь немного длиннее.

Вопрос был "что в Java не так".

Я всего лишь предлагаю варианты решения проблемы.
Так-то на запрос "хочу Array<Number | String>" моей первой реакцией будет скорее удивление, потому что там, где я хочу чего-то настолько же странного, лучшей идеей будет сделать нормально именованный тип, чтобы всем было понятно, что это, откуда, кто и как именно этим пользуется в проекте.


Upd: кстати, union'ы в Java вообще-то есть, но не для всех — их можно использовать в catch. Просто упомяну, может кому полезно будет.

А это уже следующая "хотелка", хочу чтобы тип Number | String можно было сделать именованным. И нет, Either<Number, String> — это немного не то (и, кстати, он такой же неименованный).

class Value extends Either<Number, String> {}

Не вижу принципиальной разницы между Either и |, вот честно. В чём проблема, в том что это не часть языка?


И я знаю, что Either это неименованный тип. Я его не себе предлагаю использовать — я это предложил вам, как прямой соответствие Number | String. Сам я так обычно не делаю, видимые типы лучше всё-таки именовать.

Принципиальная разница — в том, что за отсутствием в JVM структур Either<Number, String> может быть только отдельным объектом, соответственно его использование всегда немного нагружает GC.


А гипотетический Number | String можно было бы сделать без выделения отдельного объекта под хранение признака Number там или String.

Для value-значений типа String это в обозримом будущем будет стоить вашему приложению потери производительности при сравнении между List<String> и List<String | Number>, потому что первый сможет специализироваться в массив байтов, а второй останется массивом ссылок на Object с некоторым синтаксическим сахарком на уровне компилятора.
Причём, как я уже сказал, за сахаром уже сегодня можно сходить пописать на Ceylon.

Э-э-э, а как это List<String> может оказаться массивом байтов? Может, вы List<Number> имели в виду?

Нет, и String тоже, в теории. Подвижки по value types для того и нужны, чтобы хранить в массивах только один служебный указатель на тип, а сами значения паковать как линейный суп без ссылок. Чтоб массивы были больше похожи на С, причём и массивы внутри ArrayList (иначе смысла мало). Но это, конечно, если String когда-то станет таким типом. Учитывая, что для полноценной поддержки для начала придётся убрать конструкторы — то и Integer таким типом может никогда не стать, для сохранения обратной совместимости.
Зато List<Number> скорее всего никогда как раз не будет паковаться — паковаться будут List<Integer> сотоварищи.

String — это уже массив. Невыровненный массив массивов вы в один массив не упихаете никак. Точнее, упихать-то можно, но быстро это работать никогда не будет, и вообще потребует "внутримассивного" менеджера памяти.

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

Может, но кто-то во мне подсказывает, что даже если программист расстарался, и там в модулях десятикратная вложенность типов, затянуть всю иерархию типов проекта в одно развесистое дерево в памяти из разных модулей и определить их все — не бог весть какая задача для компьютера, делающего несколько миллиардов операций в секунду. И медленно оно отнюдь не поэтому, а… просто вот так реализовано.
UFO just landed and posted this here
Не знаю, не могу согласиться. По меркам компьютеров 20-летней давности могу. Но сейчас, не иметь возможность полностью вывести друг из друга все типы (ну сколько их может быть в сотне килострок, тысяча? Две тысячи?) за доли секунды, это всё-таки плохая реализация, а не какие-то объективные причины.
Я сомневаюсь, что «ну просто вот так реализовано» в четырёх реализациях, три из которых независимы совершенно.

А я не сомневаюсь. У меня на компьютере полно мелких утилит, которые жрут ресурсов на порядок больше, чем навороченные IDE пару десятилетий назад. Сейчас все так пишут.
UFO just landed and posted this here
у вас на строчку кода составляется минимум по уравнению на типы, и эта система уравнений потом решается. Поэтому в сотне килострок их может быть очень много.

Да, но ведь 99% из этих уравнений решаются простой подстановкой, и кроме того, не на строчку кода, а на строчку кода, где присутствуют переменные/функции, чьи типы, собственно, нужно выводить. У вас же не в каждой строчке кода используются новые переменные и новые функции?
Алгоритм Хиндли-Милнера пришёл к нам лет 30 назад, когда компьютеры имели смешную по нынешним меркам производительность, и компиляторы Хаскеля справлялись со своей работой и на 386-х процессорах.
UFO just landed and posted this here
Я бы сказал это очень долго, должно быть примерно на порядок меньше(именно сборка+линтер). У тса конечно не самый быстрый компилятор(я бы сказал ооочень медленный), но у меня бек на нем собирается менее 10 секунд на CI(думаю там машинка выделена не сильно быстрее вашей). Линтер-6 секунд.
Джавовый проект есть на 100к строк код с мавеном — сейчас лень смотреть, но время сборки +линтера в сумме в несколько раз меньше.
Но если говорить про CI то js значительно медленнее чем другие языки-очень медленный туллинг, который написан на джсе, нпм инсталл занимает десятки секунд-и с этим сложно что-то сделать, линтер даже на 1к строк кода запускается и пробегает поряка 5 секунд, тесты также в разы медленнее исполняются.
А на фронте еще куча наворотов поверх самого js.

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

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


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

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

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

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

Достаточно компетенций на что? На сравнение теплого и мягкого? Из статьи совершенно непонятно:


  1. Взял ли автор правильный инструмент для своей задачи
  2. Умеет ли он им пользоваться
  3. Не стреляет ли он себе в ногу намеренно
4. Существует ли описанная ситуация в реальности, или это только лишь theorycrafting.
Ну так ему есть с чем сравнить
UFO just landed and posted this here
На правах шутки
А комментари читать уже нельзя, скролл лагает.

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

Жажда денег у человека
UFO just landed and posted this here
Буду следить за кармой автора, на данный момент — 295.
UFO just landed and posted this here
UFO just landed and posted this here
пусть VDSina выдаст выделенный эпичный сервер, с ноута за 80 тыр заходим по RDP и всё ок

Автор, конечно, перегибает, но ведь это именно та проблема, о которой он пишет. Вместо того, чтобы оптимизировать инструменты, ставим более монструозную железяку.
UFO just landed and posted this here
А какой вариант долгосрочного решения проблемы? Если краткосрочное — железо, решение для «трех калек» — железо, то выходит что всегда надо эту дырку затыкать железом, и тогда для всех временных рамок решение одно.
UFO just landed and posted this here
время программистов дорого

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

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

Для этого есть DevOps, и не нужно ничего собирать на ноутбуке. Главное чтоб IDE работала и доступ к репозиторию был.
Хм. А как программист сможет вообще сколь-нибудь продуктивно работать, если у него не будет собственных локальных сборок, хотя бы для отладки? Билды на сервере, с прогонкой тестов — это ведь отдельная тема, она дополняет, а не заменяет локальную отладку на машине разработчика.

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

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

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

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

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

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

похоже прогресс примерно здесь пошел не туда
хотя да, зерлинги, большими толпами, рулят :)
Думаете в ноуте за 80к hdd стоит?
UFO just landed and posted this here
Более того даже в ноуте за 100+к может hdd стоять. Правда с большой вероятностью в добавку к SSD.
С пустяками вроде трехмерного футбола с очень серьезной физикой и графикой, мощным ИИ, и очень серьезными расчетами в реальном времени ноут справляется.

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

Печатная машинка конечно дорогая, но вы вроде собирались ноутбук для разработки покупать? Я вот стационарный комп год назад покупал, он мне без видеокарты в 90К обошелся, аналогичный по производительности ноутбук будет все 120К, а то и больше. Но это же рабочий инструмент.
А зачем вскод? Разве райдер не умеет в консоль чтоб запустить npm?
Или не умеет открывать js, html etc файлы?
Моя рабочая машинка, куплена в 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


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

Ну, можете заехать и убедиться сами ¯\_(ツ)_/¯
Можно по видеосвязи демонстрацию устроить.
Можно Фила попросить заехать и глянуть, он в этом же городе живёт :-)
Докер под мак сломан. То что в докере работает под линуксом с минимальной нагрузкой на ноуте 10 летней давности — в случае даже свежего макбука доводит этот самый макбук до кипения с оглушающим воем системы охлаждения.

Так чистого докера под Mac и нет. Он запускается под виртуалкой, с соотвествующими накладными расходами.

О том и речь, данный подход почти полностью гробит смысл docker'а как такового.

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

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

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

топовейший ноут
80 кусков
что-то не сходится. Такое ощущение, что вы отстали от цен лет на пять. Сейчас топовый ноут дешевле 100-150к найти крайне сложно.
UFO just landed and posted this here
UFO just landed and posted this here
Увы, ноуты вне конкуренции. Их с собой носить можно.
Мы же все сейчас любим удаленку и хотим иметь возможность возить рабочее место с собой.

Стоит 150-200к. Ленова x1 или Мак по вкусу. Оба хороши.
UFO just landed and posted this here
UFO just landed and posted this here
К ноуту тоже можно подключить внешние монитор и клавомышь и горбиться только когда используешь ноут в пути
UFO just landed and posted this here
UFO just landed and posted this here
Не выходи из комнаты, не совершай ошибку? )

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

А в чем проблема с тасканием ноута за 200к с собой?
Жалко угробить. Я вот например бывало с собой на велике кататься брал prestigio 133s. Ноут за 200к с собой вот так не возьмешь.
UFO just landed and posted this here
Покупаем мощный десктоп, плохой лэптоп, подключаемся по RDP и билдим на мощном десктопе из любого места

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

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

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

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

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

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

Заводить аккаунты, использовать сторонние сервисы и страдать, если они лягут или в них найдут дырень?
Пробовал я Parsec — всё равно не зашло, артефачит, удобство использования не очень.
Страдал с VNC/AnyDesk/NoMachine/X2Go/ещёдесятокспособов, потом в итоге купил ноутбук и будто заново родился.
Для обычной разработки удалённое подключение — нормально, жить можно.
Для 3D графики — при всём желании невозможно ужать гигабиты видеотрафика в мегабиты. Всегда где-то в чём-то будет плохо.
UFO just landed and posted this here
Ну можно купить хороший гробик с парой видеокарт в SLI или просто самой мощной десктопной. Но ценники на такое конечно совсем негуманные и найти непросто.

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

UFO just landed and posted this here
в 3900xt нет встроенного видео
UFO just landed and posted this here
Вы ничего не путаете? один только проц ~45 тысяч остальное в 30 ну никак не влазит

Но по дексктопу согласен, отдельным пунктом 34 21:9 монитор или два монитора и где здесь место ноуту не могу сообразить
Да, что то перебор. На вскидку тысяч 85 должно выйти.
UFO just landed and posted this here

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

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

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


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

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

А можно взять нормальный ноут а не сверхтонкое поделие.
UFO just landed and posted this here
А, да 4к пропустил действительно. Просто я не обращаю на это внимания, вот и привык мимо глаз пропускать количество пикселей.

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

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

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

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

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

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

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

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

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

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

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

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

UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
Нееее, год назад брал XPS15. 45W i7 9750h, 1tb nvme, 16g ram, 4k экран. Как раз 156к было, сейчас из-за курса наверное подороже. Так получилось что у меня оказался еще и десктоп — ryzen 3 3200g, 32g ram, 256mb nvme. И вот этот десктоп на глаз в несколько раз быстрее, тупо даже по отзывчивости интерфейса системы.
Это, видимо, я отстал от жизни, если для разработки требуется такое железо. Ну, и ноут для работы, лично для меня неудобно: один маленький монитор, урезанная клавиатура. Но, у каждого свои требования, понимаю.

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

P.S. долго думал над «вскод». Сперва показалось, что ошибка/опечатка. Когда дошёл до «жскод», стало понятно. VSCode/Atom/Electron жрут немало ресурсов. С теплотой вспоминаю VS6.
UFO just landed and posted this here
| топовейший ноут
| 80 кусков
что-то не сходится. Такое ощущение, что вы отстали от цен лет на пять. Сейчас топовый ноут дешевле 100-150к найти крайне сложно.

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


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

хотя и


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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


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


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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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


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


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


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

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

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

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

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

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

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

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

Я не вижу ни одной ссылки. В гугл и я мигу отправить. У меня webpack стандартный какой анализатор смотреть? Раз уж конкретно надо.

Отлично! А теперь расскажите какой из них вы пользовались.

UFO just landed and posted this here

Довольно стремный опыт. Учитывая что куча разработчиков gcc это работники redhat, так что должны были бы решить вашу проблему на "раз-два", но судя по всему поддержка уровня X просто не пустила вас дальше.

UFO just landed and posted this here
Еще раз намекну что в других языках, даже в php этого нет.

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

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


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

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

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


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

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


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

Это то, что сразу приходит на ум, когда сравниваешь создание интерфейсов на Java и JavaScript. И еще раз подчеркну, речь идет о приложениях типа Excel и 1С, которые востребованы именно в корпоративном секторе.
4: ExtJs, jQueryUI и ещё сотня таких же.
Указанные Вами библиотеки вводят дополнительные уровни абстракций, упрощая программирование за счет снижения производительности и увеличения объема кода. Предлагаемые же предложения направлены на реализацию такой функциональности на уровне движка браузера.
Производительность чего он повышает? JS-движка?

Производительность работы интерфейса.

Да? По сравнению с чем же? С ванильным JS+HTML+CSS?
  1. position: sticky
  2. <table>
  3. <dialog>
  4. role="tablist" и тд
Речь не идет ни о каких DSL, а только о повышении функциональности существующих DOM-элементов, чтобы ими можно было легко управлять средствами JS. Например:

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

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

Спустя 20 лет это может показаться куцым, но на тот момент это был очень богатый набор возможностей. Почему же не взлетело?
Сдается мне, производители браузеров столько раз уже делали подход к этому станку с самых разных сторон, что в итоге получилось… То что получилось.
Ну, еще не все закончено. В принципе, концепция стандарта 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-моделью.
Вопрос — как сделать, чтобы этот автор не вылезал у меня в ленте хабра вообще нигде?
Ответ — написать через форму фидбека или в комментариях к очередной статье «АМА с Хабром» предложение создать новую фичу «отписка от отдельных авторов», чтобы в "мою ленту" не попадали статьи указанных авторов, даже когда они пишут в хабы, на которые я подписан.
Теоретически, если будет много подобных запросов, то фича будет реализована.

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

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

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

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

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

— Как сделать?
— Напишите в саппорт.
— Хотелось бы сделать…
— Напишите же.
— Не язвите.

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

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

Так на плашке статьи нету большой красной ни большой, ни красной плашки «SMM-отстой», юзер-скрипт писать некогда.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Думаю основная проблема в том, что на фронте нет единого формата модулей. Теоретически, не вижу проблем сделать так, чтобы компиляция бы чисто склеивала уже минифицированные кусочки. Но пока — не вышло договориться даже как CSS положить в модуль. Это я даже не вспоминаю про SCSS — который ставит себе компилятор сишки и весь тулинг, и натурально себя компилит после инсталляции — примерно такого уровня в NPM бардак.

Вообще-то есть b компилятор SCSS написанный на JS. Не вижу особого смысла использовать сишный биндинг.

Его Create React App тянет. А не юзать CRA — это путь к настройке вебпака руками. Спасибо, не надо, наелся.

Одни делают кривые инструменты, другие колются, но продолжают есть кактус. Фронтенд такой фронтенд.

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

Неоправданные трудозатраты на все — поддержку, решение проблем, обучение людей, модернизацию. Если проект на 10 фронтов, и есть кому ковырять вебпак — может и отобьется. Я приглядываю за 10-ком проектов по 2-3 фронта — там такое не отбивается. Единственное место где у меня eject-нутая и сильно гнутая CRA — наша UI-библиотека, которая монорепа из 10-ти модулей. Там пришлось, т.к. никто не сделал готовую коробочку типа CRA, которая умеет такие монорепы. И каждый раз, когда там надо что-то обновить — это делаю я, и это боль.
Я приглядываю за 10-ком проектов по 2-3 фронта — там такое не отбивается

Дык один и тот же конфиг вебпака можно из проекта в проект копировать. Так что связь прямо обратная: чем больше у вас проектов, тем выгоднее по-ковыряться с вебпаком.

Мы даже не копировали, у нас есть пакет со всеми вебпак-конфигами, зависимостями, и скриптами — как react-scripts. Но поддерживать это все и обновлять — ад.

Чтобы понять насколько ад — достаточно посмотреть сколько льют в CRA, и в его исходники.

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

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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

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


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

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

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

Нет, фреймворки очень даже значимо упрощают разработку. Что никак не отменяет возможности пользоваться ими не по назначению, и самому себе подкладывать грабли.
Vue — единственный файлик на 300 кило, и на нем можно спокойно сделать кое-какой фронт.
UFO just landed and posted this here
Я вот помню, как только-только начинался rollup, и он тогда тоже билдил всё в десятки раз быстрее вебпака (хотя конечно нода в принципе не может конкурировать на равных с компилятором в native code, это я про esbuild). Но потом время шло, фичи пилились, и в итоге он всё еще быстрее, но уже совсем далеко не в десятки раз.

Ну и на самом деле по-моему никто вообще в мейнстримовых сборщиках не боролся толком за скорость сборки. Тот же rollup боролся за понятность и детерминированность процесса сборки, относительно мутности вебпака, да за вменяемую модульность. А скорости в приоритетах и не стояло.
UFO just landed and posted this here
Да, кстати плагины TS в роллапе — это и вправду недоразумение какое-то. Я сам всерьез задумываюсь про двухэтапный билд, если вдруг нужно будет много TSа собирать (пока там, где много — там вебпак). Потому что пользоваться этим совершенно невозможно.
Полезная статья! Пока бэкендеры ноют и боятся, мы можем быть спокойны, что они припрутся к нас со своими практиками и мартинами фаулерами.
Вспоминая одну из прошлых статей. Жену-то в Икею свозил? :)

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


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


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

Кнопочки стали нескучными (и фиг узнаешь кнопочка это или просто надпись, пока не нажмёшь)
пятнадцать лет назад можно было идти чай пить пока комп включится, а сейчас вполне быстрее минуты вами написаное можно сделать, так что не очень понятно к чему такое утрирование.
UFO just landed and posted this here
Пятнадцать лет назад на включение компьютера, открытие письма в электронной почте и распечатывание документа уходило пять минут.
С этой задачей отлично телефон справится. Он у меня включён постоянно. А у вас? Причём идти по офису до принтера будет дольше, чем достать телефон, зайти в почту и отправить на печать.

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

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

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

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


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

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

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


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

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

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

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


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

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

UFO just landed and posted this here

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


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

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


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

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

Это потому что джависты добрые и хотят помочь.

Интеграция бывает не только с вебдрайвером, но и с базой данных. Когда тест (но лучше группа тестов) настраивает себе окружение на живой базе данных, проходит по своим шагам и потом за собой подчищает, чтобы не мешать остальным. При таком подходе у нас 2800+ тестов бегают на моей машине примерно час, а на слабенькой ноде Jenkins могут и четыре.

Там уже тоже ответили, что вы разные вещи сравниваете. Четыре часа на Jenkins идёт не билд, там именно идут тесты, очень тяжёлые тесты с точки зрения количества операций.
А так как вам пальцем потыкать хочется — если я ко времени тестов на своей машине (напомню — это примерно один час) добавлю время полного билда с нуля, то получится два часа, где из одного часа на сам билд — 45 минут идёт именно билд фронтэнда. А знаю я это потому что давным-давно у нас билд шёл 15 минут, но потом мы мигрировали с "устаревшей" технологии (где билд фронтенда был синонимом простой конкатенации файлов, занимавшей меньше десяти секунд на всё про всё) на модный технологический стек на jsx, время билда стало плавно увеличиваться по мере добавления компонентов, и в итоге дошло до часа, причём миграция вообще-то не закончилась, то есть и 3 четверти времени билда на компиляцию пары десятков jsx — это ещё не предел. Плюс это ещё TypeScript втащить не успели.
Кстати, юнит-тесты у нас есть и там и там, и они занимают примерно по три секунде и на фронте, и на беке, со сравнимым числом тестом. И вот они-то у нас являются частью билда, но как легко видеть — их влияние на время прохождения близко к статистической погрешности.

Если билд фронтенда идет 45 минут, то это проблема настройки конкретного билда, а не экосистемы в целом. У нас обычный современный стек (React/Typescript/Webpack), 50k строк кода, и собирается это за 45 секунд без каких-то особых хаков.


Может у вас тоже, если по таймстампам посмотреть, на что именно уходят эти 45 минут, получится оптимизировать как следует?

Нет, это всё же проблема экосистемы, если надо даже компиляцию профилировать, анализировать, и тюнить — а иначе система рождает чудовищ.

И всё-таки, для меня лично странно, что вы не называете проблемной систему, в которой основной инструмент для решения задач нуждается в тонкой настройке чтобы только показывать результаты, сравнимые с аналогичными инструментами в соседних системах, а из коробки заточен в основном под демо-проекты на одну страницу кода и Hello World.
Я прекрасно знаю, что профилированием пайплайна сборки фронтенда можно достигнуть приемлемых результатов скорости сборки. У нас как раз кто-нибудь этим займётся, когда более важных задач не останется. Тем не менее, на бекенде у нас никто компилятор не настраивал — уж поверьте, я эти скрипты читал от и до — и он собирает примерно на порядок больше loc в три раза быстрее.

Блин, на мавене тоже можно написать билд-скрипт так, что он в 2-5 раз больше времени будет идти. Вот легко. И я лет 5 назад вдумчиво так над билдом посидел и нашёл способ его ускорить. Имхо в любом билд-скрипте можно наворотить страшного.
Нет, я согласен, в тулчейне фронта накосячить сильно проще… но в то же время надо понимать, что в тулчейне фронтенда нет ни одного инструмента старше 10 лет… даже до 5 лет вроде не доживают. Когда ж им успеть созреть и вылизаться до более-менее вменяемого результата достигаемого легко?

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


нуждается в тонкой настройке

Не знаю о какой настройке вы говорите, у нас для этого было достаточно трёх вещей


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

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

Скажем так, для мавена по моему опыту получается раскладка:
~15% способны составить хороший билд-скрипт или улучшить плохой
~70% способны в целом не такой уж плохой скрипт написать… но оптизимировать его в случае каких-либо проблем не могут.
и ~15% пишут его плохо, в результате минимальное время билда увеличивается как минимум в 2 раза.


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


PS я не демонизирую, что где-то ужас-ужас. Всё же гораздо проще — найти в себе силы (а главное — время) и разобраться с имеющимся билд-тулом… В общем большинству хватает, что их билд скрипты на выходе дают то, что они ожидают. Время билда для них не критично. Сам таким был, пока не пришлось ребилдить аппликуху по 30 раз за час. И там уже полторы минуты билда стали очень больно кусаться. Закопался-разобрался. Удалось пожать до полуминуты. Был "щаслив".


PPS да, заметил, что ответ был не мне только после того, как написал коммент, так что прошу исходить из этого.

Вообще почти в любой экосистеме наступает момент когда надо профилировать, анализировать и тюнить компиляцию/сборку.
И в C++, и в Java, и в обсуждаемом Javascript.

Я знаю историю про ускорение сборки Java проекта административными методами. Есть истории про выпиливание шаблонной магии в плюсом кода с заменой на внешнюю кодогенерацию. Да и разработчики компиляторов наверняка могут что-то рассказать про ускорение процесса компиляции.

Это правда никак не отменяет сам факт ужаса сложности экосистемы Javascript и скорости сборки, когда за дело берется непрофессионал (читайте — не профессиональный фронтэнд-разработчик).

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

Он же тут на Хабре в других постах рассказывал, что он давно уже не хочет работать, и на работе просто перекладывает свои задачи на других?


Ну разумеется при таком сеньоре фронт будет три часа собираться, ведь задачу на оптимизацию сборки тупо никто не ставил!

Вообще нет. Человека, который у нас отвечает за пайплайн фронта, на хабре нет, и быть не может — он русского не знает, совсем. Вы с кем-то путаете.

А, мне показалось что вы про автора поста говорите.

Даже так?
Мои вам соболезнования.
UFO just landed and posted this here
Вот жеж блин беда — я тут уже изрядного монстра соорудил на Go так он как собирался за пару секунд так и собирается…

ЧЯДНТ что мне не о чем написать такую статью… :(
Лично у меня крашится youtube потому что при открытии видео ему нужно в моменте 2гб оперативной памяти. Он большую часть потом освобождает, но если 2гб свободных нет — до свидания.

А как на Хабре заблокировать автора? Чтобы его статьи не было видно ни в анонсах, ни в рекомендуемых, ни в популярных, а главное — они не приходили в рассылке?

У VSCode есть ещё отдельный прикол: когда слишком много делаешь ctrl + z, он начинает иногда смешивать строки из истории, превращая всё в кашу, и реальное состояние кода невозможно восстановить. Тоже на JS сделан
>Дотнет
Ну так проблема в винде и дотнете. У меня мак на 8 гигов — норм работается.

Вы это серьёзно? В том, что js медленно собирается, а дотнет — быстро, виноват дотнет?

Мне тоже хотелось бы пример кода этих четырех форм.
У нас проект на SSR, c кучей страниц, с кучей форм, с графиками, с вебсокетами, свистелками, перделками.
И он билдится 2-3 минуты.
Автор, покажи свои четыре формы, я прошу.
fillpackart если ты с дотнетом работаешь, вероятно на винде сидишь, верно?! Такой вопрос напрашивается, куда установлен node.js? Не на WSL2 случаем?!
кого хотел удивить автор ноутбуком за 80 тысяч рублей? Зачем столько кофе и сигарет? Habr уже жёлтая пресса? Что за графоманский бред? Что за бредовая «мегапокупка» дешёвого посредственного рабочего инструмента? Автор купил рабочую станцию с Xeon 16-64 оперативы? Признаётся что тратит время на компьютерные игрушки? Вся статья требует к себе 8 гигабайт риторических вопросов. Отстой.
Дотнет, студия, райдер, плеер, почтовый клиент, FIFA18, проводник, телега. И это все — 20% моей оперативы

Что — то я очень сильно сомневаюсь, что это съедает всего — то 20% от 8 ГБ ОЗУ. Если бы тут не было ФИФА, то тут бы я с великим сомнением, но поверил бы.

Наверное у автора размер package.json чуть меньше, чем каментов к этой статье :)

UFO just landed and posted this here