【问题标题】:Don't understand aysnc. How does "the execution happen in the background"?不理解异步。 “执行在后台发生”如何?
【发布时间】:2015-12-07 05:41:47
【问题描述】:

我正在观看一个视频 https://www.youtube.com/watch?v=KHSeGURldw8,关于使用 Javascript 进行异步编程,那个人说

"非阻塞表示解析仍将继续执行 将在后台发生。”

但是 Javascript 不是单线程的吗?所以如果我有

<script src="somescript.js" async></script>
<script src="someotherscript.js"></script>

那么浏览器对somescript.js 的解析不会被推迟到其他所有事情都完成吗?

【问题讨论】:

  • JavaScript 是单线程的,但这并不意味着整个浏览器都必须如此。浏览器可以做很多不会干扰 JS 环境或 DOM 的工作。
  • 另外,JavaScript 是单线程的想法有点过时了。 Web Workers 现在允许浏览器中的 JavaScript 运行多个线程。

标签: javascript multithreading dom asynchronous browser


【解决方案1】:

是的,javascript 代码只在一个线程中运行。在后台执行的不是你的 javascript 代码,而是其他东西,通常是 IO,比如向服务器发送请求并获得响应的时间。

同步调用会在您收到响应之前阻止您在请求时执行代码。在异步调用中,当您的浏览器或操作系统正在处理或您的数据在 Internet 上传输时,唯一的 javascript 线程仍在运行。

编辑:我没有看到你在谈论 html 标签中的“异步”属性。关于这一点,您的代码将在何时运行,在标签被解析或页面完成加载或在加载期间运行。您每次仍然只有一个线程和一个 javascript 代码。这里与 async 的并行性是关于页面加载期间运行的 javascript 代码,而不是关于同时运行的两个 javascript 脚本。

http://www.w3schools.com/tags/att_script_async.asp

【讨论】:

    猜你喜欢
    • 2010-11-21
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    相关资源
    最近更新 更多