节点本机加载项,取决于V8

时间:2019-03-20 19:32:25

标签: node.js npm electron v8

我正处于应用程序的早期设计阶段,并试图对期望和要求进行推理,以确保我不会花大量时间呆在死胡同上。我从未使用过V8或Node本机加载项,所以请多多包涵。

假设我正在构建一个Electron应用程序。出于性能原因,某些功能将以本机代码编写在独立的库中,然后从本机Node附加组件中调用这些功能。本机库需要执行JavaScript。所以:

Electron App->本机加载项->本机库-> V8

首先,这可行吗?例如,由于在Electron V8上下文中执行V8上下文而导致构造/运行V8上下文失败吗?我在想僵局,中止等等。

1 个答案:

答案 0 :(得分:0)

我已经提出了从评论到主要问题的行动计划。不幸的是,这使得很难将任何特定用户或评论归功于该答案。具体来说:

  • 重组数据流。允许本机附加组件使用其V8副本执行任何必要的JavaScript,而不是将其作为对本机库的依赖项引入。 (comment
  • 支持在另一个内部输入单独的V8隔离。 (comment)(docs

之所以设想本机库组件,是因为要支持的文档类型很大(文件大小),并且需要JavaScript处理和昂贵的渲染。最初,我曾以为这是一个用于支持文档类型的大型单片库,但实际上它可以(而且应该应该)分解。

  • 解析二进制文件。由于V8的速度,这可能可以在我的Node.js应用本身中完成,并且可能比跨语言障碍对数据进行编组要快。如果没有,我可以考虑使用N-API本机加载项来解析文档并返回一个代表已解析数据的JS对象。 (comment
  • 执行文档级JavaScript。通过输入单独的V8隔离,这应该在本机加载项中可行。 (请参见上文。)
  • 将文档渲染到画布/位图。这是一个未知数,因为它由绘制性能(由复杂路径等组成)决定。我可能会首先尝试直接在Node.js应用中直接执行此操作,如果性能不够,那么我将考虑使用N -API本机附加组件,例如Skia作为呈现数据的依赖项。