Max Design

Published:

Did you know that there are two completely separate systems that determine when live regions are spoken? They are:

Assertive announcements 1 are controlled almost entirely by the screen reader.

Polite announcements 2 depend on both systems, which is why their timing can vary so much in practice.

Let’s look at these two systems in detail.


1. Screen reader speech queue (assistive technology layer)

Screen readers manage their spoken output using an internal speech queue.

An item spoken by the screen reader is called an utterance. This is a single self-contained chunk of speech.

The queue contains:

This queue is generally processed FIFO (first in, first out) unless specific rules override it.

Assertive announcements:

Assertive always wins because “interrupt behaviour” is part of the queue layer.

Polite announcements:

This means user activity always delays polite announcements. But screen readers do not wait for sentences or paragraphs. They only wait until their queue empties.

This explains the first half of why polite announcements vary.


2. System-Driven Scheduling (Accessibility Subsystem Layer)

Before a screen reader can speak anything, the browser must:

This pipeline runs on the browser's accessibility subsystem, a system that operates independently of the JavaScript engine, often on its own thread or process. It is not a stage inside the JavaScript event loop, and the event loop does not schedule or gate AXEvents.

What the event loop does control is when your JavaScript runs and when it yields control back to the browser:

Rendering (layout, paint, compositing) and AX tree updates are separate subsystems again. They are not part of event loop management, but their timing is indirectly affected by it: a DOM mutation cannot be detected by the accessibility subsystem until the JavaScript that caused it has actually run, and the event loop determines when that happens. Once JavaScript yields, the accessibility subsystem is free to detect the mutation and act on its own schedule, independently of any further event loop activity.

This is the other half of live region timing: not the event loop itself, but the independent, less-predictable systems that pick up where the event loop's involvement ends.

Let’s explore how assertive and polite differ at the scheduling layer.

Assertive Timing

Assertive live region AX events tend to be detected and fired soon after the triggering script yields:

Why assertive tends to be fast:

The main thing that can delay the JavaScript side of this is microtask starvation, where microtasks keep queuing more microtasks, so the browser never yields and the mutation is never handed off for the accessibility subsystem to detect. Beyond that, actual AX event timing is implementation-dependent and not something the event loop guarantees.

This explains why assertive is comparatively fast and consistent in practice, though not because the event loop is driving it, only because it has fewer independent systems to wait on downstream.

Polite Timing

Polite live region AX events are intentionally delayed, typically until the browser reaches a stable render state:

Polite must wait for a future render tick, and a "stable render state" can be delayed by:

These delays affect the scheduling of the announcement inside the accessibility subsystem, before the screen reader ever receives it. The event loop's only role here is upstream: making sure the DOM mutation itself has actually happened before any of this can begin.


Putting Both Systems Together

This unified pipeline shows exactly where delays occur:

DOM Mutation
        ↓
  Browser Scheduling Layer
  (when to fire AX events)
        ↓
  AX Event Fired
        ↓
  Screen Reader Speech Queue
  (what gets spoken & in what order)
        ↓
  TTS Utterance Output

Assertive announcements:

Polite announcements:

This is why polite announcements vary so much more than assertive ones.


Caveats and nuances


Related articles

What is an AXEvent?
Detailed explanation of AXevents.

What really happens when a user clicks an accordion button?
A more detailed explanation of an event.

What are DOM mutations?
DOM mutations are any changes to the accessibility tree.

End-to-end browser and accessibility event architecture
A full explanation of how browsers and assistive technologies communicate.


Footnotes