Рубрики
Без рубрики

Node.js 12: будущее бокового сервера JavaScript

Введение Node.js – это технология, изменяющая игрой, поскольку его первоначальный отпуск обратно … Теги с узлом, JavaScript.

Введение

Node.js – это технология, изменяющая игрой, поскольку его Первоначальный релиз обратно в 2009 году Отказ В двух словах он позволяет разработчикам использовать JavaScript для запуска сценариев на стороне сервера, создавая динамический веб-контент, прежде чем страница отправляется в веб-браузер пользователя. Следовательно, Node.js представляет собой «JavaScript везде» парадигма, объединяющая разработку веб-приложений вокруг одного языка программирования, а не требует разных языков для серверов и сценариев сторон с клиентами.

Если вы поклонник JavaScript и Node.js, как я, вы будете рады знать, что это собирается получить намного лучше.

Узел 12 новых и улучшен

Почему JavaScript собирается намного лучше? Node.js 12 только что бросил несколько месяцев назад.

23 апреля 2019 года, Node.js 12 официально запущен И энтузиасты JavaScript везде радовались. И давайте быть понятным, это не просто регулярное обновление старых версий, это большой капитальный ремонт с некоторыми крупными обновлениями, давайте пойдем по списку основных моментов.

Обновления двигателя V8 JavaScript

В дополнение к Ожидаемые настройки производительности и улучшения Это приходит с каждой новой версией двигателя JavaScript V8, на этот раз есть некоторые действительно примечательные обновления. Это включает:

  • Следы от нулевой стоимости асинхрониза – Это будет служить для обогащения Ошибка .stack Собственность с асинхронными кадрами вызовов без добавления дополнительного времени выполнения на двигатель V8
  • Более быстрые звонки с аргументами несоответствия – В прошлом V8 пришлось обрабатывать все вызовы функций со слишком многими или слишком несколькими параметрами одинаковыми способами, которые пришли по стоимости производительности. Теперь это достаточно умно, чтобы знать, когда он может пропустить этот шаг, уменьшая накладные расходы на вызов до 60%
  • Быстрее асинхронизированные функции и обещания – Да, действительно, использование Async на самом деле два дополнительных Микротики Быстрее, чем обещания сейчас, если вам нужна причина, помимо больше синтаксиса синтаксиса синхронного стиля Async/a ждать, обеспечивает разработчикам, незнакомым с обещаниями
  • Быстрый разбор JavaScript – При запуске веб-страницы чуть менее 10% от времени V8 проводится разборки JS. Последний выпущенный JavaScript Parser имеет улучшенную скорость разбора на рабочих столах до 30%

Более безопасность безопасностью с TLS 1.3

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

С выпуском Node.js 12, TLS получает обновление до версии 1.3 , который звучит незначительно, но на самом деле является основным обновлением, с многочисленными повышениями производительности и безопасности. Хотя сначала звучит CounterIntuitive, TLS 1.3 на самом деле является более простым протоколом для реализации, чем TLS 1.2, что делает его более безопасным, легким настраивать и быстрее договориться о сеансах между приложениями.

Используя TLS 1.3, узел приложения у узла будут увеличены конфиденциальность конечной пользователей, одновременно улучшая производительность запросов за счет уменьшения времени, необходимого для рукопожатия HTTPS.

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

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

Теперь давайте поговорим о некоторых улучшениях более низкого уровня. До этого момента размера кучи JavaScript по умолчанию по умолчанию для размеров Max Heap устанавливается V8 для использования с браузерами, если не настроен вручную иначе. Благодаря выпуску Node.js 12 размер кучи JS будет настроен на основе доступной памяти, которая обеспечивает узел не пытается использовать больше памяти, чем доступно и завершает процессы, когда его память исчерпана.

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

По умолчанию HTTP Parser становится LLHTTP

Неизвестное для многих (я включенных), текущий http_parser Библиотека, используемая в узле, была чрезвычайно трудна для обслуживания и улучшения, поэтому …| llhttp был рожден. Проект представляет собой порт http_parser для teadercript, который затем проходит через LLARSE для генерации вывода C или Bitcode.

