浏览器中的 JavaScript 运行 如何能够同时收听滚动事件和 ajax 响应?
How is JavaScript running in browser able to Listen to on scroll event along with ajax responses at the same time?
我有一个与 JavaScript 有关的基本问题。
场景是用户向下滚动某个社交媒体应用的新闻提要。
这将在彼此之间发生三个不同的过程。
- 滚动事件
- 正在向某些 URL
创建 ajax 请求
- 正在接收对这些请求的回复。
一旦第一个请求被激发,它们可以有任何相对顺序。
所以我的问题是有两个不同的进程同时 运行ning 吗?
- 一个监听滚动事件。
- 一个收听收到的回复。
如果是,它是如何在事件循环上同步的,过程是如何运行(考虑到js的单线程性质和可能的单核环境)?
这些进程是否被浏览器跨越?如果是这样,事件循环、浏览器堆栈、执行堆栈和这些进程之间如何保持同步?
JavaScript 是单线程的,但浏览器不是。
说 JavaSript 是单线程的,我们的意思是在给定时间当前只有一个指令序列在执行(在主线程上,您现在可以让工作线程 运行 与主线程并行类似于打开两个浏览器选项卡时的情况。
JavaScript 引擎(在 chrome 中是 V8)是浏览器的一部分,它根据 ECMAScript 规范执行 JavaScript 代码。
在浏览器中,内置 API 添加到 JavaScript,所以看起来它们是 JS 本身的一部分,但实际上不是。
DOM 是浏览器 API。当您使用与 DOM 相关的任何功能时,JavaScript 脱离其“世界”并与外部服务通信。
呈现和更改页面的不是 JavaScript 引擎。当您使用 DOM API 时,您并没有直接更改文档 - 您只是告诉浏览器渲染器需要进行哪些更改。甚至事件循环也不是 V8 的一部分——它是一个浏览器构造。
事件由浏览器拾取,当有一些侦听器与特定事件关联时,处理程序将添加到事件循环(这只是一个有待办事项的队列)。当队列中有一些作业时,它由 V8 执行,当它完成时,将处理下一个作业。
我有一个与 JavaScript 有关的基本问题。
场景是用户向下滚动某个社交媒体应用的新闻提要。
这将在彼此之间发生三个不同的过程。
- 滚动事件
- 正在向某些 URL 创建 ajax 请求
- 正在接收对这些请求的回复。
一旦第一个请求被激发,它们可以有任何相对顺序。
所以我的问题是有两个不同的进程同时 运行ning 吗?
- 一个监听滚动事件。
- 一个收听收到的回复。
如果是,它是如何在事件循环上同步的,过程是如何运行(考虑到js的单线程性质和可能的单核环境)?
这些进程是否被浏览器跨越?如果是这样,事件循环、浏览器堆栈、执行堆栈和这些进程之间如何保持同步?
JavaScript 是单线程的,但浏览器不是。
说 JavaSript 是单线程的,我们的意思是在给定时间当前只有一个指令序列在执行(在主线程上,您现在可以让工作线程 运行 与主线程并行类似于打开两个浏览器选项卡时的情况。
JavaScript 引擎(在 chrome 中是 V8)是浏览器的一部分,它根据 ECMAScript 规范执行 JavaScript 代码。
在浏览器中,内置 API 添加到 JavaScript,所以看起来它们是 JS 本身的一部分,但实际上不是。
DOM 是浏览器 API。当您使用与 DOM 相关的任何功能时,JavaScript 脱离其“世界”并与外部服务通信。
呈现和更改页面的不是 JavaScript 引擎。当您使用 DOM API 时,您并没有直接更改文档 - 您只是告诉浏览器渲染器需要进行哪些更改。甚至事件循环也不是 V8 的一部分——它是一个浏览器构造。
事件由浏览器拾取,当有一些侦听器与特定事件关联时,处理程序将添加到事件循环(这只是一个有待办事项的队列)。当队列中有一些作业时,它由 V8 执行,当它完成时,将处理下一个作业。