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

为什么不以特定于浏览器的字节码发送JavaScript文件?,javascript,webkit,bytecode,javascriptcore,Javascript,Webkit,Bytecode,Javascriptcore,JavaScript没有通用的字节码,但大多数JavaScript引擎都有自己的字节码。由于JavaScript文件以源代码字符串的形式传输,它们必须在执行之前将源代码字符串解析/编译为字节码 但是,由于我们可以在HTTP请求中指定用户代理类型(例如浏览器类型和版本),我们不能让服务器为每个浏览器保留字节码并相应地响应以节省客户端的时间吗 是什么阻止我们采取这种方法?我认为浏览器不会有任何问题,即使一些JavaScript文件是以字节码给出的,而另一些是以源字符串给出的。类似地,我们在Pytho

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

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

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

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

  • 您可以在客户端节省解析时间。解析速度很快,但对于低端设备来说,这样做可能是值得的
  • 您可以在字节码中添加一些提示。例如,JavaScriptCore(WebKit的JavaScript引擎,简称JSC)使用运行时收集的信息(如类型)修补字节码。JSC的字节码的设计方式是,它有用于这些信息的插槽
  • 就可维护性而言,如果客户端浏览器不受支持,并且没有那么多不同的JavaScript引擎,服务器始终可以发送原始源代码字符串。对我来说,支持四种最流行的浏览器(Chrome、Firefox、IE和Safari)似乎是可行的。此外,我看不到字节码指令集经常变化。

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

    如果浏览器正在推送更新,而内部字节码格式发生变化,该怎么办?您认为这解决了什么问题?浏览器JavaScript运行时的架构师必须将其虚拟机固定在特定的指令集上,这将是一件可怕的事。就目前而言,解析JavaScript的速度惊人,而且完全值得(在我看来)。同时想想,对于一个大型网站来说,处理所有主要浏览器的所有活动版本(包括移动设备浏览器)会是一场怎样的噩梦。@jray319,因为它们是特定于版本和实现的,这意味着它们只能从编译它们的同一个解释器中正确运行。此外,它还破坏了一些自省工具。Python不是Java,字节码是Java的平台。在Python中,源代码是平台,字节码只是一个未记录的实现细节。