Оказывается, LLHTTP быстрее, чем http_parser на 156% , он написан в меньшем количестве строк кода, и все оптимизации производительности генерируются автоматически, в отличие от руки http_parser, оптимизированного вручную.

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

Диагностические отчеты по требованию

Переключение разговора для отладки, есть новая экспериментальная функция в Node.js 12, позволяя пользователям генерировать отчет по требованию или когда происходят определенные события триггера.

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

Интегрированные кучи свалки

Еще одна особенность в этом выпуске вокруг кучей, обязательно ускорить процесс отладки, интегрированные кучи свалки, которые отправляются с Node.js 12, уже встроены.

Теперь нет необходимости устанавливать новые модули для расследования проблем с памятью – просто скажите узел, что за формат диагностики JSON DAPHATATTIDED, вы хотите, через командную строку или вызов API и проанализируете все данные.

Родные модули становятся легче в Node.js

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

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

Итоги, это означает, что создатели и сопровождающие узел-специфические модули имеют почти так же легкое время, поддерживая эти модули как создатели чистого модуля JavaScript. Повышенная сложность, которая привела к сопровождающим, нуждающимся в восстановлении распределенных двоичных файлов для каждой версии Node.js, они хотели, чтобы их модули поддержать, теперь в настоящее время в значительной степени абстрагированы любезностями от N-API.

Рабочие потоки идут – Экспериментальный флаг был удален

Рабочие потоки, пока они были рядом с узла 10, больше не требуют включения флага – они хорошо на пути к выходу из экспериментальной фазы. До Node.js 11.7.0, вы не смогли получить доступ к модулю потока рабочего, если вы не запускаете узел с - эксплуатал-работник Флаг в командной строке.

$ node -e "require('worker_threads'); console.log('success');"
internal/modules/cjs/loader.js:605
    throw err;
    ^
