Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Render resolved streaming content for static render result #35221

Merged
merged 7 commits into from Mar 10, 2022

Conversation

huozhi
Copy link
Member

@huozhi huozhi commented Mar 10, 2022

  • Fix the static streaming render result isn't the resolved streaming rendering content (resolve suspense)
  • Update readable stream polyfill to fit the w3c standard

The significant change about the stream polyfill is delying the pull until getReader is called, so that react can delay the startFlowing work, otherwise it will start in onShellReady which leads to the streaming content is flushed too early

@huozhi huozhi requested a review from shuding March 10, 2022 19:25
shuding
shuding previously approved these changes Mar 10, 2022
ijjk
ijjk previously approved these changes Mar 10, 2022
@ijjk
Copy link
Member

ijjk commented Mar 10, 2022

Failing test suites

Commit: 6cb26b9

yarn testheadless test/production/react-18-streaming-ssr/index.test.ts

  • react 18 streaming SSR in minimal mode > should generate html response by streaming correctly
  • react 18 streaming SSR with custom next configs > should redirect paths without trailing-slash and render when slash is appended
Expand output

● react 18 streaming SSR in minimal mode › should generate html response by streaming correctly

thrown: "Exceeded timeout of 90000 ms for a test.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  35 |   })
  36 |
> 37 |   it('should generate html response by streaming correctly', async () => {
     |   ^
  38 |     const html = await renderViaHTTP(next.url, '/')
  39 |     expect(html).toContain('static streaming')
  40 |   })

  at production/react-18-streaming-ssr/index.test.ts:37:3
  at Object.<anonymous> (production/react-18-streaming-ssr/index.test.ts:5:1)

● react 18 streaming SSR with custom next configs › should redirect paths without trailing-slash and render when slash is appended

thrown: "Exceeded timeout of 90000 ms for a test.
Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

  68 |   afterAll(() => next.destroy())
  69 |
> 70 |   it('should redirect paths without trailing-slash and render when slash is appended', async () => {
     |   ^
  71 |     const page = '/hello'
  72 |     const redirectRes = await fetchViaHTTP(
  73 |       next.url,

  at production/react-18-streaming-ssr/index.test.ts:70:3
  at Object.<anonymous> (production/react-18-streaming-ssr/index.test.ts:43:1)

Read more about building and testing Next.js in contributing.md.

@ijjk

This comment has been minimized.

@ijjk
Copy link
Member

ijjk commented Mar 10, 2022

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
buildDuration 15.7s 15.8s ⚠️ +159ms
buildDurationCached 6.2s 6.1s -74ms
nodeModulesSize 372 MB 372 MB ⚠️ +1.03 kB
Page Load Tests Overall increase ✓
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
/ failed reqs 0 0
/ total time (seconds) 2.988 3.01 ⚠️ +0.02
/ avg req/sec 836.65 830.47 ⚠️ -6.18
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.229 1.191 -0.04
/error-in-render avg req/sec 2034.21 2099.35 +65.14
Client Bundles (main, webpack)
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
925.HASH.js gzip 179 B 179 B
framework-HASH.js gzip 42 kB 42 kB
main-HASH.js gzip 27.9 kB 27.9 kB
webpack-HASH.js gzip 1.44 kB 1.44 kB
Overall change 71.6 kB 71.6 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
_app-HASH.js gzip 1.36 kB 1.36 kB
_error-HASH.js gzip 192 B 192 B
amp-HASH.js gzip 309 B 309 B
css-HASH.js gzip 327 B 327 B
dynamic-HASH.js gzip 2.57 kB 2.57 kB
head-HASH.js gzip 351 B 351 B
hooks-HASH.js gzip 920 B 920 B
image-HASH.js gzip 5.09 kB 5.09 kB
index-HASH.js gzip 263 B 263 B
link-HASH.js gzip 2.26 kB 2.26 kB
routerDirect..HASH.js gzip 320 B 320 B
script-HASH.js gzip 387 B 387 B
withRouter-HASH.js gzip 319 B 319 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 14.8 kB 14.8 kB
Client Build Manifests
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
_buildManifest.js gzip 460 B 460 B
Overall change 460 B 460 B
Rendered Page Sizes
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
index.html gzip 531 B 531 B
link.html gzip 545 B 545 B
withRouter.html gzip 525 B 525 B
Overall change 1.6 kB 1.6 kB

Default Build with SWC (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
buildDuration 19s 19.1s ⚠️ +112ms
buildDurationCached 6.2s 6.2s -7ms
nodeModulesSize 372 MB 372 MB ⚠️ +1.03 kB
Page Load Tests Overall increase ✓
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
/ failed reqs 0 0
/ total time (seconds) 3.042 2.997 -0.04
/ avg req/sec 821.89 834.19 +12.3
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.238 1.222 -0.02
/error-in-render avg req/sec 2020.03 2045.93 +25.9
Client Bundles (main, webpack)
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
925.HASH.js gzip 178 B 178 B
framework-HASH.js gzip 42.3 kB 42.3 kB
main-HASH.js gzip 28.2 kB 28.2 kB
webpack-HASH.js gzip 1.45 kB 1.45 kB
Overall change 72.2 kB 72.2 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
_app-HASH.js gzip 1.35 kB 1.35 kB
_error-HASH.js gzip 179 B 179 B
amp-HASH.js gzip 313 B 313 B
css-HASH.js gzip 324 B 324 B
dynamic-HASH.js gzip 2.56 kB 2.56 kB
head-HASH.js gzip 351 B 351 B
hooks-HASH.js gzip 921 B 921 B
image-HASH.js gzip 5.23 kB 5.23 kB
index-HASH.js gzip 261 B 261 B
link-HASH.js gzip 2.33 kB 2.33 kB
routerDirect..HASH.js gzip 322 B 322 B
script-HASH.js gzip 388 B 388 B
withRouter-HASH.js gzip 317 B 317 B
85e02e95b279..7e3.css gzip 107 B 107 B
Overall change 15 kB 15 kB
Client Build Manifests
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
_buildManifest.js gzip 459 B 459 B
Overall change 459 B 459 B
Rendered Page Sizes
vercel/next.js canary huozhi/next.js streaming/resolve-data Change
index.html gzip 531 B 531 B
link.html gzip 545 B 545 B
withRouter.html gzip 526 B 526 B
Overall change 1.6 kB 1.6 kB
Commit: a28c30f

@kodiakhq kodiakhq bot merged commit 088354d into vercel:canary Mar 10, 2022
@huozhi huozhi deleted the streaming/resolve-data branch March 10, 2022 21:35
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Apr 10, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants