Выпуск серверной JavaScript-платформы Node.js 10 и пакетного менеджера NPM 6
Анонсирован релиз Node.js 10.0.0, платформы для выполнения высокопроизводительных сетевых приложений на языке JavaScript. Node.js 10.0 относится к веткам с длительным сроком поддержки, но данный статус будет присвоен только в октябре, после проведения стабилизации. Обновления для LTS-веток выпускаются в течение 4 лет. Поддержка прошлой LTS-ветки Node.js 8.0 продлится до 2021 года, а позапрошлой LTS-ветки 6.0 до 2020 года. Поддержка промежуточной ветки Node.js 9.0 будет прекращена в июле 2018 года.
Среди улучшений в Node.js 10.0:
- Обновление движка V8 до версии 6.6. В новой версии отмечается оптимизация производительности асинхронных операций, функций promises/async, методов работы с массивами и строками (Array.prototype.*, String.prototype.indexOf). Более чем в 10 раз увеличена производительность операции Array#reduce для массивов с большим числом пустот или значений с плавающей запятой. Производительность оператора instanceof возросла в 3.6 раза. Устранены некоторые узкие места с производительностью Function.prototype.bind. WeakMap и WeakSet. Сокращено потребления памяти в движке V8;
- Переход на использование OpenSSL 1.1.0, что позволило обеспечить поддержку потокового шифра ChaCha20 и алгоритма аутентификации сообщений (MAC) Poly1305. В дальнейшем до осенней стабилизации Node.js 10 запланирован переход на ветку OpenSSL 1.1.1 для обеспечения поддержки TLS 1.3;
- Продолжен перевод проекта на новую систему обработки ошибок, в которой каждой проблеме присвоен свой уникальный код ошибки, что позволит организовать автоматизированный разбор проблем без привязки к тексту сообщения об ошибке и выпускать обновления текстов ошибок не дожидаясь следующего значительного релиза;
- Стабилизирован и переведён в категорию официально поддерживаемых новый API Node.js (N-API), который предоставляет средства для создания нативных дополнений к Node.js, не привязанных к JavaScript runtime и рассматриваемых как часть Node.js. N-API позволяет без перекомпиляции использовать существующее дополнение с новыми версиями Node.js и с разными JavaScript-движками (V8 и Chakra-Core);
- Расширены средства диагностики и отладки. Добавлены новые события трассировки для точного измерения времени выполнения кода, позволяющие выявлять узкие места и провалы в производительности в пользовательском коде. В API также добавлена возможность включения и выключения трассировки во время выполнения программы;
- Добавлен экспериментальный API fs/promises, предоставляющий вариант функций «fs», реализованный при помощи механизма promise и демонстрирующий более высокую эффективность;
- Обеспечена поддержка новых возможностей языка JavaScript. Function.prototype.toString () теперь возвращает строку с кодом функции, полостью совпадающую с тем, как функция задана в исходных текстах (все отступы и даже комментарии сохраняются);
- Добавлены дополнительные изменения для противодействия атакам по сторонним каналам и добавлена защита от обращения к памяти вне границ области, отведённой для WebAssembly, а также доступной через массивы и строки JavaScript.
Одновременно объявлено о выходе пакетного менеджера NPM 6, в котором отмечено существенное увеличение производительности — некоторые операции стали выполняться до 17 раз быстрее. В 2–3 раза ускорено выполнение команды «npm ci». Добавлена возможность настройки webhook (уведомления об изменении пакетов) непосредственно из CLI. Реализовано автоматическое разрешение конфликтов с файлами блокировки (lockfile) и упрощено создание повторяемых сборок.
В репозитории организована проверка пакетов на наличие известных уязвимостей — при установке пакетов, содержащих неисправленные уязвимости, пользователю теперь выводится специальное предупреждение. Для проведения анализа на наличие уязвимостей в уже установленных пакетах и связанных с ними зависимостях добавлена новая команда «npm audit». Более наглядно предоставлена информация о целостности метаданных, что упрощает выявление вредоносных модификаций или повреждений в пакетах.
© OpenNet