Error: Cannot find module 'worker_threads'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:603:15)
    at Function.Module._load (internal/modules/cjs/loader.js:529:25)
    at Module.require (internal/modules/cjs/loader.js:657:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at [eval]:1:1
    at Script.runInThisContext (vm.js:123:20)
    at Object.runInThisContext (vm.js:312:38)
    at Object. ([eval]-wrapper:6:22)
    at Module._compile (internal/modules/cjs/loader.js:721:30)
    at evalScript (internal/bootstrap/node.js:720:27)
$
$ node --experimental-worker -e "require('worker_threads'); console.log('success');"
success
$

Рабочие действительно сияют при выполнении процессорно-интенсивных операций JavaScript, они не помогут сильно с интенсивной работой в I/O Встроенные встроенные асинхронные операции ввода-вывода более эффективны, чем могут быть рабочие.

Улучшения времени запуска

Node.js 11 Уменьшенное время запуска Рабочие потоки почти 60% Используя встроенный код Code Cache.

Узел 12 создал эту идею, чтобы генерировать кеш кода для встроенных библиотек Заранее В Tire Time, позволяя основной нити использовать кэш кода, чтобы запустить начальную нагрузку любой встроенной библиотеки, написанной в JavaScript.

Конечный результат еще 30% Ускорение в времени запуска для основного потока, и ваши приложения будут загружаться для пользователей быстрее, чем когда-либо прежде.

Поддержка модуля ES6 , это почти здесь

Я спас лучшее для последнего. Одна из самых захватывающих функций для меня – Поддержка модуля ES6 – То, что многие из нас ждали. Эта функция все еще экспериментала, а Узел команда ищет отзыв От людей пробуют это, но просто представьте, чтобы иметь возможность беспрепятственно переходить от передней части до конца JavaScript с Nary заботой в мире.

Вот лучший из того, что последняя версия --Эксииментные модули содержит:

  • ES2015 Импорт операторы, которые ссылаются на файлы JavaScript с относительными URL-адресами ./examples.js абсолютные URL-адреса Файл:///opt.app/examples.js , имена пакетов Пример-пакет или пути внутри пакетов Пример-пакет/lib/examphes.js все поддерживаются.
// relative urls
'./examples.js'

// absolute URLs
'file:///opt.app/examples.js'

// package names
'example-package'

// paths within packages
example-package/lib/examples.js
  • Импорт и синтаксис экспорта в .js Файлы работает. Наконец, Devs может указать экспорт по умолчанию Тест импорта от './examples' , названный экспорт Импорт {example1, example2} из './examples' И пространство имен экспортирует Импорт * как образцы из './Examples' Точно так же, как мы занимались традиционным JavaScript, так как пришла ES6.
// default imports / exports
import test from './examples'

// named imports / exports
import {example1, example2} from './examples'

// namespace exports
 import * as samples from './examples'
  • Добавить «Тип»: «Модуль» к package.json Для проекта и Node.js будет лечить все .js Файлы в проекте как модули ES. Этот подход позволяет узлу использовать package.json Для метаданных на уровне пакета и конфигурации, аналогично тому, как она уже используется Babel и другими инструментами подключения и конфигурации.
  • Явные расширения для файлов будут рассматриваться как модули с .mjs Завершение, и файлы будут рассматриваться как Commonjs с .cjs. . Это файлы, которые все еще используют требуется и Module.exports синтаксис -тип.

Аллилуйя! Я действительно расти, когда это выходит из-за флага для полного усыновления.

Новые компиляторы и платформы минимальные стандарты для узла 12

И последнее, но не менее важное, появляются новые требования для самого бегового узла.

С новыми функциями, приходящими к Node.js через внутренние улучшения и обновления на C ++ двигателя V8, наступает новые минимальные требования для Node.js 12. Теперь кодовая база имеет минимум GCC 6 и GLIBC 2.17 на платформах, отличных от MacOS и Windows. Двухъярусные файлы выпускают этот новый минимум набора инструментов и включают новые возможности компиляции и улучшения безопасности.

Если вы используете MAC или Windows Machines, вам следует быть в порядке: минимумы Windows одинаковы для работы Node.js 11, пользователи Mac понадобится как минимум Xcode 8 и минимум MacOS 10.10 «Йосемит». Binux Совместимые двоичные файлы из Nodejs.org будут поддерживать Предприятие Linux 7 , Debian 8 и Ubuntu 14.04 , но пользовательские наслажденные инструменты на системах, не являющихся вспомогательным, поддерживающим GCC 6. Я уверен, что вы выясните, что нужно достаточно быстро.

Заключение

Да, Node.js всего за 10 лет, да, это одиночная резьба, и да, он не так широко принят и используется как некоторые другие языки программирования, но узел может похвастаться чем-то другим языком программирования, не может претендовать: Он построен с JavaScript и может работать как на клиенте, так и на стороне сервера Отказ

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

Node.js 12 приводит к некоторым чрезвычайно захватывающим улучшениям, такими как модуль ES6 Module, лучшая безопасность приложения и более быстрое время запуска. Хотя это не пойдет в Режим LTS (долгосрочная поддержка) до октября 2019 Я прокачиваю, чтобы копаться в этих новых функциях и посмотреть, что еще команда может мечтать, чтобы продолжить сделать эту платформу отличное решение для сервера.

Plug: Logrocket, DVR для веб-приложений

Logrocket Это инструмент для ведения журнала Frontend, который позволяет вам повторить проблемы, как если бы они произошли в вашем браузере. Вместо того, чтобы угадать, почему случаются ошибки, или просят пользователей на скриншоты и журнал свалки, Lognocket позволяет воспроизвести сеанс, чтобы быстро понять, что пошло не так. Он отлично работает с любым приложением, независимо от основ и имеет плагины для регистрации дополнительного контекста из Redux, Vuex и @ Ngrx/Store. В дополнение к регистрации действий и состояния Redux, Lognocket Records Console Logs, ошибки JavaScript, Stacktraces, Networks/Ответы с заголовками + тел, метаданные браузера и пользовательские журналы. Он также привлекает инструменты DOM для записи HTML и CSS на странице, воссоздая Pixel-Perfect видео даже самых сложных одностраничных приложений. Попробуйте бесплатно Отказ

Пост Node.js 12: будущее бокового сервера JavaScript появился первым на Logocket blog Отказ

Оригинал: “https://dev.to/bnevilleoneill/node-js-12-the-future-of-server-side-javascript-3gma”