Render async iterables

Besides promises, JSX children can be async iterables, e.g. an async generator. Their items are rendered in order as they arrive. The markup rendered so far is sent to the browser while waiting for the next item. Reload to watch it again.

A component can be an async function* which yields JSX. This is a natural fit for paginated APIs or database cursors: the next page is only loaded when the renderer needs it, and each page is streamed as soon as it is ready. If the browser stops loading the page, the generator is stopped like a for await loop on break, so its finally block runs and can release resources.

#ReleasePageFlushed after
1v1.0.01702 ms
2v1.1.01702 ms
3v1.2.01702 ms
4v1.3.021402 ms
5v1.4.021402 ms
6v1.5.021402 ms
7v1.6.032103 ms
8v1.7.032103 ms
9v1.8.032103 ms
10v1.9.042804 ms
11v1.10.042805 ms
12v1.11.042805 ms
13v1.12.053506 ms
14v1.13.053506 ms
15v1.14.053506 ms

All done after 3506 ms.