25

使用 Google 的 V8 引擎,真的有可能将 JavaScript 编译为原生代码,将其保存为二进制文件,并在任何时候通过我的软件环境在任何机器上执行它吗?

4

4 回答 4

27

您可以使用 V8 快照功能来预编译代码。这仍然意味着您必须运行完整版本的 V8 才能加载快照(即,您没有获得独立的本机代码,它需要在 V8 虚拟机中运行),因此您节省的只是编译时间. 此外,快照代码的质量不一定与 JIT 代码一样好,因为 JIT 代码可以使用,例如,如果 SSE2/SSE3 可用,快照不能假设。

于 2010-06-22T12:40:10.340 回答
4

据我所知,V8 纯粹是一个即时编译器,没有提前选项。

正如我在链接的文章中所讨论的,JIT 允许更好、更灵活的优化。

于 2010-06-02T23:02:19.367 回答
4

相反,可以使用 .NET JavaScript/JScript 编译器创建 .NET exe,然后使用Mono 提前编译器将 .NET exe 转换为本机 .exe 。

于 2010-06-03T00:00:44.050 回答
0

最接近实现目标的方法是创建一个自执行的 Javascript 字节码包装器。

这样做的一个项目是pkg

它以某种方式从 Javascript 创建一个独立的二进制可执行文件,包括模块依赖项和资产文件,并生成一个独立的可执行文件。

安装和使用简单:

$ npm install -g pkg
$ pkg index.js -o my-program
$ ./my-program

我的理解是这个二进制文件包含 nodejs 字节码。看来您也可以交叉编译。

注意:我也试过了nccnexe但我还没有发现它们有用。ncc只是创建了一个独立的 Javascript 文件,nexe当我尝试使用它时遇到了 Python 错误。

于 2021-11-13T13:39:01.890 回答