使用V8将JavaScript编译为本地代码

26

使用Google的V8引擎,将JavaScript编译成本地代码并保存为二进制文件,在任何机器上都可以通过我的软件环境随时执行,这真的可能吗?


3
如何将V8编译的JavaScript转换为可执行文件? - Doctor Kicks
4个回答

27

您可以使用V8快照功能来预编译代码。这仍然意味着您必须运行完整版本的V8才能加载快照(即,您不会得到独立的本机代码,它需要在V8 VM中运行),因此您所节省的只是编译时间。 另外,快照代码的质量不一定像JIT代码那样好,因为JIT代码可以使用例如SSE2 / SSE3之类的指令集(如果可用),而快照不能假设这些。


4
据我所知,V8纯粹是一个即时编译器(just-in-time),没有预先编译选项。正如我所链接的文章所讨论的那样,JIT可以实现更好、更灵活的优化。

但是JIT必须及时完成任务。因此,它们必须避免耗时和资源(如内存)昂贵的操作。 - Christian

4

相反,可以使用.NET JavaScript/JScript编译器创建.NET exe,然后使用Mono ahead-of-time compiler将.NET exe转换为本地exe。


1
对于那些还没有尝试过Mono AOT并像我一样非常兴奋的人,需要注意的是:它不支持Windows。但是可以在任何Linux上运行,所以谁知道,也许这会改变。 - Camilo Martin

1
你可能最接近实现目标的方法是创建一个自执行的Javascript字节码包装器。
可以使用 pkg 项目来实现此功能。
它可以从Javascript中创建一个自包含的二进制可执行文件,包括模块依赖项和资产文件,并生成一个自包含的可执行文件。
安装和使用都很容易:
$ npm install -g pkg
$ pkg index.js -o my-program
$ ./my-program

我理解这个二进制文件包含了nodejs的字节码。同时,它似乎可以进行交叉编译。

注意:我也尝试过nccnexe,但我觉得它们不如这个工具有用。ncc只是创建了一个自包含的Javascript文件,而nexe在我尝试使用时遇到了一个Python错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接