渲染引擎和 JavaScript 引擎如何在浏览器中通信?
How do the Render Engine and JavaScript Engine Communicate in a browser?
我正在寻找这方面的详细答案。
我已经知道的
所以我对调用堆栈和回调有了一些了解,浏览器通过 web APIs 添加功能,通过事件循环添加回调。我还在某处读到有关具有 API.
的 JS 引擎的信息
我想了解的
- Web API 如何暴露给 JS 引擎? (如果这是关于
具有 API 的 JS 引擎,关于 API 如何工作的一些描述
做)
- 渲染引擎的行为如何通过
JavaScript,比如操纵 DOM、CSSOM 等? (如果我明白
正确地,这相当于询问 web APIs 是如何工作的)
谢谢!
从(C++ 等)应用程序开发的角度来看,JavaScript 引擎是可嵌入的库;浏览器就是这样一种嵌入器。任何库都定义了一个可以使用它的 public 接口——它的应用程序编程接口(或简称 API)。对于 JS 引擎的 API 应该是什么样子,没有标准;每个引擎都定义了自己的引擎,并随着时间的推移根据需要对其进行改进。 V8 是 here.
JS 引擎 API 的核心功能是允许嵌入器向 JavaScript 环境提供由嵌入器自己的 C++ 实现支持的对象和函数。本质上,这定义了一个映射,有时也称为“绑定”。例如,嵌入器可以说“我想要一个 document
对象,它应该看起来有一个 属性 .location
,它由我的 getter 函数 DocumentLocationGetter() {...}
,并且它应该(似乎)有一个方法 .createElement()
,由我的其他函数 DocumentCreateElement(...) {...}
” 支持,等等。
这就是您两个问题的答案:浏览器将某些功能公开给 JavaScript,然后可以从那里调用这些功能。浏览器决定调用此类函数时要做什么(例如:添加或删除 DOM 节点,更改 CSS 属性,将事件处理程序存储在某个元素的事件处理程序列表中, ...)。当然browser/embedder也可以调用JS引擎,比如调用事件处理器时,可以告诉引擎“请立即执行函数button1_clicked
”。
有关详细信息,请参见例如v8.dev/docs/embed.
我正在寻找这方面的详细答案。
我已经知道的
所以我对调用堆栈和回调有了一些了解,浏览器通过 web APIs 添加功能,通过事件循环添加回调。我还在某处读到有关具有 API.
的 JS 引擎的信息我想了解的
- Web API 如何暴露给 JS 引擎? (如果这是关于 具有 API 的 JS 引擎,关于 API 如何工作的一些描述 做)
- 渲染引擎的行为如何通过 JavaScript,比如操纵 DOM、CSSOM 等? (如果我明白 正确地,这相当于询问 web APIs 是如何工作的)
谢谢!
从(C++ 等)应用程序开发的角度来看,JavaScript 引擎是可嵌入的库;浏览器就是这样一种嵌入器。任何库都定义了一个可以使用它的 public 接口——它的应用程序编程接口(或简称 API)。对于 JS 引擎的 API 应该是什么样子,没有标准;每个引擎都定义了自己的引擎,并随着时间的推移根据需要对其进行改进。 V8 是 here.
JS 引擎 API 的核心功能是允许嵌入器向 JavaScript 环境提供由嵌入器自己的 C++ 实现支持的对象和函数。本质上,这定义了一个映射,有时也称为“绑定”。例如,嵌入器可以说“我想要一个 document
对象,它应该看起来有一个 属性 .location
,它由我的 getter 函数 DocumentLocationGetter() {...}
,并且它应该(似乎)有一个方法 .createElement()
,由我的其他函数 DocumentCreateElement(...) {...}
” 支持,等等。
这就是您两个问题的答案:浏览器将某些功能公开给 JavaScript,然后可以从那里调用这些功能。浏览器决定调用此类函数时要做什么(例如:添加或删除 DOM 节点,更改 CSS 属性,将事件处理程序存储在某个元素的事件处理程序列表中, ...)。当然browser/embedder也可以调用JS引擎,比如调用事件处理器时,可以告诉引擎“请立即执行函数button1_clicked
”。
有关详细信息,请参见例如v8.dev/docs/embed.