JS前端开发联盟群JavaScript

[JavaScript] HTML5和EcmaScript任务队

2016-03-07  本文已影响136人  何幻

一个事件循环可以有多个任务队列。
同一个任务队列中的任务先进先出
多个任务队列的任务可能交叉执行。

(1)HTML5规范

6.1.4 Event loops
http://www.w3.org/TR/html5/webappapis.html#event-loops

它指出,一个浏览器环境(unit of related similar-origin browsing contexts.)只能有一个事件循环(Event loop),而一个事件循环可以多个任务队列(Task queue),每个任务都有一个任务源(Task source)。
相同任务源的任务,只能放到一个任务队列中。
不同任务源的任务,可以放到不同任务队列中。
(同一个任务队列,能否容纳不同任务源的任务,没说)
又举了一个例子说,客户端可能实现了一个包含鼠标键盘事件的任务队列,还有其他的任务队列,而给鼠标键盘事件的任务队列更高优先级,例如75%的可能性执行它。这样就能保证流畅的交互性,而且别的任务也能执行到了。但是,同一个任务队列中的任务必须按先进先出的顺序执行。

(2)EcmaScript 2015规范

76页 8.4 Jobs and Job Queues

它指出,任务队列(Job queue)是一个先进先出的队列,每一个任务队列是有名字的,至于有多少个任务队列,取决于实现。每一个实现至少应该包含以上两个任务队列。

以下又强调了,单独的任务队列中的任务总是按先进先出的顺序执行,但是不保证多个任务队列中的任务优先级,具体实现可能会交叉执行

哪里用到这个任务队列了呢,Promise就用了,492页

<u></u>Promise.then会把一个任务放到名为“PromiseJobs”的任务队列中。

上一篇下一篇

猜你喜欢

热点阅读