gpt4 book ai didi

javascript - Firefox 源代码中的主事件循环在哪里?

转载 作者:行者123 更新时间:2023-11-30 11:37:34 24 4
gpt4 key购买 nike

我正在查看 Firefox source code并尝试确定执行 Javascript 中所有事件处理程序的主循环的来源。

我看过this overview的目录结构,但我仍然找不到事件循环。

我应该查看哪些源代码行来找到主事件循环?

更新:我正在 Linux x86_64 上构建和运行 Firefox。

最佳答案

免责声明:我在 2014 年至 2015 年期间在 Microsoft 从事 Chakra JavaScript 引擎方面的工作。

Firefox 的 JavaScript 引擎称为 SpiderMonkey,可以被视为一个单独的项目 - 也可以被其他应用程序使用 (https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/How_to_embed_the_JavaScript_engine)。

现代 JavaScript 引擎是基于 JIT 的:它们不会在一个巨大的循环中解释代码 - 而是将 JavaScript 函数编译成本地代码 - 实际上是它们自己的程序,并且这个动态生成的程序将有自己的事件流 - 但它不一定是“循环”——也不一定是“一个”单独的程序——因为它取决于 JavaScript 托管环境:一个网页可以同时运行多个 JavaScript“ worker ”(充当不同的线程——这超出了 JavaScript 当前的异步模型)。另请注意,“Firefox”只是 Gecko 的包装器 - Firefox 在不同的运行时工作进程中并排运行多个 Gecko 实例。

也就是说,几乎所有 JIT JavaScript 引擎仍然保留它们的解释器——Chakra 就是这样——因为 JIT 过程需要一段时间,所以它们最初将以解释模式运行脚本以获得即时结果——并且引擎的解释器部分可能我们将成为一个完全独立的 JavaScript 引擎实现(忽略解析器和标准库组件)。

自从我上次使用 Chakra 源代码 (it's open-source now) 以来已经将近 18 个月了,但根据我的内存(并且没有违反我的保密协议(protocol)),Chakra 中唯一真正的主要“循环”是解释器循环(一个巨大的switch statement for the current opcode enum value) - 事件处理程序是通过异步 IO 处理的 - 所以实际上由 Chakra 主机提供异步 IO 功能 - 所以简而言之,没有“事件循环”。如果 Firefox 的 SpiderMonkey 或 Chrome 的 V8 不能在相同的基础上工作,我会感到惊讶。

关于javascript - Firefox 源代码中的主事件循环在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43814483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com