提示:记录工作中遇到的需求及解决办法
文章目录
- 什么是流式渲染?
- Node.js 实现简单流式渲染
- 声明式 Shadow DOM,不依赖 javascript 实现
- react 实现流式渲染
- 总结
提示:以下是本篇文章正文内容,下面案例可供参考
什么是流式渲染?
流式渲染主要思想是将HTML文档分块(chunk)并逐块发送到客户端,而不是等待整个页面完全生成后再发送。
流式渲染不是什么新鲜的技术。早在90年代,网页浏览器就已经开始使用这种方式来处理HTML文档。
在 SPA (单页应用)流行的时代,由于 SPA 的核心是客户端动态地渲染内容,流式渲染没有得到太多关注。如今,随着服务端渲染相关技术的成熟,流式渲染成为可以显著提升首屏加载性能的利器。
素材来源于文章
Node.js 实现简单流式渲染
HTTP is a first-class citizen in Node.js, designed with streaming and low latency in mind. This makes Node.js well suited for the foundation of a web library or framework.
HTTP 是 Node.js 中的一等公民,其设计时考虑到了流式传输和低延迟。这使得 Node.js 非常适合作为 Web 库或框架的基础。
———— Node.js官网
Node.js 在设计之初就考虑到了流式传输数据,考虑如下代码:
const Koa = require('koa');
const app = new Koa();// 假设数据需要 5 秒的时间来获取
renderAsyncString = async () => {return new Promise((resolve, reject) => {setTimeout(() => {resolve('<h1>Hello World</h1>');}, 5000);})
}app.use(async (ctx, next) => {ctx.type = 'html';ctx.body = await renderAsyncString();await next();
});app.listen(3000, () => {console.log('App is listening on port 3000');
});
这是一个简化的业务场景,运行起来后,会在5秒的白屏后显示一段 hello world 文字。
没有用户会喜欢一个会白屏5秒的网页!在 web.dev 对 TTFB 的