【问题标题】:Javascript internals: how events are implemented?Javascript 内部结构:事件是如何实现的?
【发布时间】:2011-12-19 19:32:23
【问题描述】:
我的问题与 JS 引擎如何实现异步事件的模式有关,当我们在 dom 上执行诸如绑定事件处理程序之类的操作时,比如说点击事件?
他们是否有一个单独的线程来监听所有的点击事件?当事件确实发生时,他们是否会引用绑定列表并将事件冒泡?
与 Ajax 类似,异步网络调用,浏览器跨越一个新线程,开始监听来自服务器的数据,当收到响应时,它会调用成功处理程序?
【问题讨论】:
标签:
event-handling
dom-events
v8
spidermonkey
javascript-engine
【解决方案1】:
阅读 this post 关于 javascript 事件队列的信息,看看它是否回答了您的大部分问题。将有一个本地 OS 线程处理与实际 OS 事件(鼠标事件、键盘事件、计时器事件、网络 I/O 事件等)的接口,然后将这些事件馈送到 JS 队列中,JS 引擎可以在其中进一步将它们发送到 Javascript 代码。操作系统级别有多少单独的线程是特定于实现的,并且可能会随实现而变化。