Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 您可以使用V8编译JS代码并直接将其提供给Chrome吗?_Javascript_Google Chrome_Compilation_V8 - Fatal编程技术网

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

Javascript 您可以使用V8编译JS代码并直接将其提供给Chrome吗?,javascript,google-chrome,compilation,v8,Javascript,Google Chrome,Compilation,V8,我正在寻找一种方法来保护一些javascript代码不被读取/修改。我知道很多人认为这是不可能的,但仍然…… 据我所见,Chrome的V8引擎在看到JS代码时会进行大量优化,可能会编译它(?)然后运行它 P> >我想知道,是否有可能使用V8的C++ API编译JS代码到机器代码/色码,然后直接输入到Chrome(我不关心其他浏览器)? 据推测,它不仅速度更快,而且还具有非人类可读性,比如ASM 这可能吗 WebAssembly正在做这件事,所以我不明白为什么我们不能用JS代码来做。 还有ejs

我正在寻找一种方法来保护一些javascript代码不被读取/修改。我知道很多人认为这是不可能的,但仍然…… 据我所见,Chrome的V8引擎在看到JS代码时会进行大量优化,可能会编译它(?)然后运行它

<> P> >我想知道,是否有可能使用V8的C++ API编译JS代码到机器代码/色码,然后直接输入到Chrome(我不关心其他浏览器)? 据推测,它不仅速度更快,而且还具有非人类可读性,比如ASM

这可能吗

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

WebAssembly没有这样做。不,这也不可能。网络应该是浏览器和硬件独立的


此外,像JS这样的语言在离线编译时不会更快——它的速度非常快,因为它是动态编译和优化的,并考虑了动态配置文件信息。

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

理论上,您可以将JavaScript编译成WebAssembly——理论上,任何两种图灵完整编程语言都可以相互编译。据我所知,现在还没有这样的编译器。这样做的一个重要原因是最终结果的表现将是可怕的(详见与安德烈亚斯·罗斯伯格的讨论);因此,考虑到浏览器可以直接执行JavaScript,人们几乎没有理由开发这样的东西。(这也是一项艰巨的任务。)


至于你的目标:让JavaScript代码不可读的最好办法就是缩小它。事实上,这实际上和生成汇编的想法一样好,因为存在着反汇编程序,可以将汇编重新转换为类似高级语言代码的小型化代码;他们不能重建变量名或注释(因为编译过程中丢失了信息),但它们可以重构程序逻辑。

< P>我最后做的是把一些逻辑从JavaScript移到C++中,并编译成NodeJS原生模块(电子应用程序可能的)。
它工作得很好,速度很快,来源是。。。尽可能保护它,但您可能需要担心跨平台问题,编译/链接可能会有点痛苦,但除此之外,它非常棒。

“我知道这被认为是不可能的,但仍然…”P@Li357我想说的是“我知道很多人认为这是不可能的,但它不是”:显然有一种方法,我只是不知道是否有人想出了一种方法来为JS做同样的事情。嗯,阅读和修改WebAssembly代码也不难。encloseJS pkg生成的代码也可以读取和修改。@phihag可以,但这与读取和修改.exe文件相同。这对我来说已经足够好了。今天我编译了一堆webassembly的东西,它非常非人类可读:)我不知道你所说的“webassembly不做那件事”是什么意思-确切地说:)但它不是机器代码。VM仍然需要编译它到你的浏览器中的机器代码。这就是它的样子:如果C++代码可以编译成这个,那么我就要理解为什么JS不能。在我看来,似乎还没有人为这个任务编写工具。并不是说这是不可能的。首先将JS编译成Wasm,然后再从Wasm编译成本机代码将丢失所有动态优化。结果很容易会慢10-100倍。此外,每一个脚本都必须附带半个JavaScript虚拟机,这会将其代码量增加到兆字节。JavaScript根本不是为静态编译设计的。这里有两个修正:(1)优化编译的JS代码与C++一样快,或者称为“本地”。这不是“玩笑”。(2) Andreas Rossberg是一位“拥有深厚V8经验的开发人员”,他知道自己在说什么,这不是“胡说八道”。请尊重那些花时间帮助你的人。谢谢。不过我还是觉得我错过了一些东西。Chrome可以运行“本机代码”,而不仅仅是优化的javascript,这对吗?如果是这样的话,这个“本机代码”是否可以执行指令来操作DOM,或者它是否仅限于数学运算?事实上,我得到了一个比缩减代码要好得多的解决方案。由于这是一个NoDEJS应用程序,我在C++中改写了部分内容,所以关键的东西不再是纯文本。我只是想知道这是不是唯一的选择。当然可以反汇编,但这已经足够好了。Chrome可以执行JavaScript和WebAssembly。我不知道你在说什么“本机代码”如果你说的是node.js应用程序,为什么你要问Chrome?这个例子是一个electron应用程序,所以它同时使用nodejs和Chrome。它也被广泛认为是不可能保护的,但是如果你在节点C++模块中移动部分逻辑,那是完全可能的。所以我想知道是否可以用Chrome做类似的事情。但是我没有问对问题:)所以如果Chrome中没有“本机代码”,它只能运行Webassembly和JS,而Webassembly仅限于数学运算,那么。。。是的:)谢谢你的帮助!