【问题标题】:How operating system links events with dom object?操作系统如何将事件与 dom 对象联系起来?
【发布时间】:2019-05-30 20:29:46
【问题描述】:

当我们点击鼠标时,它会向操作系统发送信号,通过这种方式操作系统可以识别哪些资源受到影响并运行事件处理程序。

这个鼠标点击是如何映射到我们在 dom 对象上的点击事件的呢? OS 如何将我们的事件处理程序附加到 dom 树对象并在事件循环中执行?

/已编辑/

我针对特定的硬件资源问了这个问题。内部资源是否相同,例如:当我们说 nodejs 服务器侦听请求事件并执行事件处理程序时。这里 Nodejs 在操作系统上运行,http 服务器由 nodejs 设置( ip + port)..so 在这种情况下哪个资源正在侦听传入请求?

【问题讨论】:

  • 这不是问题。我想了解事件处理的概念。
  • 当我们点击鼠标时,它会向操作系统发送信号 不完全是。大部分事情由 JS runtime 和浏览器 webAPIs 处理
  • @FZs - 没有代码问题就很清楚了(事实上,我看不出代码如何使它更清楚)。

标签: javascript event-handling operating-system event-loop


【解决方案1】:

操作系统没有。该事件经历了一系列层次。每一层都比前一层更了解该特定层的细节:

  • 鼠标处理程序(在操作系统中)将单击屏幕上的 X、Y 中继到窗口管理器(通常也是操作系统的一部分,但可在各种 *nix 变体上交换)
  • 窗口管理器将点击中继到发生点击的窗口的应用程序
  • 窗口中的应用程序(在本例中为 Web 浏览器)将点击中继到您的事件处理程序

由于浏览器知道 DOM,并且知道单击了哪个 DOM 元素,它可以检查该元素上的事件处理程序并使用正确的元素调用这些处理程序。

每一层都只有特定于该层的细节。鼠标处理程序知道它正在处理哪种鼠标,但窗口管理器和浏览器(可能)不知道。 (他们可以询问操作系统是否想知道,但通常不必这样做。)鼠标处理程序不知道窗口在哪里(甚至不知道窗口在哪里 em> windows),但窗口管理器可以。窗口管理器不知道 DOM 元素(以及浏览器的各种其他部分,如书签栏或类似内容),但浏览器知道。

(以上只是一个非常粗略的草图,涉及的层次更多,但它给了你想法。)

【讨论】:

  • 谢谢,这有助于可视化流程。我针对特定硬件资源提出了这个问题。内部资源是否相同,例如:当我们说 nodejs 服务器侦听请求事件并执行事件处理程序时。这里 Nodejs 在操作系统上运行,http 服务器由 nodejs(ip + port) 设置。所以在这种情况下,哪个资源监听传入请求?
  • @SurajPrakashJoshi - 操作系统的网络堆栈可以。操作系统提供系统调用以与网络交互。 Node.js 使用这些系统调用来实现其 API。您的代码使用 Node.js 的 API 来实现您的服务器。再分层。 :-)
  • 现代计算机上的几乎所有东西都是一样的:视频显示、音频输入/输出等。有层,每个层都知道足以为其他层完成工作。
猜你喜欢
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多