Repository navigation
Commit c8e5339
committed
stream: avoid async pull machinery in ReadableStream.from
The pull algorithm was an async function that awaited iterator.next()
and then the produced value, costing an async-function frame plus two
await wrappers and a controller-side reaction per chunk. Rewrite it
callback-style: the next() result is adopted exactly like the previous
awaits (including the observable .then lookup on plain object values),
the reaction steps are created once per stream, and completion is
delivered straight to the controller's cached pull reactions using the
parked-algorithm-result contract. The iterator's next method is also
looked up once at setup, per the spec's GetIteratorDirect.
A from benchmark is added since the suite had no ReadableStream.from
row. Iterating a stream built from a sync generator improves by ~27%
and from an async generator by ~23%; all other rows are unchanged.
Signed-off-by: Matteo Collina <hello@matteocollina.com>1 parent 3650132 commit c8e5339
2 files changed
Lines changed: 104 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
| 115 | + | |
115 | 116 | | |
116 | 117 | | |
117 | 118 | | |
| |||
1446 | 1447 | | |
1447 | 1448 | | |
1448 | 1449 | | |
| 1450 | + | |
| 1451 | + | |
1449 | 1452 | | |
1450 | 1453 | | |
1451 | | - | |
1452 | | - | |
| 1454 | + | |
| 1455 | + | |
| 1456 | + | |
| 1457 | + | |
| 1458 | + | |
| 1459 | + | |
| 1460 | + | |
| 1461 | + | |
| 1462 | + | |
| 1463 | + | |
| 1464 | + | |
| 1465 | + | |
1453 | 1466 | | |
1454 | | - | |
1455 | | - | |
| 1467 | + | |
| 1468 | + | |
| 1469 | + | |
1456 | 1470 | | |
1457 | | - | |
1458 | | - | |
1459 | | - | |
1460 | | - | |
| 1471 | + | |
| 1472 | + | |
| 1473 | + | |
| 1474 | + | |
| 1475 | + | |
| 1476 | + | |
| 1477 | + | |
| 1478 | + | |
| 1479 | + | |
| 1480 | + | |
| 1481 | + | |
| 1482 | + | |
| 1483 | + | |
| 1484 | + | |
| 1485 | + | |
| 1486 | + | |
| 1487 | + | |
| 1488 | + | |
| 1489 | + | |
| 1490 | + | |
| 1491 | + | |
| 1492 | + | |
| 1493 | + | |
| 1494 | + | |
| 1495 | + | |
| 1496 | + | |
| 1497 | + | |
| 1498 | + | |
| 1499 | + | |
| 1500 | + | |
| 1501 | + | |
| 1502 | + | |
| 1503 | + | |
| 1504 | + | |
| 1505 | + | |
| 1506 | + | |
| 1507 | + | |
| 1508 | + | |
| 1509 | + | |
| 1510 | + | |
| 1511 | + | |
| 1512 | + | |
| 1513 | + | |
| 1514 | + | |
| 1515 | + | |
| 1516 | + | |
| 1517 | + | |
| 1518 | + | |
| 1519 | + | |
| 1520 | + | |
| 1521 | + | |
| 1522 | + | |
| 1523 | + | |
1461 | 1524 | | |
| 1525 | + | |
| 1526 | + | |
| 1527 | + | |
| 1528 | + | |
1462 | 1529 | | |
1463 | 1530 | | |
1464 | 1531 | | |
| |||
0 commit comments