N-API: API следующего поколения для собственных надстроек Node.js доступны во всех линиях выпуска LTS.

Этот блог написали Арунеш Чандра, старший менеджер программ Microsoft Edge, и Майкл Доусон, руководитель сообщества IBM по Node.js. В нем рассказывается о текущем состоянии N-API, о том, как вы можете использовать эту технологию, и о модулях, которые используют N-API. Если вы посещаете саммит Node Summit, есть несколько способов узнать больше о N-API (подробнее об этом в сообщении ниже).

Возможно, вы слышали, что Node.js имеет экспериментальную поддержку N-API, нового API для нативных модулей. Уже нет! N-API теперь является стабильной и полностью поддерживаемой функцией Node.js начиная с версии 10. Он также доступен в качестве экспериментальной функции в Node.js 8 и 6.

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

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

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

N-API был введен в качестве экспериментальной функции в Node.js 8.0, и после выполнения строгих критериев выхода, определенных сообществом, он был повышен до поддерживаемой функции в Node.js 10. Он также был перенесен на всех Линии выпуска LTS. Наличие N-API с одним и тем же API во всех выпусках LTS - важная веха, и мы считаем, что это значительный шаг на пути к ее внедрению. Большое спасибо Габриэлю Шульхофу, приложившему огромные усилия для поддержки этой функции в этих версиях.

Использование N-API в разных версиях

Начиная с версии 8.11.2, все линии выпуска LTS предоставляют одинаковый набор API для N-API. Статус каждого следующий:

  • 10.x - стабильный
  • 8.x - экспериментально с предупреждением. Это станет стабильным в следующем второстепенном выпуске SemVer (8.12).
  • 6.x - экспериментально, без предупреждения. При обратном переносе обновленных API на 6.x мы считали необходимым период тестирования, прежде чем сделать его стабильным. Кроме того, поскольку 6.x находится в режиме обслуживания, нам необходимо достичь консенсуса в TSC, чтобы получить одобрение, чтобы сделать его стабильным в будущем. Хотите помочь? Проверьте версию 6.x и оставьте отзыв. Ваш отзыв поможет нам определить, готова ли эта функция к стабильной работе в 6.x.

Узел-пре-гипс

Для авторов собственных модулей N ode-pre-gyp - отличный инструмент для публикации двоичных пакетов, которые могут установить конечные пользователи. Поскольку это такая важная часть существующей экосистемы собственных модулей Node.js, команда N-API работала с сопровождающим node-pre-gyp, чтобы интегрировать поддержку для создания и публикации модулей N-API. Большое спасибо Джиму Шлайту и Дэйну Спрингмейеру, которые сделали это возможным.

Готовность Node-pre-gyp к поддержке надстроек N-API - еще одна важная веха, которая, по нашему мнению, является значительным шагом на пути к принятию.

Если вы хотите узнать больше об использовании node-pre-gyp с N-API, ознакомьтесь с документацией node-pre-gyp здесь: https://github.com/mapbox/node-pre-gyp#n-api -соображения

Узел-аддон-api

Хотя N-API предоставляет интерфейс C, многие разработчики модулей используют C ++. Модуль node-addon-api предоставляет встроенную оболочку, которая позволяет разработчикам использовать C ++ и легко переходить с nan. Модуль node-addon-api был обновлен для использования встроенного в 6.X N-API, так что он использует встроенную версию N-API для последних версий 6.x, 8.x и 10.x. . Список иждивенцев этого модуля постоянно растет.

Команда N-API продолжает фокусироваться на заполнении документации для node-addon-api и решении выявленных проблем, поскольку мы продолжаем видеть рост использования.

N-API в использовании - демонстрация модуля

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

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

Сегодня мы выделяем Log ++, который демонстрирует использование N-API для входа в приложение с высокими требованиями к производительности.

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

  • Форматирование, требующее интенсивных вычислений, реализовано в высокопроизводительном C ++.
  • Задача форматирования выгружается в поток фоновой обработки.

В результате регистратор работает в 4–7 раз быстрее, чем существующие решения для ведения журнала.

Увлекаться

Хотите принять участие? Ознакомьтесь с этими ссылками на документацию ниже:

Хотя мы добились большого прогресса в N-API, мы всегда можем воспользоваться дополнительной помощью. Вот несколько способов, которыми вы можете помочь:

  • Перенос вашего собственного модуля для использования N-API.
  • Перенос модуля, от которого зависит ваше приложение, и его апстрим.
  • Отправка PR для помощи в заполнении документации для node-addon-api. Несмотря на то, что у нас есть полная документация для основных API-интерфейсов C, у нас все еще есть работа, чтобы завершить документацию для node-addon-api.
  • Добавление функций из N-API в node-addon-api. По мере добавления функций в N-API нам потребуются соответствующие оболочки для node-addon-api.
  • Дополнительное тестирование для node-addon-api. Нам все еще нужно завершить полный набор тестов для node-addon-api.

Кроме того, вы всегда можете посетить еженедельное собрание команды N-API по четвергам в 1:30 EST.

Если вы участвуете в предстоящей конференции Node Summit, то есть дополнительные ресурсы, которые вы можете использовать, чтобы узнать больше о N-API. Есть два разговора о N-API, которые дадут вам обзор N-API, а также глубокое техническое погружение. Кроме того, в Day Zero будет проведен семинар по N-API, чтобы получить практический опыт написания или переноса собственных модулей на N-API. Это будет отличный способ начать разработку N-API.

Мы надеемся увидеть Вас там!