The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выпуск серверной JavaScript-платформы Node.js 15.0

23.10.2020 10:45

Состоялся релиз Node.js 15.0, платформы для выполнения сетевых приложений на языке JavaScript. Node.js 15.0 относится к ветке с обычным сроком поддержки, обновления для которой будут выпускаться до июня 2021 года. В ближайшие дни будет завершена стабилизация ветки Node.js 14, которая получит статус LTS и будет поддерживаться до апреля 2023 года. Сопровождение прошлой LTS-ветки Node.js 12.0 продлится до апреля 2022 года, а позапрошлой LTS-ветки 10.0 до апреля 2021 года.

Основные улучшения:

  • Добавлена экспериментальная реализация класса AbortController, основанного на Web API AbortController и позволяющего отменять сигналы в выбранных API на основе Promise.
  • N-API (API для разработки дополнений) обновлён до версии 7, в которой появились новые методы для работы с ArrayBuffers.
  • Движок V8 обновлён до версии 8.6, что позволило реализовать в Node.js 15 такие возможности, как Promise.any(), AggregateError, String.prototype.replaceAll(), а также операторы логического присвоения "&&=", "||=" и "??=".
  • Осуществлён переход на новый выпуск пакетного менеджера NPM 7.0, в котором появилась поддержка рабочих областей (Workspaces) для объединения зависимости из нескольких пакетов в один пакет, реализована автоматическая установка peer-зависимостей, предложена вторая версия формата блокировок (package-lock.json v2) и поддержка файла-блокировки yarn.lock.
  • Обработчик unhandledRejection переключен на использование по умолчанию исключений "throw" вместо предупреждений "warn". В режиме "throw", при отсутствии явно определённого обработчика, unhandledRejection теперь генерирует неперехватываемое исключение, но если обработчик задан поведение не изменится. Для возвращения старого поведения предусмотрен флаг "--unhandled-rejections=warn".
  • В модуль "net" добавлена экспериментальная поддержка протокола QUIC, который лежит в основе HTTP/3 и рассматривается как альтернатива связке TCP+TLS для Web, решающая проблемы с большим временем установки и согласования соединений в TCP и устраняющая задержки при потере пакетов в процессе передачи данных. QUIC представляет собой надстройку над протоколом UDP, поддерживающую мультиплексирование нескольких соединений и обеспечивающую методы шифрования, эквивалентные TLS/SSL. Для включения поддержки QUIC в Node.js требуется сборка с флагом "--experimental-quic".

Напомним, что платформа Node.js может быть использована как для серверного сопровождения работы Web-приложений, так и для создания обычных клиентских и серверных сетевых программ. Для расширения функциональности приложений для Node.js подготовлена большая коллекция модулей, в которой можно найти модули с реализацией серверов и клиентов HTTP, SMTP, XMPP, DNS, FTP, IMAP, POP3, модули для интеграции с различными web-фреймворками, обработчики WebSocket и Ajax, коннекторы к СУБД (MySQL, PostgreSQL, SQLite, MongoDB), шаблонизаторы, CSS-движки, реализации криптоалгоритмов и систем авторизации (OAuth), XML-парсеры.

Для обеспечения обработки большого числа параллельных запросов Node.js задействует асинхронную модель запуска кода, основанную на обработке событий в неблокирующем режиме и определении callback-обработчиков. В качестве способов мультиплексирования соединений поддерживаются такие методы, как epoll, kqueue, /dev/poll и select. Для мультиплексирования соединений используется библиотека libuv, которая является надстройкой над libev в системах Unix и над IOCP в Windows. Для создания пула потоков (thread pool) задействована библиотека libeio, для выполнения DNS-запросов в неблокирующем режиме интегрирован c-ares. Все системные вызовы, вызывающие блокирование, выполняются внутри пула потоков и затем, как и обработчики сигналов, передают результат своей работы обратно через неименованный канал (pipe). Выполнение JavaScript-кода обеспечивается через задействование разработанного компанией Google движка V8 (дополнительно Microsoft развивает вариант Node.js с движком Chakra-Core).

