您可以使用 V8 编译 JS 代码并将其直接提供给 Chrome 吗?

Can you compile JS code using V8 and feed that directly to Chrome?

我正在寻找一种方法来保护一些 javascript 代码不受 reading/modifying 的影响。我知道很多人认为这是不可能的,但仍然...

据我所知,Chrome 的 V8 引擎在看到 JS 代码时做了很多优化,可能会编译(?)然后运行它。

所以我想知道是否可以使用 V8 的 C++ api 将 JS 代码编译成 machinecode/chromecode 然后直接将其提供给 Chrome (我不关心关于其他浏览器)? 据说它不仅会更快,而且是非人类可读的,有点像 ASM。

这可能吗?

WebAssembly 正在做这件事,所以我不明白为什么我们不能用 JS 代码来做。 还有 EncloseJS 和 pkg 做着非常相似的事情。

WebAssembly 没有这样做。不,这也不可能。网络应该是浏览器和 hardware-independent.

此外,如果离线编译,像 JS 这样的语言不会更快——它只是接近于快速,因为它是动态编译和优化的,将动态配置文件信息带入帐号。

这里是 V8 开发人员。不,不可能提前编译 JavaScript 并只将编译后的代码发送到浏览器。 V8(和其他类似的虚拟机)包含 编译器,但它们不能用作独立编译器来生成独立二进制文件。

理论上,你可以将JavaScript编译成WebAssembly——理论上任何两种turing-complete编程语言都可以相互编译。据我所知,目前还没有这样的编译器。一个很大的原因是最终结果的表现会很糟糕(有关详细信息,请参阅与 Andreas Rossberg 的讨论);所以考虑到浏览器可以直接执行JavaScript,人们没有什么理由去开发这样的东西。 (这也是一项艰巨的任务。)

至于您的既定目标:使 JavaScript 代码不可读的最佳方法是将其缩小。事实上,这实际上与生成程序集的想法一样好,因为存在将程序集转回 minified-like higher-level 语言代码的反汇编程序;他们无法重建变量名或注释(因为这些信息在编译过程中会丢失),但他们可以重建程序逻辑。

我最终做的是将一些逻辑从 JavaScript 转移到 C++ 中并将其编译到 NodeJS 原生模块中(这对于 Electron 应用程序来说是可能的)。

它工作得很好,速度非常快,源代码是...尽可能受到保护,但您可能需要担心跨平台问题,compiling/linking 可能有点有点痛,但除此之外还不错。