【发布时间】:2019-03-21 22:38:57
【问题描述】:
我正处于应用程序的早期设计阶段,并试图对期望和要求进行推理,以确保我不会花费大量时间陷入死胡同。我从未使用过 V8 或节点原生插件,所以请耐心等待。
假设我正在构建一个 Electron 应用程序。出于性能原因,某些功能将在独立库中以本机代码编写,该库将从本机 Node 插件调用。本机库需要执行 JavaScript。所以:
Electron App -> 原生插件 -> 原生库 -> V8
首先,这可行吗?例如,尝试构建/运行 V8 上下文是否会由于其在 Electron V8 上下文中执行而失败?我在考虑死锁、中止等。
【问题讨论】:
-
不管怎样,V8 的速度惊人地快。如果您始终使用 Javascript,您可能不会失去太多性能。甚至用于信号处理。当您构建这个多语言解决方案时,新版本的 V8 的性能可能会超过您的解决方案。这是来自痛苦的经验,因为今天的软件/硬件太慢了,所以做昂贵的高度优化的解决方案。明天可能不会。
-
假设这是一个选项,我似乎找不到任何方法来满足从 npm/electron 运行外部任意 JavaScript 的要求。我将要处理的文件包含嵌入式 JS,我需要能够执行它们。
-
我不确定我是否正确理解了 q - 你是说你想运行一些用本机编写的代码并在 v8 隔离之间传递值,还是想设置另一个 v8 隔离并运行 javascript代码在那里?
-
应用程序将处理包含 JavaScript 的文件,并正确处理在沙盒到该文件的上下文中执行 JS 所需的文件。例如,考虑包含嵌入式 JavaScript 的 PDF 文件。在示例中,本机库将是包含 V8 依赖项的 PDF 库(ala Pdfium)。它将由本机插件加载并从电子执行,电子本身在 V8 中运行。
-
+1 给 O.Jones。您的计划在技术上听起来可行,但相当复杂。请注意,跨语言函数调用比较繁重。拥有两个 V8 副本似乎也很奇怪。也许您可以重构流程,使本机库成为一个“端点”,其函数将控制权返回到其环境以执行任何所需的 JavaScript?