为什么不以浏览器特定的字节码发送JavaScript文件呢

Why not sending JavaScript files in browser-specific bytecode?

本文关键字:JavaScript 文件 字节 浏览器 为什么不      更新时间:2024-02-20

JavaScript没有通用的字节码,但大多数JavaScript引擎都有自己的字节码。由于JavaScript文件是以源代码字符串的形式传播的,因此它们必须在执行之前将源代码字符串解析/编译为字节码。

然而,由于我们可以在HTTP请求中指定用户代理类型(例如浏览器类型和版本),难道我们不能让服务器为每个浏览器保留字节码并做出相应的响应以节省客户端的一些时间吗?

是什么阻止我们采取这种方法?我认为浏览器不会有任何问题,即使一些JavaScript文件以字节码形式提供,而另一些则以源字符串形式提供。类似地,我们在Python中有.pyc文件,它可以很好地与.py文件一起运行。

[更新]我能想到的潜在好处如下。

  1. 您可以节省客户端的解析时间。解析速度很快,但对于低端设备来说,这样做可能是值得的
  2. 你可以在字节码中添加一些提示。例如,JavaScriptCore(WebKit的JavaScript引擎,简称JSC)用运行时收集的信息(如类型)修补字节码。JSC的字节码是以这样一种方式设计的,即它有用于这些信息的插槽

在可维护性方面,如果客户端的浏览器不受支持,并且没有那么多不同的JavaScript引擎,服务器总是可以发送原始源代码字符串。支持四种最流行的浏览器(Chrome、Firefox、IE和Safari)对我来说似乎是可行的。此外,我没有看到字节码指令集频繁更改。

  • 所有引擎都需要公开其字节码格式
  • 服务器需要保存很多不同的字节码文件,甚至需要动态编译它们
  • 浏览器检测充满危险(用户代理撒谎,代理缓存)
  • 字节码规则可能会在浏览器的次要版本之间发生更改
  • 性能提升可能不会那么显著(尤其是与网络传输时间相比)