Этот раздел рассматривает продвинутые паттерны Node-API, с которыми вы столкнётесь, как только ваш нативный аддон вырастет за пределы простого синхронного вызова функции.
- Ссылки на объекты и функции — использование
ObjectReferenceиFunctionReference, чтобы поддерживать JavaScript-объекты «в живых» через границы вызовов, чтобы сборщик мусора не забрал их преждевременно - AsyncWorker — выполнение долгих C/C++-операций в фоновом потоке с помощью класса
AsyncWorkerизnode-addon-api, не блокируя event loop Node - Thread-safe функции — вызов JavaScript из нативных потоков, не являющихся главным потоком Node.js, с помощью API thread-safe функций
- Контекстная осведомлённость (context awareness) — написание аддонов, которые корректно загружаются и выгружаются в присутствии Worker Threads, включая instance data и cleanup-хуки
| Тема | Когда она вам нужна |
|---|---|
| Ссылки на объекты/функции | Хранение JS-колбэка или объекта в C++-члене данных, переживающем текущий вызов |
| AsyncWorker | Вынос CPU-bound или блокирующей I/O-работы с главного потока |
| Thread-safe функции | Вызов JS-колбэков из нативных потоков, которыми вы управляете сами |
| Контекстная осведомлённость | Ваш аддон используется в окружениях Worker Thread или загружается/выгружается несколько раз |