Microtask scheduling

Domenic Denicola d at domenic.me
Tue Jun 27 21:01:38 UTC 2017


The work has since moved into the specification that defines the event loop, i.e. the HTML Standard:


  *   https://github.com/whatwg/html/issues/512
  *   https://github.com/whatwg/html/pull/2789


From: es-discuss [mailto:es-discuss-bounces at mozilla.org] On Behalf Of Isiah Meadows
Sent: Tuesday, June 27, 2017 16:25
To: Calvin Metcalf <calvin.metcalf at gmail.com>; C. Scott Ananian <ecmascript at cscott.net>
Cc: es-discuss at mozilla.org
Subject: Re: Microtask scheduling

I was browsing and stumbled on a strawman that is nearly identical to what I proposed here (mod the extra args handling), just a couple years old:

https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask

On Mon, Jun 26, 2017, 13:49 Calvin Metcalf <calvin.metcalf at gmail.com<mailto:calvin.metcalf at gmail.com>> wrote:
One of the big use cases for process.nextTick is throwing errors outside the current stack, either to avoid preventing cleanup or to avoid being caught in try/catch blocks or promise chains so using a promise directly isn't very useful.  This came up in the browserify/webpack shim for process.nextTick

On Mon, Jun 26, 2017 at 12:29 PM C. Scott Ananian <ecmascript at cscott.net<mailto:ecmascript at cscott.net>> wrote:
Promise dispatch should actually simplify to this in certain common cases.  I meant to write up a document describing the typical dispatch optimizations high-performance Promise libraries do, based on my experiences writing https://github.com/cscott/babybird (although Optimization Notes in the README of that package contains the basic details).  Assuming the Promise implementation is fast, then Promise#then0(...) should basically give you direct access to the internal `asap`-like dispatcher.
  --scott

On Mon, Jun 26, 2017 at 8:20 AM, Calvin Metcalf <calvin.metcalf at gmail.com<mailto:calvin.metcalf at gmail.com>> wrote:
Kris, you're conflating macrotasks and microtasks [1]. This has come up a couple times before and there have been issues raised by browser venders[2][3].


1. https://github.com/YuzuJS/setImmediate#macrotasks-and-microtasks
2. https://bugzilla.mozilla.org/show_bug.cgi?id=686201
3. https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/Hn3GxRLXmR0/XP9xcY_gBPQJ

On Mon, Jun 26, 2017 at 2:51 AM Kris Siegel <krissiegel at gmail.com<mailto:krissiegel at gmail.com>> wrote:
This seems more like a platform-level feature versus something that needs to be part of the ECMAScript standard. Also, keep in mind it's rarely a good idea to explicitly call nextTick() in node as it executes the code immediately after the current code is finished and before the next, scheduled code (this can cause issues with processing I/O if you're doing it too frequently).

In a browser you can sorta emulate similar behavior through IE's setImmediate(), using postMessage() or even the requestAnimationFrame(). Granted none of those are exactly like nextTick() and I wouldn't mind seeing something like setImmediate() become more of a standard but this isn't for the ECMAScript group.

On Wed, Jun 21, 2017 at 2:10 PM, Isiah Meadows <isiahmeadows at gmail.com<mailto:isiahmeadows at gmail.com>> wrote:
It's a relatively low-level operation, but in performance-sensitive
async code and polyfills, there's still a strong need for raw
microtask scheduling, at a much lower level than promises. In
particular, there's two very frequently used modules providing a
wrapper for this specific thing:

1. next-tick: A browser polyfill for Node's `process.nextTick`, with
over 2M downloads last month and 88 direct dependents.
2. asap: A microtask scheduler that avoids blocking Node's I/O loop,
with over 7M downloads last month and 88 direct dependents.

In addition, several libraries like Bluebird have to implement their
own wrappers to gain similar functionality without assuming another
dependency.

Any chance something like Node's `process.nextTick` could be added,
maybe something like `Promise.schedule(func, thisArg, ...args)`?

-----

Isiah Meadows
me at isiahmeadows.com<mailto:me at isiahmeadows.com>

Looking for web consulting? Or a new website?
Send me an email and we can get started.
www.isiahmeadows.com<http://www.isiahmeadows.com>
_______________________________________________
es-discuss mailing list
es-discuss at mozilla.org<mailto:es-discuss at mozilla.org>
https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
es-discuss at mozilla.org<mailto:es-discuss at mozilla.org>
https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
es-discuss at mozilla.org<mailto:es-discuss at mozilla.org>
https://mail.mozilla.org/listinfo/es-discuss

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20170627/3c163888/attachment-0001.html>


More information about the es-discuss mailing list