“Event Loop:事件循环”的版本间差异
跳到导航
跳到搜索
无编辑摘要 |
无编辑摘要 |
||
第6行: | 第6行: | ||
而网络上搜到的内容大同小异,互相又有不小出入,难以拿捏。 | 而网络上搜到的内容大同小异,互相又有不小出入,难以拿捏。 | ||
众所周知,JavaScript 是没有所谓源代码的“源代码”,所以这部分内容只能在“规范”文件<ref>参见:[https://html.spec.whatwg.org/multipage/webappapis.html#event-loops 《HTML Standard》的“Event loops”一节]</ref>了。 | 众所周知,JavaScript 是没有所谓源代码的“源代码”,所以这部分内容只能在“规范”文件<ref name="HTML-Standard">参见:[https://html.spec.whatwg.org/multipage/webappapis.html#event-loops 《HTML Standard》的“Event loops”一节]</ref>了。 | ||
以下内容参照《HTML Standard》、MDN、与网络内容整理。 | * | ||
* 以下内容参照《HTML Standard》、MDN、与网络内容整理。 | |||
== | == 前置知识 == | ||
见:<big>'''[[浏览器基础:进程与线程]]'''</big> | |||
“一个 Tab 页面对应一个'''渲染进程'''”,而“渲染进程中只能存在一个 '''JS 引擎线程'''”,即:页面中的所有 JS 都由同一单线程运行。 | |||
??????由于“渲染进程”负责了页面几乎所有的任务(事件、交互、脚本、渲染、网络),所以如何协调各个任务的执行是关键问题。 | |||
=== JavaScript的“任务” === | |||
JavaScript中,“任务”被分为两种:“同步任务”,“异步任务”。 | |||
=== | |||
“异步任务”(Task):又分为“宏任务”(MacroTask)与“微任务”(MicroTask)。 | |||
# '''宏任务(macrotask)''': | # '''宏任务(macrotask)''': | ||
第55行: | 第27行: | ||
=== JavaScript的“运行时” === | |||
=== | |||
与 Java 的运行时概念类似,JavaScript 也有其运行时。 | 与 Java 的运行时概念类似,JavaScript 也有其运行时。 | ||
== Event Loop == | |||
== | |||
要协调事件、用户交互、脚本、渲染、网络等,用户代理必须使用本节中描述的事件循环。每个代理都有一个关联的事件循环,该循环对该代理是唯一的。 | 要协调事件、用户交互、脚本、渲染、网络等,用户代理必须使用本节中描述的事件循环。每个代理都有一个关联的事件循环,该循环对该代理是唯一的。 | ||
2023年3月24日 (五) 03:26的版本
关于
在 MDN 上看到 JavaScript 的《并发模型与事件循环》一节,但由于该页面内容过少,实在不变学习。 而网络上搜到的内容大同小异,互相又有不小出入,难以拿捏。 众所周知,JavaScript 是没有所谓源代码的“源代码”,所以这部分内容只能在“规范”文件[1]了。
- 以下内容参照《HTML Standard》、MDN、与网络内容整理。
前置知识
见:浏览器基础:进程与线程 “一个 Tab 页面对应一个渲染进程”,而“渲染进程中只能存在一个 JS 引擎线程”,即:页面中的所有 JS 都由同一单线程运行。
??????由于“渲染进程”负责了页面几乎所有的任务(事件、交互、脚本、渲染、网络),所以如何协调各个任务的执行是关键问题。
JavaScript的“任务”
JavaScript中,“任务”被分为两种:“同步任务”,“异步任务”。 “异步任务”(Task):又分为“宏任务”(MacroTask)与“微任务”(MicroTask)。
- 宏任务(macrotask):
- 微任务(microtask):
JavaScript的“运行时”
与 Java 的运行时概念类似,JavaScript 也有其运行时。
Event Loop
要协调事件、用户交互、脚本、渲染、网络等,用户代理必须使用本节中描述的事件循环。每个代理都有一个关联的事件循环,该循环对该代理是唯一的。
当宏任务和微任务都处于 任务队列(Task Queue) 中时,微任务的优先级大于宏任务,即先将微任务执行完,再执行宏任务; 这是理解上优点小偏差