使用 V8 将 JavaScript 编译为本机代码
使用 Google 的 V8 引擎,真的有可能将 JavaScript 编译为本机代码,将其保存为二进制文件,并在任何机器上通过我的软件环境随时执行它吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
使用 Google 的 V8 引擎,真的有可能将 JavaScript 编译为本机代码,将其保存为二进制文件,并在任何机器上通过我的软件环境随时执行它吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
您可以使用V8快照功能来预编译代码。这仍然意味着您必须运行完整版本的 V8 才能加载快照(即,您没有获得独立的本机代码,它需要在 V8 VM 内运行),因此您节省的只是编译时间。
此外,快照代码的质量不一定与 JIT 代码一样好,因为 JIT 代码可以使用例如 SSE2/SSE3(如果可用),而快照无法假设。
You can use the V8 snapshot functionality to precompile the code. This still means that you have to have a full version of V8 running to load the snapshot (i.e., you don't get stand-alone native code, it needs to run inside the V8 VM), so all you save is the compilation time.
Also, the quality of snapshot code isn't necessarily as good as JIT'ed code because JIT code can use, e.g., SSE2/SSE3 if it's available, which snapshots can't assume.
据我所知,V8纯粹是一个 just-in-time 编译器,并且没有提前选项。
正如我链接的文章中所讨论的,JIT 可以实现更好、更灵活的优化。
As far as I know, V8 is purely a just-in-time compiler, and does not have an ahead-of-time option.
As discussed at the articles I linked, JITs allow better, more flexible optimizations.
相反,可以使用 .NET JavaScript/JScript 编译器创建 .NET exe,然后使用 Mono 提前编译器。
Instead, it might be possible to use a .NET JavaScript/JScript compiler to create a .NET exe, then convert the .NET exe to a native .exe using the Mono ahead-of-time compiler.
最接近实现目标的方法是创建一个自动执行的 Javascript 字节码包装器。
执行此操作的项目是
pkg
它以某种方式创建一个独立的二进制文件Javascript 的可执行文件,包括模块依赖项和资产文件,并生成一个独立的可执行文件。
安装和使用很简单:
我的理解是这个二进制文件包含nodejs字节码。看来你还可以交叉编译。
注意:我尝试过
ncc
和nexe
也有,但我还没有发现它们那么有用。ncc
只是创建一个独立的 Javascript 文件,而nexe
在我尝试使用它时遇到了 Python 错误。The closest you might get to acheiving your goal is to create a self-executing Javascript bytecode wrapper.
A project that does this is
pkg
It somehow creates a self-contained binary executable from Javascript, including module dependencies and asset files and produces a self-contained executable.
Installation and use is easy:
My understanding is that this binary contains nodejs bytecode. It also appears that you can cross-compile.
Note: I've tried
ncc
andnexe
also, but I haven't found them to be as useful.ncc
just creates a self-contained Javascript file andnexe
encountered a Python error when I tried to use it.