Closed MervynFang closed 1 year ago
背景:
Transfer-Encoding: chunked
renderToPipeableStream
需求: 支持 vue2/3 ssr 提前返回 html
个人愚见可以这么实现: #282
实现方案: 总的来说,需要支持单独获取 html head 标签内容,提前返回该内容并且不结束本次请求,这样浏览器端可以提前解析返回的 html 分块内容。然后正常调用 render,生成 body 内容返回,这与 layout 生成一致,最后再返回 </html>,并且结束请求 res.end()
</html>
res.end()
headRender
controller
htmlHeadChunked
ssr-core
render
true
<!DOCTYPE html>
generateHeadHtml
cssInject
customeHeadScript
htmlTemplate
预期效果:
close by #284
背景:
Transfer-Encoding: chunked
,h2:data 帧,故可以考虑提前返回 html 头部,达到提前加载静态资源,并可以提前返回 loading 或 骨架屏renderToPipeableStream
,故可以不用考虑 react 的实现需求: 支持 vue2/3 ssr 提前返回 html
内容个人愚见可以这么实现: #282
实现方案: 总的来说,需要支持单独获取 html head 标签内容,提前返回该内容并且不结束本次请求,这样浏览器端可以提前解析返回的 html 分块内容。然后正常调用 render,生成 body 内容返回,这与 layout 生成一致,最后再返回
</html>
,并且结束请求res.end()
headRender
方法,此方法为controller
获取 html 头部字符串。htmlHeadChunked
配置,此配置为ssr-core
render
方法区分为true
情况下不拼接<!DOCTYPE html>
和不设置响应头部,交由controller
处理。(多次返回不能在一次返回后设置头部)headRender
方法,获取路由和配置,通过 utilsgenerateHeadHtml
返回 head 标签字符串generateHeadHtml
,作用是生成cssInject
和customeHeadScript
替换htmlTemplate
内容,其中包括 css files,preload js files,customeHeadScript 和 inline css,生成 html 头部标签内容字符串。预期效果: