Commit 6795538
committed
Read from segment cache even if route is unknown
Currently, there's a cliff when navigating to a route that is unknown to
the client. The prefetch cache is bypassed completely because we don't
know the structure of the target route, and therefore we don't know
which segments we might be able to use to construct a loading state (or even a fully cached response).
However, because RSC responses are streaming, we can take advantage of
the fact that the first chunk of the response contains the route tree.
So as soon as we receive the first chunk, we can show a cached loading
state to the user (if available), even while we wait for the rest of the
response to arrive from the server.
To access a segment's cache, you need its corresponding RouteTree.
Previously this was not available during an unprefetched navigation
because those objects were only created during a prefetch. But now that
we've migrated the navigation implementation to use RouteTrees, too, we
can access the cache directly inside the main navigation function,
rather than having to do two separate passes like before.
In other words, the only difference between a navigation to an unknown
route versus a prefetched route is the extra latency required to get
those first bytes from the server. Once the route tree resolves, the
rest of the implementation and behavior is identical.1 parent 67d2b3e commit 6795538
File tree
7 files changed
+347
-479
lines changed- packages/next/src/client/components
- router-reducer
- reducers
- segment-cache
7 files changed
+347
-479
lines changed
0 commit comments