🌐 Special Topics
本部分涵盖了高级 Node-API 模式,当你的本地插件超出简单的同步函数调用时,你将会遇到这些模式。
🌐 This section covers advanced Node-API patterns that you will encounter once your native addon grows beyond a simple synchronous function call.
🌐 Topics covered
- 对象和函数引用 - 使用
ObjectReference和FunctionReference在跨调用边界时保持 JavaScript 对象的存活,以防垃圾回收器过早回收它们 - AsyncWorker - 使用
node-addon-api的AsyncWorker类在后台线程上运行长时间的 C/C++ 操作,保持 Node 的事件循环不被阻塞 - 线程安全函数 - 从不是主 Node.js 线程的本地线程回调到 JavaScript,使用线程安全函数 API
- 上下文感知 - 编写能够在存在工作线程时正确加载和卸载的插件,包括实例数据和清理钩子
🌐 When do these topics apply?
| 主题 | 何时需要 |
|---|---|
| 对象/函数引用 | 将 JS 回调或对象存储在一个 C++ 数据成员中,该成员的生命周期超过当前调用 |
| AsyncWorker | 将 CPU 密集型或阻塞 I/O 的工作移出主线程 |
| 线程安全函数 | 从你自己管理的本地线程调用 JS 回调 |
| 上下文感知 | 当你的插件在 Worker 线程环境中使用,或被多次加载/卸载时 |