Firefox源代码中的主要事件循环在哪里



我正在浏览Firefox源代码,并尝试确定主循环的源,该源在JavaScript中执行所有事件处理程序。

我已经查看了目录结构的概述,但我仍然找不到事件循环。

我应该看哪些源线以找到主要事件循环?

更新:我正在Linux X86_64上建造和运行Firefox。

免责声明:我在2014年至2015年之间在Microsoft时在Chakra JavaScript引擎上工作。

Firefox的JavaScript引擎称为SpidermonKey,可以被视为一个单独的项目 - 其他应用程序也可以使用(https://developer.mozilla.mozilla.org/en-us/docs/docs/mozilla/mozilla/project/projects/projects/projects/spidermnekey/how_to_embed_the_javascript_engine(。

现代JavaScript引擎是基于JIT的:它们不会在巨型循环中解释代码 - 相反,它们将JavaScript函数编译到本机代码中 - 有效地将其编译为其自己的程序,并且该动态生成的程序将具有自己的事件流 - 但是它不一定是"循环" - 也不一定是"一个"单独的程序 - 因为这取决于JavaScript托管环境:网页可以同时运行多个JavaScript"工人"(充当不同的线程 - 此超出了JavaScript当前的异步模型(。另请注意," Firefox"只是壁虎周围的包装纸 - Firefox并排运行多个壁虎实例,在不同的运行时工作过程中。

也就是说,几乎所有的JIT JavaScript引擎仍然保留其口译员 - 脉轮都可以 - 因为JIT过程需要一段时间,因此他们最初将以解释模式运行脚本以立即取得结果 - 并且引擎的解释器部分可能是好吧,要成为一个完全独立的JavaScript引擎实现(忽略解析器和标准库组件(。

自上次使用脉轮源代码(现在是开源(以来已经过去了近18个月,但是据我所记得的(并且没有打破我的NDA(,脉轮中唯一真正的主要"循环"是口译员循环(当前OPCODE enum值的巨型switch语句( - 事件处理程序是通过异步IO处理的 - 因此,实际上是由脉轮主机提供异步IO功能 - 因此,简而言之,没有"事件循环"。如果Firefox的Spidermonkey或Chrome的V8不起作用,我会感到惊讶。

最新更新