我正在查看javascript事件监听器的性能并尝试更好地理解它们。我的问题是汇编语言中的事件监听器是什么样的,它编译的是什么?同样,当事件在javascript中触发时,执行的汇编代码指令集是什么。不一定要寻找精确的x_86代码,但概述会很好,我似乎无法在网上找到任何代码。
答案 0 :(得分:4)
由于多种原因,很难看出你的问题有多大意义。让我解释一下这是如何工作的,然后你可能会明白为什么没有直接回答你的问题。
首先,javascript是一种解释性语言。它被解析为它自己的字节码,然后字节码由解释器执行。在某种程度上,你可以说它拥有自己的指令集而不是使用CPU指令集。有各种级别的字节码优化可以使事情尽可能快地完成,具体如何完成也会因实现而异。但是,足以说javascript没有完全编译到所有x86汇编指令中,如C或C ++。因此,没有确切的x86指令集唯一对应于给定的一组javascript。
其次,此处涉及的系统中有多个层。在最低级别,有操作系统,它的驱动程序和它的事件子系统创建这些事件,如mouseDown或keyDown。该代码可能用C / C ++编写,并已简化为汇编语言。一级,是位于操作系统之上的浏览器事件系统。这是与OS系统的接口,使网页中的控件实际工作并捕获实际事件。然后,更进一步的是javascript接口,它允许javascript脚本注册一个事件发生时将被调用的事件处理程序。
我们可以从概念上解释它是如何工作的,但不是在x86汇编指令级别。从概念上讲:
elem.addEventListener("click", fn);
addEventListener
上的elem
方法。仅供参考,如果您想查看用于处理事件处理的浏览器的C / C ++代码,您可以随时查看webkit或Firefox源代码,因为它们都是开源的。但是,这只是机制的一部分,因为系统的其他部分以及浏览器和JS解释器都参与其中。
可以在此处找到许多webkit事件处理代码:https://github.com/WebKit/webkit/tree/e7207313fed4b7a2140c39f65d45e0f441731735/Source/WebCore/dom