gpt4 book ai didi

javascript - 在浏览器中运行的 JavaScript 如何能够同时监听滚动事件和 ajax 响应?

转载 作者:行者123 更新时间:2023-12-04 07:24:20 25 4
gpt4 key购买 nike

我有一个与 JavaScript 相关的基本问题。
该场景是用户向下滚动某个社交媒体应用的新闻提要。
这将在彼此之间发生三个不同的过程。

  • 滚动事件
  • 创建对某个 URL 的 ajax 请求
  • 接收对这些请求的响应。

  • 一旦第一个请求被触发,这些就可以有任何相对顺序。
    所以我的问题是有两个不同的进程同时运行吗?
  • 一听滚动事件。
  • 一听收到的响应。

  • 如果是这样,它如何在事件循环上同步以及进程如何运行(考虑到 js 的单线程特性和可能的​​单核环境)?
    这些进程是否由浏览器跨越?如果是这样,事件循环、浏览器堆栈、执行堆栈和这些进程之间是如何保持同步的?

    最佳答案

    JavaScript 是单线程的,但浏览器不是。
    通过说 JavaSript 是单线程的,我们的意思是在给定时间当前只有一个指令序列(在主线程上,您现在可以让工作线程与主线程并行运行,类似于您有两个浏览器时的情况标签打开)。
    JavaScript 引擎(在 chrome 中是 V8)是浏览器的一部分,它根据 ECMAScript 规范执行 JavaScript 代码。
    在浏览器中,内置 API 添加到 JavaScript 中,因此它们似乎是 JS 本身的一部分,但实际上并非如此。
    DOM 是一个浏览器 API。当您使用与 DOM 相关的任何功能时,JavaScript 会脱离其“世界”并与外部服务进行通信。
    呈现和更改页面的不是 JavaScript 引擎。当您使用 DOM API 时,您不会直接更改文档——您只是告诉浏览器渲染器需要进行哪些更改。甚至事件循环也不是 V8 的一部分——它是一个浏览器构造。
    事件由浏览器获取,当有一些与特定事件相关联的监听器时,处理程序被添加到事件循环(这只是一个有事情要做的队列)。当队列中有一些工作时,它由 V8 执行,当它完成时,下一个工作就会得到处理。

    关于javascript - 在浏览器中运行的 JavaScript 如何能够同时监听滚动事件和 ajax 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68300835/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com