Состоялся релиз Node.js 21.0, платформы для выполнения сетевых приложений на языке JavaScript. Поддержка ветки Node.js 21.0 будет осуществляться в течение 6 месяцев. В ближайшие дни будет завершена стабилизация ветки Node.js 20, которая получит статус LTS и будет поддерживаться до апреля 2026 года. Сопровождение прошлой LTS-ветки Node.js 18.0 продлится до сентября 2025 года, а позапрошлой LTS-ветки 16.0 до апреля 2024 года...Подробнее: https://www.opennet.me/opennews/art.shtml?num=59969
>Добавлен экспериментальный режим использования по умолчанию реализации JavaScript-модулей ESM (ECMAScript Modules, применяется в модулях для браузеров) вместо CommonJSЯ 5 лет назад пробовал этим воспользоваться на GitHub Actions - не работало. Какие же они слоупоки.
А кто вам мешал упаковать эти модули в один файл ES5? Более того, зачем так сильно заморачиваться для Github Actions?
Почему серверная? Использую на клиенте.
> Платформа Node.js может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ.
Для скриптования handy-скриптов (не приложений) лучше питона ничего нет. Я как ярый фанатик яваскрипта с удивлением обнаружил, что ненавидимый мной питон оказывается имеет все, что надо на все случаи жизни:- Есть распаковщик zip-файлов из коробки. В ноде нету. Надо идти качать npm-пакет.
- Есть неплохой парсер аргументов командной строки. В ноде нету. Надо идти выбирать один из стопицот-пакетов.
- Питон может делать execve(), pipe() и прочие низкоуровневые штуки. Нода тупо не может.
- Питон имеет отличные биндинги к GI. Мне становится доступным весь мир GLib. Может на ноде тоже можно, но вряд ли это так же просто, как import gi.
- Очень легко скачивать файлы по http(s). В ноде-16 приходится писать бойлерплейт в один лист А4, чтобы просто скачать файл. И все равно реализация будет ошибочной, так как надо слишком у слишком многих объектов слушать on('error'). Наконец-то в 2020-каком-то году в ноде сделали fetch().
> - Очень легко скачивать файлы по http(s). В ноде-16 приходится писать бойлерплейт в один лист А4, чтобы просто скачать файл. И все равно реализация будет ошибочной, так как надо слишком у слишком многих объектов слушать on('error'). Наконец-то в 2020-каком-то году в ноде сделали fetch().Просто в ноде было низкоуровневое апи изначально когда еще не было промисов и async/await в стандарте ecmascript. Это кстати одна из причин почему все тащат кучу всего из npm.
> Очень легко скачивать файлы по http(s).Открой для себя curl или wget какой-нибудь.
... и погрузись в волшебный мир bash-скриптинга, ага.
> Питон имеет отличные биндинги к GIЭто не питон, а сишный Glib имеет отличные биндинги примерно ко всем языкам, и к джаваскрипту в том числе
В sh, который из /bin, есть getopts для парсинга флагов, а в системе с вероятностью 99.99% есть референсные реализации архиверов и curl / wget для скачивания. Про пайпы, редиректы и просто файловые дескрипторы уже молчу. Какой-то продвинутой логики и фильтрации там лучше не делать, но это и не всегда требуется.
на питоне писать более 500 строк кода такое себе
питон для этого и не предназначен; питон это про мелкие скрипты-хеллоувроты
Питон действительно не предназначен для проектов на больше чем миллион строк кода, но сопровождение таких проектов будет довольно болезненным занятием независимо от языка. Последнее время с добавлением типизации ситуация начинает улучшаться для питона.
Если уж говорить о том, где что есть из коробки, то вообще победит php. Только зачем? Модульность - это плюс, а не минус.
> победит phpАж жир из монитора закапал.
~ s/жир/елей/
Нода рулит, однако это не только и не столько серверная платформа, а кросс-платформенная среда выполнения JS кода.
Главное достижение ноды - электрон, остальное такого же эффекта не принесло
Каждый второй микросервис в глубоком бэкенде крутится на ноде.
> в глубоком бэкендеА вот это очень тонко! Зачот.
мы дотнет выбрали для себя.
> мы дотнет выбрали для себя.Сервера на винде чтоль?
он уже лет 5 на линуксах в контейнерах гоняет
А мсье знает толк в извращениях
У одного нода в backнице очень глубоко сидит. Аж на гиг во все стороны.
У другого моно в карманах гоняется
С разморозкой вас - asp.net уже давно нативно работает под linux без всяких mono.
А ничего что современный .NET уже лет 7-8 работает под линуксами, собственно потому что в азуре крутятся разные линуксы.
Я часто на ноде пишу вспомогательные программы — перенос файлов, специальные реверс-прокси сервера для нужд проекта, какие-либо особые операции. Просто JS знаю хорошо и получается быстро. На пайтоне тоже писал из-за того что один сервис именно его поддерживал, но медленно.
В итоге если сложить паззлв проектика, бюджетного сокета по ОЗУ хватит нового или нет?
Дак электрон - днище, какое же это достижение?
норм производительность и возможность подключения нативных модулей
норм производительность графики и поддержка аппаратного ускорения прямо из коробки
полностью бесплатно
Вдобавок, нередко десктопные клиенты требуются на несколько ОСей и уже при наличии веб-версии
В случае с электроном вопрос лишь в запаковке веб-версии в форму десктопного приложения( мб с какими-то правками ) - и готово приложение на несколько ОС. Это даже не недели, а дни
А не месяцы и годы, ещё и наверняка несколько разных команд, для случая целенаправленной разработки на не_электроне. И не факт что по итогу получится хотя бы такого же качества
Лучший язык, лучшая платформа с развитой экосистемой! Всё чаще убеждаюсь что в своё время сделал правильный выбор соскочив с php на js.
Сорта (С)
Да куда уж хуже то? Обратно на вордпрессы переходите
Откуда у некоторых людей такая ненависть к JS и Node в частности?
Они его не знают, а я лично все чаще сталкиваюсь что он необходим.
Пару раз писали что-то системное и поняли, что это полное барахло. И экосистема зеленая и сама платформа не расширяемая и сама платформа корявая.Проще взять классический C++ и написать что тебе нужно...
Откуда у некоторых людей такая манера снова и снова задавать давным-давно жёванные-пережёванные вопросы?
Так это тебя спросить надо, ты ж задаёшь
Когда же эта тухлая технология уйдёт туда же, куда ушли flash, java-апплеты, activex и им подбные?
Приложения - виртуальным машинам, веб - веб-браузерам. Нужно отделять мух от котлет.
Гугл и другие конторы ввалили кучу денег и средств в js движки и веб платформу в частности. Поэтому не скоро.
Всё равно разделятся, когда нынешние "комбайны" не смогут шевелиться на подавляющем большинстве клиентов - "закон мура"-то ведь давно неактуален.
Не "гениальные js-веб-программисты", а банально "рыночек порешает":
нет клиентов -- нет доходов -- нет заказчика -- нет "гениального js-веб-сайта".
закон мура - изначально был рекламной ерундой как нынешние "нанометры" в процессорахПо остальному. Нода - это не только жс
В ней огромное количество пакетов и модулей с нативной частью. Да-да, немалое количество пакетов идут с исходниками которые компилятся в ходе установки под конкретную архитектуру и окружениеНода в общем и целом удобна даже для написания каких-то вспомогательных скриптов. Обилие пакетов под любой функционал тому способствует. А то что полученный скрипт можно будет без проблем запускать под разными ОСями и на разных архитектурах - ещё один приятный бонус
Очевидно же когда будет альтернативная и более перспективная технология. Я тут вспомнил одну шутку про одну страну: "Давай сначала скушаем твоё, а потом каждый своё".
Такого бардака как в экосистеме Ноды больше нигде нет. Ни в Питоне, ни в ПХП.
У ПХП в принципе нет экосистемы. ПХП это шаблонизатор никому не нужный во времена когда страницы отрисовываются на стороне клиента.
Надеюсь, эти времена скоро закончатся.
И все снова перейдут на православный четвёртый пень и WEB 1.0? Да, хорошее время, можно было грести бабло лопатой клепая лэндинги и интернет-магазины на вротпресс.
Есть случаи, где логика приложения на клиенте востребована и даже необходима. Но подавляющему большинству существующих сайтов это не только не нужно, но и просто вредно.
Сайты сами по себе как явление скоро уйдут в прошлое. Все пересядут на приложения, маркетплейсы и соцсети. Просто спроси у молодёжи младше 25 лет насколько часто они пользуются браузером и пользуются ли вообще.
Было уже - "Ничего не будет. Ни кино, ни театра, ни книг, ни газет – одно сплошное телевидение"
собственно так и есть, только не телевизор, а интернет.
Младше. И тут, а не в Фасебук.
> Ни в ПитонеДа ладно. Чего стоят pip (отдельный и в составе python3), pipenv, poetry, conda...
Потому что некоторым людям приходится использовать софд(C) написанный на этом :(
По своей воле же - ни-ни-ни, только за деньги и всё равно моё чуйство пгрегкрагсного страдает! :-р :)
> Откуда у некоторых людей такая ненависть к JS и Node в частности?Потому что часто на js и node пишут люди без профильного образования, которые выбрали js из-за наиболее просто кривой обучения. Потом мы имеем помойку кривых модулей в npm, которые используются в таких же кривых проектах.
у меня вот профильное образование, но ничего из того что я учил мне не пригодилось в разработке; образование это ко всяким математикам, физикам, писателям игровых движков, биг дата, нейронки, торговые роботы и т.д. но точно не для вэбни
п.с. есть коллеги кодеры вообще без вышки которые просто мастерски решают задачи и которые зарабатывают очень приличные деньги; в то же время полно примеров где инженеры с образованием протирают штаны в госе или военке за гроши перед элт мониторами
Речь скорее про тягу к обучению. Многим, кто пришел в js - это не надо. Просто им хочется "больших денег" и не хочется особо ничего изучать. Ну либо они думают, что делают что-то очень важное, когда пишут очередной leftpad и грузят его на npm.
вначале придумать какую-то ерунду, потом всерьёз поверить в неё и героически пытаться обосновыватьВ жс огромная куча нюансов и подводных камней( особенно весело было до стрелочных функций. У обычных - даже this разный в зависимости от того как и откуда вызывалась конкретная функция )
Изучать в жс надо огромное количество всего, т.к обычно он используется не самостоятельно а в связке с чем-то
И учиться надо постоянно, т.к постоянно появляется что-то новое и выкидывается что-то старое. Появляются новые пакеты, забрасываются старыеЭто тебе не на какой-нибудь 8-й джаве прогать
> у меня вот профильное образование, но ничего из того что я учил мне не пригодилось в разработкеИ какое образование у тебя? Что за разработка?
> но точно не для вэбни
Что такое вэбня в твоем понимании?
так что больше от человека зависит, от его интеллекта, умения работать, пробиваться, а не наличия бумажки
Вот js сообществе как раз какое-то засилие криворуких и низкоинтеллектуальных. Достаточно сделать npm install в среднестатистическом проекте и посмотреть, что прилетает.
А зачем быть высокоинтеллектуальным для того чтобы выполнять свою работу?
> А зачем быть высокоинтеллектуальным для того чтобы выполнять свою работу?Когда в следующий раз сантехник тебе соединит в ванной трубу не напрямую, а протянет сначала через всю квартиру, ты мне ответишь на этот вопрос.
ну он так не сделает, по одной до тупости простой причине, для этого придётся дольше работать. Никто не любит много работать.
Пробежался бегло по изменениям, ну и муть.С тем-же успехом можно на сишке голый ивент луп писать, будет проще быстрее и в целом адекватнее.
Откуда это почему и зачем?
> В функцию fs.writeFile добавлена опция "flush" для принудительного сброса данных на накопитель после каждой операции записи.Это вообще прелестно. Реально какой-то сюр.
Теперь можно писать в обход буфера, где сюр?
> Теперь можно писать в обход буфера, где сюр?Сюр в том что до сих пор было нельзя.
Это инопланетяне используют.
>> Теперь можно писать в обход буфера, где сюр?
> Сюр в том что до сих пор было нельзя.
> Это инопланетяне используют.Кто сказал, что нельзя было? Есть отдельный sync и datasync как в POSIX.
> С тем-же успехом можно на сишке голый ивент луп писать, будет проще быстрее и в целом адекватнее.Давай сразу на ассемблере.
>> С тем-же успехом можно на сишке голый ивент луп писать, будет проще быстрее и в целом адекватнее.
> Давай сразу на ассемблере.Внезаптно, это не так уж сложно. Особенно с современными средствами разработки.
> Особенно с современными средствами разработки.Ахах... ну удачи. П.с. ты всё же проверяй на работоспособность СИшный и ассемблерный код который выдаёт чатжпт, ибо он в 99% нерабочий.
Сразу видно html программиста, который о том как это у людей работает представления не имеет, и ничего кроме этой жуткой ноды в жизни не видел.
> Сразу видно html программистаА ты вообще не программист раз пишешь фигню про ассемблер. Твой максимум это хеллоувроты.
Ночью спать надо, а вы чем занимаетесь? Стыд и срам.
> Внезаптно, это не так уж сложно. Особенно с современными средствами разработки.И как, продвижение есть в твоём мега проекте?
> С тем-же успехом можно на сишке голый ивент луп писать, будет проще быстрее и в целом адекватнее.Нода использует libuv, который как раз "голый ивент луп", правда кросплатформенный. Можно посмотреть в его код и понять получится ли "проще быстрее и в целом адекватнее".
Ну я понятно гиперболирую.Просто, из того что я вижу, эта нода не делает ничего что не умели бы другие платформы. Ну допустим тот же дотнет. При этом беглый взгляд на интерфейсы вызывает недоумение. Может оно всё очень красиво и логично конечно, но судя по комментариям анонимных экспертов, похоже что нет.
При этом инструмент странный со всех сторон вообще. Ну например не имею ничего против языков с динамической типизацией, но э, не иметь того же инта, и по умолчанию странным образом кастовать всё во всё... Тоесть в браузе выбора у тебя нет, но во имя какого Сатаны это тащить из него?
У меня было заблуждение на счёт ноды, я думал что на ней вот ваще просто просто всё можно делать, а похоже что нет.
Динамическая типизация, отсутствие указателей и ссылок - это благо. К этому надо стремиться и на основе этого развивать все современные языки. Нужно программы писать, а не мастурбировать на лишние пару мегабайт сэкономленной памяти и пару тактов твоего четвёртого пня.
Это устаревшие технологии зари становления науки. Ты буквально предлагаешь всех загнать обратно в пещеры.
Устаревшие технологии это экономить каждый такт и каждый байт вглядываясь в регистры и память в ассемблерном отладчике. Сегодня делать выбор языка лишь основываясь на его эффективности в плане ресурсов максимально бредово, учитывая то что железо люди обновляют практически каждые 2-3 года. Ну а если человек сидит на древнем железе то он априори неинтересен для бизнеса и на таких людей равняться точно не стоит.
Как раз без ручного использования регистров процессора и постоянного контроля генерации кода практически ни одной серьёзной программы ни на одном языке не напишешь. И особенно это касается динамически типизированных языков, в них приходится постоянно думать о каждой "автоматически" совершаемой операции, включая касты типов. Люди, которые этого не понимают, действительно никому не интересны.
> Ну например не имею ничего против языков с динамической типизацией, но э, не иметь того же инта, и по умолчанию странным образом кастовать всё во всё...Это в стандарте нет (хотя сейчас уже есть bigint) и максимальный представимый инт в js - это 2^53 - 1, но современные движки не настолько тупые, чтобы все хранить в double.
> Тоесть в браузе выбора у тебя нет, но во имя какого Сатаны это тащить из него?
В С или С++ в раширении для ноды ты спокойно можешь гонять инты туда/сюда https://nodejs.org/dist/latest-v18.x/docs/api/n-api.html#nap...
Так при помощи нехитрых присоблений, смекалки, буханки белого или чёрного хлеба, можно сделать троллейбус. Но зачем?О интах, неплохо когда оно безразмерное, как в лиспе или Питоне.
> Так при помощи нехитрых присоблений, смекалки, буханки белого или чёрного хлеба, можно
> сделать троллейбус. Но зачем?В lua интов тоже не было до версии 5.3. То есть с 1993 до 2014 года никого от использования это не останавливало.
> О интах, неплохо когда оно безразмерное, как в лиспе или Питоне.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
> Так при помощи нехитрых присоблений, смекалки, буханки белого или чёрного хлеба, можно сделать троллейбус. Но зачем?Так это тебя надо спросить, ведь это ты собирался event loop писать на ассемблере с использованием чатжпт. Я теперь надолго к тебе прицепился))
> Ну допустим тот же дотнет.На js как раз и пишут те, кто дотнет в глаза не видел.
Хотя вот разрабы из ms пытаются в стандарт протащить некоторые идеи оттуда.
Не только дотнет...
Крутить дотнет на линпусе это извращение, уж лучше java тогда.
а зачем его крутить? он сам крутится.
C# устарел сразу после появления, в самом языке нет поддержки многозадачности (нет также в Java и Python) - она реализуется библиотечно. В JavaScript, как ни странно, - из коробки. Эволюция, как правило, устраняет специализированные закрытые системы, бронтозавр уступает место мышке.
И чем джаваскриптовый setTimeout(рутина) принципиально отличается от джавового new Thread(рутина).start()? В джава ещё мощнее, рутины не одним потоком выполняются
Ну запусти сишку в браузере
> API FetchКруто будет, если эта штука позволит в запущенном приложении подтягивать js-код для выполнения на сервере из произвольных источников. Это поднимет помоечность ноды на новый, доселе невиданный уровень.
Нет предела совершенству!
Внезапно, запущенное приложение сможет выполнять код.Если вы про недоверие к загруженному коду из сети, то это не повод вырезать сетевые апи.
При чем тут это?
Просто добавлен более удобный http-клиент.Сделать eval() можно было всегда. Дурак всегда найдет, как себе в ногу выстрелить.
fix> YetAnotherOnanymи всегда найдет, как себе в ногу выстрелить.
> При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в Node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных.Можно поинтересоваться у автора, копирующего эту давно неактуальную чушь из новости в новость: а зачем тогда в этой новости приведен пример с const res = await fetch('https://nodejs.org/api/documentation.json'); ?
И зачем это медленное поделие, когда есть bun?
Верить тестам производительности проекта конкурента - такое себе.
Зачем верить? Что мешает самому сделать такой тест? :)1) Bun
let n = 0;
const server = Bun.serve({
port: 8008,
fetch(req) {
n++;
if (n % 10000 === 0) {
console.log(n);
}
return new Response("Bun!");
},
});
console.log(`Listening on http://localhost:${server.port} ...`);~/src/wrk-4.2.0> ./wrk -d 10s http://localhost:8008
Running 10s test @ http://localhost:8008
2 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 146.37us 45.97us 1.48ms 89.99%
Req/Sec 34.55k 4.37k 78.67k 91.04%
690741 requests in 10.10s, 79.05MB read
Requests/sec: 68393.94
Transfer/sec: 7.83MB2) Node
const http = require('node:http');
let n = 0;
const server = http.createServer((req, res) => {
n++;
if (n % 10000 === 0) {
console.log(n);
}
res.end('Node!');
});
server.listen(8008, () => {
console.log(`Server running at port 8008`);
});~/src/wrk-4.2.0> ./wrk -d 10s http://localhost:8008
Running 10s test @ http://localhost:8008
2 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 381.06us 1.12ms 28.18ms 98.28%
Req/Sec 18.60k 3.18k 20.91k 95.00%
370126 requests in 10.00s, 44.83MB read
Requests/sec: 36999.11
Transfer/sec: 4.48MB
> Зачем верить? Что мешает самому сделать такой тест? :)Жизненный тест прям. Сделай такой же для go и посмотри результаты и ответь на вопрос: нужна ли нода?
Вполне нормальный тест. Еще на ассемблере потребуй реализовать, демагог.
> Вполне нормальный тест. Еще на ассемблере потребуй реализовать, демагог.Нормальный тест? Это аналог привет мира. Делать на основе этого выводы о производительности - бред. Никто не бросится переписывать приложения с кучей логики, где узкие места совсем в другом месте.
А пример с go действительно показательный в таком случае: код по сложности понимания такой же, а производительность будет сильно выше. Теперь все на go переписать?
Твоё предложение про асм - как раз и есть демагогия.
> Верить тестам производительности проекта конкурента
> Жизненный тест прям. Сделай такой же для go
> Никто не бросится переписывать приложения с кучей логикиТы так быстро спрыгиваешь с одной темы на другую, что уже сам запутался :)
>> Верить тестам производительности проекта конкурента
>> Жизненный тест прям. Сделай такой же для go
>> Никто не бросится переписывать приложения с кучей логики
> Ты так быстро спрыгиваешь с одной темы на другую, что уже сам
> запутался :)У меня все логично, не нужно переводить стрелки. Ты привёл в пример тесты самого бана, которые аналогичны привет миру и почти не содержат бизнес логики. Верить им нормальный погромист не станет. Но если ты им веришь, то возьми go и напиши аналогичный тест. Он порвёт бан. Теперь что из этого следует (по твоей логике), что срочно нужно все на него переписать и нода и бан не нужны.
Когда есть Go и WebASM
Гошка не взлетела. Даже у нас в компании пробовали её, но не увидели особого смысла, плюс спецов почти нет.
У гошки нет альтернатив в горутинности, которая эффективнее многопоточности
что значит нет альтернатив? async/await всякие вполне себе альтернатива.
а недавно в яву завезли виртуальные потики. чем не альтернатива?
Так и пиши "Go в нашей компании не взлетел".
Странно, почему у других Go взлетел?
Достаточно ли прямы ваши ручонки и под что они заточены?
список вакансий говорит о многом, так что вы, неуважаемый эксперт по всем языкам мира, не правы
И что? По Rust вакансий почти нет. Из этого делаем вывод, что Rust херня и у нас прямые ручонки? Миллионы мух не могут же ошибаться?
>По Rust вакансий почти нет. Из этого делаем вывод, что Rust херняЭээээ... Да?
Любой, кто имеет приличный опыт разработки и на Си, и на каком-нибудь более высокоуровневом языке с gc, изучит go за пару дней, а через неделю будет писать продакшен-код.
Нет.
Есть те, кому зашло - и они таки будут.
А есть те, кому не зашло и они будут жалистно выпрашивать чего то другого - плюсы, жабу, ржавчик, ноду или свиной хрящик.Я к примеру "имел в виду" тащить разработку на тулесе который мне поперёк, ну дык и Го не всем - вдоль :) Нормально, так всегда было.
Тут главное смотреть не какая бабаягапротив, а чего сделали те кто - за. Гошники - [ОИ]го-го :) сколько вещей наклепали которые в работе каждый день. Некоторые я люто хейтю (доскер) но мне за них деньги платють так чтЭээ ... :)
Ну не знаю, это какой-то инфантилизм. У меня в одном проекте были и java, и nodejs, и go. Джава для бэкенда с числодробилками и AI, nodejs для миддлвари и вебсокетов, go для инфраструктурных микросервисов. Просто брал то, что лучше подходило для конкретной задачи.
Сырая булочка еще
```
async function testA(data) {
var data = data;
console.log(data); // Bun v1.0.7 выдал undefined
};
function testB(data) {
var data = data;
console.log(data); // Bun v1.0.7 выдал {xx: 11}
};
testA({xx: 11});
testB({xx: 11});
```
Ага, неторопливый async может иногда "выбесить" :)```
async function testA(data) {
var data111;
await (() => { data111 = data })();
console.log(data111);
};function testB(data) {
var data = data;
console.log(data);
};testA({xx: 11});
testB({xx: 22});
```Вывод:
{
xx: 22
}
{
xx: 11
}
(дополнительно Microsoft развивает вариант Node.js с движком Chakra-Core)
уже в архиве
А где предыдущие новости? Или чем так примечательна эта не-LTS версия?
холивар тс/нода вс чистый жб в наличии?)