По своей сути Node.js похож на фреймворки Perl AnyEvent, Ruby Event Machine, Python Twisted и реализацию событий в Tcl, но цикл обработки событий (event loop) в Node.js скрыт от разработчика и напоминает обработку событий в web-приложении, работающем в браузере. При написании приложений для node.js необходимо учитывать специфику событийно-ориентированного программирования, например, вместо выполнения "var result = db.query("select..");" с ожиданием завершения работы и последующей обработкой результатов, в Node.js использует принцип асинхронного выполнения, т.е. код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных.





  1. Главная ссылка к новости (https://nodejs.org/en/blog/rel...)
  2. OpenNews: Автор Node.js представил защищённую JavaScript-платформу Deno 1.0
  3. OpenNews: Выпуск серверной JavaScript-платформы Node.js 14.0
  4. OpenNews: Выпуск серверной JavaScript-платформы Node.js 13.0
  5. OpenNews: Выпуск сервера приложений NGINX Unit 1.5 с поддержкой Node.js
  6. OpenNews: Бэкдор в зависимости к event-stream, популярной библиотеке для Node.js
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/53950-node.js
Ключевые слова: node.js
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (127) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, zo0M (ok), 10:59, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    А почему про Deno так не клепаются новости на каждый новый релиз?
     
     
  • 2.11, vitalif (ok), 11:48, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Потому что никому оно не нужно
     
     
  • 3.12, zo0M (ok), 11:50, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +18 +/
    местных грамотеев как послушать, так вообще интернеты эти ваши непонятно зачем существуют.
     
     
  • 4.28, НяшМяш (ok), 14:00, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Немного расширю комментарий прошлого оратора. Пока в Deno не будет совместимости с существующими библиотеками для ноды (вроде бы это пилится https://deno.land/std@0.67.0/node/README.md) - он никому не нужен. Если всё равно кардинально менять платформу - то проще на голанг сбежать, например.
     
     
  • 5.30, Аноним (30), 14:48, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Вот не нужно это тут сравнивать, GO нормальный - императивный язык а не это фу... поделие.
     
     
  • 6.56, НяшМяш (ok), 16:59, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Go похож на внебрачную дочь C и непонятно чего по синтаксису. Вот например, зачем там нужны указатели? В Java нет, в JS их нет. Я тогда лучше на голой сяшке попишу, её хотя бы на любой утюг с компилятором вкрячить можно.
     
     
  • 7.63, АнонимГоним (?), 18:00, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А как без указателей делать указатель на указатель на, например, структуру, мм? Указатели топ, если херней не страдать.
     
  • 7.73, анонимбр (?), 19:47, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –4 +/
    потому что в Go копирование по значению:) в не к ночи помянутой Java объекты создаются оператором new.
     
  • 7.82, Аноним (82), 20:10, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Согласен убрать указатели и заменить на ссылки, а nul реализовать через Optional<>
     
  • 7.111, Jh (?), 05:27, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    указателей нет, но ссылочные типы ведут себя практически так же. постоянно надо проверять на null
     
  • 6.59, proninyaroslav (ok), 17:05, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Из преимуществ там только статическая типизация и компиляция в один бинарник. Других преимуществ придумать сложно.
     
     
  • 7.60, Анын (ok), 17:15, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Ну, например, Rest API и прочие JSON в стандартной библиотеке.
     
     
  • 8.61, proninyaroslav (ok), 17:34, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Ну это не один такой язык у котором в STD есть работа с json Да и установить та... текст свёрнут, показать
     
  • 7.74, анонимбр (?), 19:48, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    статическая типизация помогает не писать тест на каждый чих. хотя можно использовать TS вместо JS.
     
  • 7.75, анонимбр (?), 19:49, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    + в Go есть такая шикарная особенность как goroutines
     
  • 2.34, Аноним (34), 15:14, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Потому что ты их не пишешь. Подсказка пиши их туда https://www.opennet.ru/announce_news.shtml
     

  • 1.3, m.makhno (ok), 11:01, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > Обработчик unhandledRejection переключен на использование по умолчанию исключений "throw" ... В режиме "throw" при отсутствии явно определённого обработчика unhandledRejection генерирует неперехватываемое исключение, но если обработчик задан поведение не изменится.

    Что за «фича» такая?

     
     
  • 2.15, Good enough (?), 12:10, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ловит все необработанные исключения. Что не понятно?
     
     
  • 3.17, m.makhno (ok), 12:30, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Что не понятно?

    Возможно, я не так понял, но получается, что это ВСЕГДА неперехватываемое исключение? Оно ловится каким-то особым catch? Я просто не знаю Node.js, да и JavaScript, вот и уточняю. Может, эта фича действительно интересная. А может и нет.

     
     
  • 4.24, Аноним (24), 13:25, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если мы делаем fsp.writeFile('qwe.txt', 'aaaaaa').then(...)
    И не написали .catch(...) то мы не узнаем если в файл записать не удалось.
    Раньше это просто молча глаталось, теперь будет выкидывать ошибку.
    А надо не ловить через try, а писать где надо .catch(...).
    В случае с async функциями и await fsp.writeFile, оно и так сгенерит эксепшен.
     
     
  • 5.136, a (??), 18:57, 30/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    >> Раньше это просто молча глаталось, теперь будет выкидывать ошибку.

    PIZS$%$AD, И как это жило 14 версий-то? О-о-о

     
  • 4.27, НяшМяш (ok), 13:53, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Этот обработчик ловит необработанные исключения - например сделал throw вне блока try-catch. В предыдущих версиях если ты не ставил свой обработчик например так:



    process.on('unhandledRejection', (reason, promise) => {
      console.log('Unhandled Rejection at:', promise, 'reason:', reason);
      // Application specific logging, throwing an error, or other logic here
    });



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

  • 1.4, Неиллюзорная Машина Локалхоста (?), 11:06, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > AbortController

    Как это до сих пор не переименовали?

     
     
  • 2.78, Дерьмократ (?), 19:59, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    В BlackController?
     
  • 2.102, Аноним (102), 23:21, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем переименовывать? pro-choiceров в США не травят.
     
     
  • 3.113, GNU Аноним (?), 08:33, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Уже забыл, как Столмана за abortion joke травили?
     

  • 1.5, Страшно (?), 11:13, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    >код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду

    Это же кошмар!

     
     
  • 2.9, Cradle (?), 11:35, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    к асинхронному исполнению еще привыкнуть можно, но у ноды есть такие вот риски
    1) в яваскрипте вы можете очень легко сделать замыкание, тогда на каждый вызов обработчика для каждой записи она будет резервировать неожиданно много памяти,
    2) у V8 очень ленивый сборщик мусора, поэтому разгребать он начнет через какое-то время после того как весь запрос обработается

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

     
     
  • 3.14, vitalif (ok), 12:01, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    хз, по моим наблюдениям память хорошо подбирает, по крайней мере по сравнению с явой. яве допустим дали 10 гб - она такая оооо гуляем!!! а нода отдаёт быстро обратно.
     
  • 3.21, Аноним (21), 12:33, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    да, память кушать любит. но не сильно больше, чем руби какой-нибудь
     
  • 3.26, Q2W (?), 13:33, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > в яваскрипте вы можете очень легко сделать замыкание

    Вот это непонятно. В каких случаях замыкание получается легче ожидаемого?

     
     
  • 4.31, Cradle (?), 15:07, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    если в асинхронном обработчике использовать переменную из контекста вызывающей функции, например ненароком забыть обьявить через var, а тем более когда специально нужно использовать данные от caller, если по другому их туда не передать. Просто, многие яваскрипт используют а про замыкания не знают, и если в браузерном JS не часто требуется создавать > 100k объектов сразу, то в ноде при работе с sql реально можно нарваться. При том что до какого-то предела в тестах все будет работать, потому что эта память нужна кратковременно и GC ее потом освободит быстро, а в продакшене потом вдруг начинает процесс дохнуть.
     
     
  • 5.32, Cradle (?), 15:09, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    пардон, из контекста создающей функции конечно, вызываться-то будет конечно в другом месте
     
  • 2.13, Аноним (13), 11:50, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Кошмар? Сразу видно человека, который слабо разбирается и не видит многих классных фич.
     
  • 2.22, Ordu (ok), 12:34, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А как надо, чтобы не страшно было? Блокировать поток, в ожидании выполнения запроса?

    Или ты о слишком многословном синтаксисе для лямбд? В смысле надо писать так, чтоб не страшно было:

    db.query("select..", |result| {обработка результата});

    ?

     
     
  • 3.65, OpenEcho (?), 18:40, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    >А как надо, чтобы не страшно было?

    IMHO, cоздать явно поток, инициализировать мютекс,семафор..., запустить и идти делать свои дела дальше, переодически проверяя мютекс...

    Оно как то укладывается лучше в башку, по сравнению с ЖС концепцией:
    function(function(function(function{pook})))

    Хотя, програмист он как шофер, если умеет ездить, то будет водить любую тачку,
    другое дело, что крутить руль у КРАЗа посложней чем у бэхи

     
     
  • 4.69, Ordu (ok), 19:10, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > IMHO, cоздать явно поток, инициализировать мютекс,семафор..., запустить и идти делать свои дела дальше, переодически проверяя мютекс...

    Зачем тебе здесь мьютекс? Мьютекс -- это медленно. А если у тебя 10k таких мьютексов будет, что ты будешь делать?

     
     
  • 5.88, OpenEcho (?), 20:24, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я про концептуальность, прозрачность кода и удобство поддержки это разве читаем... большой текст свёрнут, показать
     
     
  • 6.100, Ordu (ok), 21:43, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Мне кажется, надо спрашивать о читабельности не после деобфускации, а до обфуска... большой текст свёрнут, показать
     
     
  • 7.127, OpenEcho (?), 19:07, 25/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Я не про обфускацию, прогоните через любой деобфускатор и увидите модный стиль А... большой текст свёрнут, показать
     
     
  • 8.129, Ordu (ok), 01:35, 26/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А я про обфускацию Точнее про машинно-сгенерированный код Я не знаю из чего он... большой текст свёрнут, показать
     
     
  • 9.130, OpenEcho (?), 01:30, 27/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Гхм Вы правда знаете машины которые способны сгенировать довольно сложный лог... большой текст свёрнут, показать
     
     
  • 10.131, Аноним (131), 02:15, 27/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Вы вообще не понимаете то, о чём пишете И даже не отличаете, и не понимаете чем... текст свёрнут, показать
     
  • 10.134, Ordu (ok), 16:13, 27/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Я не знаю как ты пришёл к выводу о том, как был сгенерирован код, поэтому я прод... большой текст свёрнут, показать
     
     
  • 11.137, a (??), 19:11, 30/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    ждем пример асинхронности для однопоточной программы И рассказ в чем его преиму... текст свёрнут, показать
     
     
  • 12.140, Ordu (ok), 20:10, 30/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    man 7 epoll В том, что обрабатывая соединения синхронно, ты будешь обрабатывать ... текст свёрнут, показать
     
  • 11.142, OpenEcho (?), 17:10, 01/11/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Н-да, жалко потеряного времени Нарцицизм и демагогия самоучки из подвала, пыта... текст свёрнут, показать
     
     
  • 12.143, Ordu (ok), 20:34, 01/11/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Реальные люди, с которыми я общаюсь, в отличие от тебя не имеют никаких проблем ... текст свёрнут, показать
     
  • 4.94, Аноним (94), 20:38, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Вы умрёте создавать 4 потока с мьютексами и следить за всеми из вашего же примера.
    В js просто создадут async функцию и будут программировать в императивном стиле если надо несколько асинхронных операций выполнить
    Или объединят промисы
     
     
  • 5.126, OpenEcho (?), 17:34, 25/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну тогда я с вами с того света говорю... если от 4х потоков должен был помереть

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

     
  • 4.98, мяя (?), 21:31, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > function(function(function(function{pook})))

    Можно писать каллбеки без каллбечного ада и есть промизы.
    Например



    function asyncFunc(callback) {
      https.get("url", (result) => {
        result.on("data", (data) => {
          callback(data);
        }
      }.on("error", (error) => {
        console.error(error);
      });
    }
    function anotherFunc() {
      // blabla
      let consoleLog = 1;
      asyncFunc((result) => {
        if (consoleLog) {
          console.log(result);
        }
      });
    }



     
     
  • 5.125, OpenEcho (?), 17:25, 25/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Да можно конечно, но я про массовый хайп, а не про так надо бы
     
  • 3.86, Аноним (94), 20:19, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    let result = await db.query("select..");
    обработка результата...
     
  • 2.84, Аноним (82), 20:13, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Это же кошмар!

    Потому что никто так не пишет.
    Все пишут уже с использованием асинхронного синтакиса:

    const result = await db.Query('...');

    Правда остались какие-то непонятне любители callback-ов приплюснутые.

     
     
  • 3.96, Антон (??), 20:42, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    эвейты крайне неудобны в сравнении с Rx из мира любителей колбэков
     
  • 2.92, Онаним (?), 20:35, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это не кошмар, это новый макакерский манямирок.
     

  • 1.6, Виталик (??), 11:16, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    >дополнительно Microsoft развивает вариант Node.js с движком Chakra-Core).

    Уже не развивает, гугл всех победил

     
     
  • 2.50, Уася (?), 16:13, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    и слава госпаду богу. не нужен микрасофт с их get the facts и eee
     
     
  • 3.115, Аноним (115), 10:13, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Слава гуголу, что всех нагнул.
     

  • 1.7, Аноним (7), 11:30, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вообще-то это неделю назад было.
     
     
  • 2.19, Аноним (19), 12:31, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > 2020-10-20
     

  • 1.8, Аноним (8), 11:33, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    А слабо вам написать целый браузер на Bash? А я написал

    Так что вам ЖС не нужен

     
     
  • 2.20, Аноним (21), 12:31, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    ссылку, сестра
     
     
  • 3.23, Blind Vic (ok), 13:13, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +27 +/
    echo "Целый браузер"
     

  • 1.16, YetAnotherOnanym (ok), 12:15, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    > код трансформируется в "db.query("select..", function (result) {обработка результата});", при котором управление мгновенно перейдёт к дальнейшему коду, а результат запроса будет обработан по мере поступления данных

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

    А впрочем, нуевонафиг, коммент уже написан, можно уже ничего не вспоминать.

     
  • 1.18, Аноним (21), 12:30, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    отличный фреймворк. а уж с параллельными вычислениями там просто сказка о колобке.
     
  • 1.29, Javaist (?), 14:43, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    Скажите, зачем оно вообще нужно? Для поднятия ЧСВ бывших фронтэндеров, которых раньше не пускали в бекэнд? Как на JavaScript можно писать что-то более менее серьёзное?
     
     
  • 2.33, еее (?), 15:10, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Сам не пойму... Чел
    ..
    Когда кто то ответит ударьте.
     
  • 2.35, Cradle (?), 15:14, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    а что вы можете сказать про php ruby python? Ведь не явой единной, или ?
     
     
  • 3.38, Аноним (38), 15:23, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    пхп стоит сравнивать с пёрл, яву с дотнетом, и только с жс никто не конкурирует
     
     
  • 4.41, Cradle (?), 15:44, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +3 +/
    ну почему же, нода реально теснит php и python на бэкэнде, ruby там вроде как ни пытался но изза своих косяков не смог сильно распространиться, perl так вообще с 2005-го ушел из веба и не конкурент. Так что по сфере применения js сейчас вполне со старожилами бэкенда конкурирует.
     
     
  • 5.44, Аноним (38), 15:58, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Так php с python это такие обёртки для си по факту (и всё интерпетируемое будет тормозить), а жс нет. При этом у жс были проблемы с однопоточностью, у питона же однопоточность отключается при переходе в сишный код. Какая уж тут конкуренция?
     
  • 5.95, Онаним (?), 20:40, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Теснит, угу...
    Аж реально.

    https://w3techs.com/technologies/details/pl-php
    https://w3techs.com/technologies/details/ws-nodejs

    Даже если она кого-то и теснит, то это явно не PHP, потому что он никуда не подвинулся.

     
     
  • 6.103, Аноним (131), 01:24, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Кто в этот бред поверит?
    PHP используется для лошья и legacy. Его только WordPress и Drupal вытягивает.

    Какие бл...сайты? Сайты давным давно хостятся отдельно от бэкэнда.

     
     
  • 7.114, Онаним (?), 09:23, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Этот "бред" знает любой, кто хотя бы мало-мальски плавает в отрасли.
    Хипстеры в своих маня-мирках, естественно, мимо.
     
  • 5.128, анонизмус (?), 21:01, 25/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Уже не теснит. Хайп по ноде уже прошел. И новых проектов на ней стартует все меньше. Как в свое время было с руби.
     
  • 2.37, Аноним (131), 15:20, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Как человек, папу лет писавший на backend на Java, а потом на Scala пару лет Ес... большой текст свёрнут, показать
     
     
  • 3.40, Cradle (?), 15:35, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    IMHO если выбирать javascript для реально больших проектов то всетаки рискуете нарожать множество костылей и велосипедов решая довольно тривиальные задачи. Другое дело что не всякий бэкэнд должен быть большим и толстым; иногда нужны простые вещи которые потом простыми и останутся.
     
     
  • 4.42, Аноним (131), 15:49, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Например, какие?

    Просто сейчас backend уже совсем не тот, что был раньше.

    Сейчас это тонкий клиент к AWS /Google Cloud / Azure. Обвязка.

    Он stateless и чисто сетевой. Для этого Node.js подходит идеально.

    Масштабирование тоже давно происходит за счёт контейнеров, а не "многопоточности". https://cloud.google.com/appengine/docs/flexible.

    Node.js идеален для современного backend, который service oriented. Пришёл JSON -> ушёл JSON.

     
     
  • 5.52, Cradle (?), 16:25, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ну о том и речь, если тонкий клиент к aws то идеально, а если самим свое облако делать то уже не обязательно.
     
     
  • 6.54, Аноним (131), 16:47, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Да, безусловно. Свой cloud provider на JavaScript писать не стоит. Наверное там нужна максимальная производительность.

    Но это очень узкая ниша. Я, кстати, писал такой в Parallels. У них был свой софт для развертывания кастомного cloud provider на базе их virtuozzo контейнеров.

    Сам cloud provider был написан на Java. Я бы сейчас уже Rust бы взял.

     
  • 5.77, анонимбр (?), 19:57, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Пришёл JSON -> ушёл JSON.

    такая чушь. где в этой схеме полезная нагрузка которая не сводится к одним запросам к БД?

     
     
  • 6.81, Аноним (19), 20:08, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Client-side render.
     
  • 6.104, Аноним (131), 01:26, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Поучи наконец современный web. Ты застрял в 90х
     
  • 4.43, Аноним (38), 15:50, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Лет 10 назад было модно делать браузерные ммо, так фронт с бэком пилили на жс. Очень топили за это, мол, унификация, проще работать, и вообще серебряная пуля. Понятно, что у ммо бэк это в общем случае обёртка над базой данных, но всё же, есть и такое, и в результате мы все оказались в сегодняшнем болоте. Лично я бы не выбрал жс ни за какие коврижки, и даже на клиенте он нужен только ради юзерскриптов.
     
     
  • 5.46, Аноним (131), 15:59, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Только 10 лет прошло. 10 лет назад это был совсем другой язык.

    Не было ни модулей, ни пакетов, ни npm, ни библиотек, ни Node.js, ни async / await, ни Promise, ни ... ничего не было. Никаких продвинутых оптимизаций в V8.

    Node.js появился May 27, 2009; 11 years ago. Те им ещё никто не пользовался.

    10 лет для языка - это бездна, пропасть.

     
     
  • 6.47, Аноним (38), 16:02, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ну, си за 40 лет не очень поменялся. Особенно не очень за последние 20. Всё так же хорош. D:
     
     
  • 7.51, Аноним (131), 16:16, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ахахах, я всё понял. "Всё также хорош" ахахах.

    Тут бесполезно серьезно что-то обсуждать, очень специфичная публика.

    Вероятно приходит чисто погундеть про "про..рали все полимеры" и потроллить.

     
     
  • 8.53, Аноним (38), 16:44, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ты не допёр, что это был сарказм, даже при наличии смайлика для особо одарённых ... текст свёрнут, показать
     
     
  • 9.57, Аноним (131), 17:00, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ну 10 лет назад был переход между Python 2 и Python 3 Я не могу назвать это не... текст свёрнут, показать
     
     
  • 10.62, Аноним (38), 17:40, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Если взять питон, то ничего заметного там не случилось в 3 Разве что добавили а... текст свёрнут, показать
     
     
  • 11.67, пох. (?), 18:58, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Абсолютно весь старый код внезапно работать перестал, и далеко не всегда почин... текст свёрнут, показать
     
     
  • 12.93, Аноним (38), 20:37, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Прохладная история, один и тот же код прекрасно работал в 2 и 3 одновременно По... текст свёрнут, показать
     
  • 7.64, пох. (?), 18:22, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Ну, си за 40 лет не очень поменялся.

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

    Ну, или, вот:

    static struct vfs_fn_pointers vfs_xattr_tdb_fns = {
            .getxattr_fn = xattr_tdb_getxattr,
            .fgetxattr_fn = xattr_tdb_fgetxattr,
            .setxattr_fn = xattr_tdb_setxattr,
            .fsetxattr_fn = xattr_tdb_fsetxattr,
            .listxattr_fn = xattr_tdb_listxattr,
            .flistxattr_fn = xattr_tdb_flistxattr,
            .removexattr_fn = xattr_tdb_removexattr,
            .fremovexattr_fn = xattr_tdb_fremovexattr,
            .open_fn = xattr_tdb_open,
            .mkdir_fn = xattr_tdb_mkdir,
            .unlink_fn = xattr_tdb_unlink,
            .rmdir_fn = xattr_tdb_rmdir,
            .connect_fn = xattr_tdb_connect,
    };

    в данном случае, конечно, "всепонятна", но это - C99, добравшийся до gcc не так чтоб безумно давно - и, главное - имеет совершенно неочевидный побочный эффект. Если ты учил его по книжке сорокалетней давности - ниразу не угадаешь, какой.

    Про static_assert двух перпендикулярных синтаксисов уже молчу, поскольку в общем-то dd, и всех дел.

     
     
  • 8.66, Аноним (38), 18:48, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Лайтовый сугубо опциональный сахар Что сказать то хотел ... текст свёрнут, показать
     
  • 3.68, банан (?), 19:01, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >  Как человек, папу лет писавший на backend на Java, а потом на Scala пару лет.
    > Во-первых, JavaScript очень хороший и хорошо спроектированный язык,

    Извиняюсь, но ваши слова звучат не убедительно.

     
     
  • 4.83, Аноним (19), 20:12, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ну, а мой путь таков C# -> PHP -> Perl -> Node.JS И реально своременный JS самый приятный из них (хотя поначалу тоже от него плевался). Но и сишарп тоже неплохо так эволюционировал за эти годы.
     
     
  • 5.99, Аноним (99), 21:42, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Здесь только про плохое говорить принято, а то заминусят. Обратил внимание, что количество минусов ставят больше в это время, сначала перевес был в положительную сторону, днём. Можно предположить, что в данный момент сидят глубоко несчастные одинокие люди, и им больше ннчем заняться, как гадить на других. (Я не считаюсь, т.к. в командировке)
     
     
  • 6.105, Аноним (131), 01:33, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да, очень странный сайт. Хотя новости самые интересные и подробные.

    Здесь надо кричать три вещи "про веб макак", про "не нужно", "нет чтобы написать на нормальном языке C++"

     
  • 3.76, анонимбр (?), 19:55, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    вот поэтому я и ушел с джабы и больше не вернусь
     
  • 3.107, нуприветдима (?), 03:03, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    "Если бы я, как архитектор, выбирал между Java / Scala / Python / PHP и JavaScript Node.js - я бы выбрал последнее." - вы точно писали бэкенд?
    "Во-первых, JavaScript очень хороший и хорошо спроектированный язык, по сравнению с Java" - всем отделом смеялись. Ага, хорошо спроектированный на коленке за 2 недели. (погуглите wtfjs)
    "На JavaScript код пишется в разы быстрее, чем на Java. И он значительно понятнее." - ложь. Оно не понятнее.
    "Огромное количество кода и библиотек. Большое количество знаний можно применить в смежных областях" - а в других языках нет библиотек?
    "Java очень многословна и монструозна." - и?
    А если серьезно. Я писал бэк на JS, TS, C#, и хочу сказать, что писать на JS будет только идиот. На TS еще куда ни шло, но джаваскриптовая экосистема сводит все плюсы TS на нет (если речь идет о крупных проектах). Писать небольшие сервисы на TS можно.
     
     
  • 4.108, Аноним (131), 04:59, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я писал backend на Java и Scala для мировых компаний, таких как Parallels Inc и... большой текст свёрнут, показать
     
     
  • 5.109, Аноним (131), 05:13, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Я написал несколько сотен тысяч строчек кода на JavaScript (TypeScript) и ни разу не сталкивался с ошибками преобразований типов (пустая строка в 0 и т.п.)
     
     
  • 6.118, банан (?), 13:13, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Я написал несколько сотен тысяч строчек кода на JavaScript (TypeScript) и ни
    > разу не сталкивался с ошибками преобразований типов (пустая строка в 0
    > и т.п.)

    А вы код свой запускали?

     
  • 5.119, банан (?), 13:27, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Мне нравятся ваши потуги доказать, что js - нормальный язык. Вы очень стараетесь и сами верите в свои слова.
     
  • 5.123, нуприветдима (?), 17:50, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >[оверквотинг удален]
    > Ой,а там где я создаю JSON или объект в несколько символов тебе
    > приходится писать сотни строчек примитивного кода? Даже не сочувствую.
    > Ложь. JavaScript значительно понятнее. Потому что не надо пробираться через многословность
    > Java, которая сильно отвлекает от понимания кода.
    > В других языках программирования значительно меньше библиотек, в разы. Может быть даже
    > на порядок. Потому что и программистов высококлассных (как и вообще программистов)
    > значительно меньше. И JavaScript инфраструктура заточена под open source.
    >> Я писал бэк на JS, TS
    > То, что ты просто говнокодил на JS/TS это понятно. Но даже это
    > их плюс. Создал файлик index.js и погнали.

    Ты либо тролль, либо лжец.
    Не обижайся, просто 99 % людей не воспринимают человека всерьез после слов "javascript - хорошо спроектированный язык"

     
  • 2.39, Аноним (131), 15:35, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не стоит забывать что JavaScript невероятно быстрый язык для интерпретируемого.

    Он всего в 5-7 раз медленнее самого оптимизированного C / C++ / Rust. В некоторых случаях (Regexp) даже быстрее.

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

    V8 имеет передовой State of the Art Generational Garbage Collector.

    Огромное количество оптимизаций по памяти и выполнению.

    Что-то похожее есть только в Java. Остальные языки тихо...в сторонке стоят.

    Про tools вообще можно ничего не говорить. Здесь вообще даже близко нет конкурентов.

     
     
  • 3.45, Аноним (38), 15:59, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не стоит забывать, что это заслуга очень жручих и не всегда оптимальных jit с aot.
     
     
  • 4.49, Аноним (131), 16:09, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да. Но есть и не жрущие альтернативы.

    В React Native JavaScript компилится в байт-код, как Java. И выполняется оптимизированной Hermes VM https://hermesengine.dev.

    Которая заточена под мобилки, в отличие от V8. Где мало памяти и слабые процессоры.

    Есть и движки, заточенные под embedded вообще и internet of things.
    https://github.com/jerryscript-project/jerryscript

    Есть и для Web похожий проект https://blog.cloudflare.com/binary-ast

    Есть WebAssembly на крайний случай.

     
  • 3.79, анонимбр (?), 19:59, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Что-то похожее есть только в Java. Остальные языки тихо...в сторонке стоят.

    такая чушь. сами же про C, C++, Rust упомянули:) Google также много вложил в Go на котором написаны к слову Kubernetes и Docker.

     
     
  • 4.106, Аноним (131), 01:41, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А C++ имеет Garbage Collection?
    У Go примитивный GC, не идёт ни в какое сравнение с тем что есть у JavaScript.

    Есть статья с хорошим анализом GC у Go. Там примитивный 40летний Mark-And-Sweep.

     
     
  • 5.138, a (??), 19:17, 30/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    >> У Go примитивный GC, не идёт ни в какое сравнение с тем что есть у JavaScript.
    >> Есть статья с хорошим анализом GC у Go. Там примитивный 40летний Mark-And-Sweep.

    Эта, та статья за 2012 год? А поновее не нашлось?

     
  • 3.120, банан (?), 14:15, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Огромное количество оптимизаций по памяти и выполнению.
    > Что-то похожее есть только в Java. Остальные языки тихо...в сторонке стоят.
    > V8 имеет передовой State of the Art Generational Garbage Collector.

    Вы как будто с кастрюлей на голове. Ваш девиз - JS быстрый, всё остальное медленное!

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

     
     
  • 4.121, Аноним (131), 14:42, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот и все аргументы типичного анонима с opennet.

    Сравнивают те, кто исследуют и пишут эти самые сборщики мусора. Я лишь анализирую информацию.

    https://stackoverflow.com/questions/7823725/what-kind-of-garbage-collection-do

     
     
  • 5.124, банан (?), 18:00, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Сравнивают те, кто исследуют и пишут эти самые сборщики мусора. Я лишь анализирую информацию.

    Здравствуй, программист со стаковерфлоу.

     
  • 5.139, a (??), 19:19, 30/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    What kind of Garbage Collection does Go use? ...  mark-and-sweep ...  Asked 9 years ago
     
  • 2.71, OpenEcho (?), 19:30, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >  Как на JavaScript можно писать что-то более менее серьёзное?

    более менее серьёзное: EtherCalc, Etherpad, OnlyOffice, Diagram Maker... google-maps :)


     
  • 2.116, Lex (??), 10:49, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Как на JavaScript можно писать что-то более менее серьёзное?

    Вполне неплохо. Другое дело, что, процентов 95% «бэкендов» в принципе не так, чтобы очень серьёзные..

     

  • 1.48, Уася (?), 16:03, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    1) "db.query("select..", function (result) {обработка результата});"
    легко превращается в
    2) "var result = await db.query("select..");"
    при условии если db.query умеет в промисы а не коллбеки как в примере 1)
     
     
  • 2.97, Онаним (?), 20:56, 23/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Я знаю точно, асинхронное синхронно...
    Это ж надо до такой степени доизголяться.
     
     
  • 3.112, Аноним (94), 08:26, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    До чего доизголяться?
     
  • 2.141, rex (??), 19:24, 31/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    promisify
     

  • 1.72, Дерьмократ (?), 19:42, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так и протащили обрезанный AbortController вместо нормальных CancellationToken
     
  • 1.101, Аноним (101), 21:46, 23/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Так так так, что тут у нас, релиз тормозного говна.
     
     
  • 2.110, Аноним (131), 05:14, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    У нас говнокомментарий! По коням!
     
  • 2.117, Lex (??), 10:50, 24/10/2020 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не, питон и рубин пока не релизятся
     

  • 1.132, Аноним (132), 10:10, 27/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Для мультиплексирования соединений используется библиотека libuv, которая является надстройкой над libev в системах Unix и над IOCP в Windows.

    На самом деле libuv является надстройкой (wrapper) над системными вызовами epoll, kqueue, /dev/poll и select, IOCP, а не libev.

     
     
  • 2.133, Аноним (132), 10:11, 27/10/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Возможно, имелось ввиду, что библиотека libuv выполняет те же задачи, что и libev + имеет поддержку IOCP в Windows.
     

  • 1.135, Ilya Indigo (ok), 19:50, 29/10/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Прочитал заголовок, как "Выпуск: скверной JavaScript-платформы Node.js 15.0 ", и не нащёл ошибок.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру