javascript - JavaScript 的编译器是否因网络浏览器而异

标签 javascript browser

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

另一方面,google chrome 从同一网站编译相同的 Javascript 并生成序列 B 。

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

或者还有其他一些限制。

最佳答案

正如其他人所指出的,有不同的 ECMAScript engines其中一些使用JIT(即时)编译器,而另一些使用运行时解释器,前者是当今大多数浏览器的首选选项,因为它提供了一些与后一种选择相比具有性能优势。

您可以在以下位置查看关于此的另一个问题:https://softwareengineering.stackexchange.com/questions/138521/is-javascript-interpreted-by-design

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

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

Asm.js consists of a strict subset of JavaScript, into which code written in statically-typed languages with manual memory management (such as C) is translated by a source-to-source compiler such as Emscripten (based on LLVM). Performance is improved by limiting language features to those amenable to ahead-of-time optimization and other performance improvements.

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

Asm.js Compilation and Execution Pipeline

当然,对于您可以用它做什么也有很多限制,因为它主要面向只处理数字。参见 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 。我建议您看一下 FAQ首先,然后你可以开始在 online tool 中使用它.

关于javascript - JavaScript 的编译器是否因网络浏览器而异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29991742/

相关文章:

javascript - 测试时将 $stateParams 传递给 $controller 是空对象

javascript - 如何在浏览器中使用 .emit() 和 .on() 方法?

javascript - 在javascript Date对象中获取当前文档的最后修改日期

javascript - 图像在多图像 slider 中显示两次

javascript - onclick方法调用javascript,其中jquery用于显示值

javascript - ionic 可滚动标签

javascript - 从多个页面附加查询字符串

javascript - 有没有办法找出声音何时停止在 Javascript 中播放?

javascript - 水平滚动时如何防止浏览器在历史记录中后退/前进?

java - 如何在 javafx 浏览器中操作链接