Streaming меняет один цельный document на быструю оболочку: TTFB и perceived load выигрывают, но response больше не атомарный blob.
Разбор
- Status и redirect должны решаться до flush shell — иначе поздно менять HTTP-ответ.
- Гранулярность boundary — весь skill. Один boundary вокруг всего = ничего не выиграли (страница ждёт самый медленный child). Boundary на каждый widget = skeleton confetti и layout thrash. Рисуйте boundaries вокруг независимых, осмысленно медленных регионов.
- Когда НЕ stream: fully static route нечего stream — уже cached HTML. Если fallback и resolved content различаются по высоте — CLS; резервируйте место или пропустите boundary.
Итог
Streaming — trade-off atomic response vs быстрый first paint; границы Suspense должны соответствовать независимым slow regions.