javascript的编译器与Web浏览器不同

nad*_*der 5 javascript browser

所以我要问每个网络浏览器都有自己的编译器示例IE从网站编译Javascript并生成字节码的序列A.

另一方面,谷歌浏览器从同一网站编译相同的Javascript并生成序列B.

我想知道这一点,因为如果是这样的话,在Javascript上运行编译器并将生成的字节代码上传到网站而不是Javascript本身是有益的.并根据每个浏览器发送不同的字节码.

还是有其他一些限制.

Dan*_*ger 5

正如其他人所指出的那样,有不同的ECMAScript引擎,其中一些使用JIT(即时)编译器,而另一些则使用运行时解释器,前者是目前大多数浏览器的首选选项,因为它提供了一些性能优势.后一种选择.

你可以看到另一个问题:https://softwareengineering.stackexchange.com/questions/138521/is-javascript-interpreted-by-design

例如,V8是Google Chrome中使用的JavaScript引擎node.js,也可以嵌入到C++应用程序中.

关于将编译或预编译代码发送到客户端而不是原始JS的想法,有一些项目正在处理类似的事情:

Asm.js由一个严格的JavaScript子集组成,其中使用手动内存管理(如C)的静态类型语言编写的代码由源到源编译器(如Emscripten(基于LLVM))进行转换.通过将语言功能限制为适合于提前优化和其他性能改进的功能,可以提高性能.

关于Asm.js的重要事实是,现有的JavaScript引擎在其代码风格方面确实运行良好,因此您可以立即开始使用它!但它产生的代码仍然我们所知道的JS 的一部分,但是以某种方式编写,可以帮助JS引擎更快地运行它:

Asm.js编译和执行管道

当然,对于你可以用它做什么也有很多限制,因为它主要面向只使用数字.见http://ejohn.org/blog/asmjs-javascript-compile-target/

对Asm.js的真正支持仍然是一个限制,所以你不能使用类似的东西"use asm",虽然你可以在今天的浏览器上运行Asm.js代码并获得一些性能改进,但它不会像在浏览器中那样好这可以优化Asm.js代码.但是,我们可能会开始在(希望接近)未来的那些和其他一些改进.请参阅https://blog.mozilla.org/research/2015/02/23/the-emterpreter-run-code-before-it-can-be-parsed/

同时,为了更通用的JS,需要使用的不仅仅是数字,您可以使用Google Closure Compiler.我建议您首先查看常见问题解答,然后您可以在在线工具中开始使用它 .