Lau*_*835 4 javascript jit compilation machine-code
我最近开始使用 ASP.NET 和一些 Javascript 进行 Web 开发,但有些事情让我很困惑。
我总是读到 JavaScript 过去是被解释的,直到 JIT 慢慢地把它编译成机器代码(这使得浏览器更快)。
这对我来说毫无意义。如果传统 JavaScript 应用程序一开始就不针对机器/CPU,那么 JavaScript 如何编译为本机机器代码?
我了解 Electron.js 应用程序是否使用 NodeJS 运行时编译为机器代码。我明白了。因为它本身编译为机器代码,并且据我了解,它不在浏览器中运行。
如果传统的 JavaScript 应用程序在浏览器中运行,为什么必须将其编译为机器代码?浏览器负责运行代码,而不是CPU。CPU 本身运行浏览器。实际上,我根本不明白本机操作系统如何影响浏览器中发生的任何事情,反之亦然。似乎也是一个安全问题。
抱歉,如果这是一个愚蠢的问题,但我找不到任何超出“Javascript 使用 JIT”的资源
谢谢你!
劳伦
最终,CPU 必须运行代码。
将其即时编译为机器代码是加快速度的一种方法。
如果传统 JavaScript 应用程序一开始就不针对机器/CPU,那么 JavaScript 如何编译为本机机器代码?
执行此操作的不是“Javascript”,而是浏览器(或者更确切地说,浏览器内的 Javascript 执行引擎),并且由于它是“JIT”,因此它确切地知道要针对哪个 CPU(这不是在通用程序中完成的)方式,这是针对浏览器当前运行的特定 CPU 完成的)。
所以,是的,存在一些不匹配,因为 Javascript 不会使用 CPU 可以直接使用的低级原始类型,这就是为什么存在大量间接和推测类型推断猜测工作的原因。生成的机器代码与您从手工编码的汇编中获得的机器代码有很大不同,但它仍然是一个积极的结果。为了解决这个问题,开发了 WASM,它更接近“正常”机器代码。
其他中间的、非 CPU 特定的格式,如 JVM 字节码或 CLR 字节码或 LLVM 位码也处于类似的情况(因为它们也可以编译为它们本身不直接针对的机器代码)——但它们已经从语言源代码接近机器代码。
似乎也是一个安全问题。
是的,可以。浏览器在此处执行的操作必须小心,操作系统应尽可能对浏览器进行沙箱处理。
| 归档时间: |
|
| 查看次数: |
1129 次 |
| 最近记录: |