javascript - 为什么 JavaScript 会被编译成机器码?

标签 javascript compilation jit machine-code

我最近开始了一些 Web 开发,使用 ASP.NET 和一些 Javascript,有些事情让我很困惑。

我总是读到 JavaScript 过去常常被解释,直到 JIT 慢慢地把它编译成机器代码(这使得浏览器更快)。

这对我来说毫无意义。如果传统的 JavaScript 应用程序不以机器/CPU 为目标,JavaScript 如何编译为 native 机器代码?

我了解是否使用 NodeJS 运行时将 electron.js 应用程序编译为机器代码。我明白了。因为它 native 编译为机器代码,据我了解,不在浏览器中运行 .

如果传统的 JavaScript 应用程序在浏览器中运行,为什么必须将其编译为机器码?浏览器负责运行代码,而不是 CPU。 CPU 运行浏览器本身。我实际上根本看不到 native 操作系统如何影响浏览器中发生的任何事情,反之亦然。似乎也是一个安全问题。

抱歉,如果这是一个愚蠢的问题,但我找不到任何可以说“Javascript 使用 JIT”的资源

谢谢!

劳伦

最佳答案

归根结底,CPU 必须运行代码。

JIT 将其编译为机器代码是加快速度的一种方法。

How can JavaScript compile to native machine code, if traditional JavaScript apps don't target the machine/CPU to begin with?



执行此操作的不是“Javascript”,而是浏览器(或者更确切地说,是浏览器内的 Javascript 执行引擎),并且由于它是“JIT”,它确切地知道要定位哪个 CPU(这不是在通用中完成的)方式,这是针对浏览器当前运行的特定 CPU 完成的)。

所以,是的,存在一些不匹配,因为 Javascript 不会使用 CPU 可以直接使用的低级原始类型,这就是为什么有很多间接和推测类型推断猜测工作的原因。生成的机器代码与您从手动编码的汇编中获得的代码有很大不同,但它仍然可以是净正面的。为了解决这个问题,开发了 WASM,它更接近“正常”机器代码。

其他中间的、非 CPU 特定的格式,如 JVM 字节码或 CLR 字节码或 LLVM 位码也处于类似情况(也可以编译为它们本身不直接定位的机器代码)——但它们已经“降低”了语言源代码接近机器代码。

Seems like a security issue as well.



是的,可以。浏览器在这里所​​做的事情必须小心,并且操作系统应该尽可能地对浏览器进行沙箱处理。

关于javascript - 为什么 JavaScript 会被编译成机器码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62239611/

相关文章:

java - "Loop unswitching"优化不起作用

javascript - 在js文件中包含外部js文件

javascript - 确定向下和向上滚动

c - 如何使用 Visual Studio 2010 进行 C 开发?

c - 从内存中执行代码

c# - 在 MonoTouch 中的编译时检测 JIT

javascript - Jquery 查找元素返回未定义

Javascript - 通过知道索引查找数组中项目的值

android - Linux 源代码编译过程中的权限问题

c - 为什么不能在 C 的 2 个文件中定义两次变量