美文网首页JS前端开发联盟群JavaScript
[JavaScript] HTML5和EcmaScript任务队

[JavaScript] HTML5和EcmaScript任务队

作者: 何幻 | 来源:发表于2016-03-07 07:16 被阅读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”的任务队列中。

    相关文章

      网友评论

        本文标题:[JavaScript] HTML5和EcmaScript任务队

        本文链接:https://www.haomeiwen.com/subject/nxdnkttx.html