Skip to content

Commit 444a329

Browse files
Add principles for task sources (#590)
1 parent 63b43c9 commit 444a329

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

index.bs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2325,6 +2325,38 @@ See also:
23252325

23262326
* [Command–query separation on Wikipedia](https://en.wikipedia.org/wiki/Command–query_separation)
23272327

2328+
<h3 id="prefer-existing-task-sources">Prefer existing task sources</h3>
2329+
2330+
Use existing [=task sources=] for dispatching work where possible.
2331+
2332+
Only create a new [=task source=] when there is a clear reason to do so.
2333+
Specs use [=task sources=] to group related work (or "[=tasks=]") so UAs can schedule them sensibly.
2334+
A task is queued on a task source,
2335+
and each task source is associated with a task queue for an [=/event loop=].
2336+
Order is guaranteed within a source, while the UA chooses which queue to service next.
2337+
2338+
Use the generic or preexisting task sources whenever possible.
2339+
HTML defines [[html#generic-task-sources|generic task sources]] meant for broad reuse across specs.
2340+
This includes, but is not limited to:
2341+
the [=DOM manipulation task source=],
2342+
the [=user interaction task source=],
2343+
and the [=networking task source=].
2344+
If your feature matches one of these categories,
2345+
queue on that source rather than creating a new one.
2346+
Doing so improves interoperability, predictability, and performance scheduling across the platform.
2347+
2348+
Adding a task source has performance and complexity costs
2349+
that all browser implementations pay.
2350+
Only mint a new task source when you have a concrete, testable need.
2351+
For example, when the feature's timing/execution model must be isolated
2352+
from the generic task sources
2353+
(e.g., media elements get their own media element event task source to align with decoder/timeline semantics).
2354+
2355+
When writing a spec, prefer HTML's wrapper algorithms
2356+
([=queue a global task=], [=queue an element task=])
2357+
and avoid relying on a particular [=/event loop=].
2358+
And only be explicit about the event loop when appropriate (see also [[#event-design]]).
2359+
23282360
<h2 id="event-design">Event Design</h2>
23292361

23302362
<h3 id="one-time-events">Use promises for one time events</h3>

0 commit comments

Comments
 (0)