webpack ssr

前端应用服务端渲染

面向消费者、面向用户的前端应用程序,使用 ssr 是很有必要的。

作为消费者,在使用前端应用程序的时候,页面打开过程大概是以下几个步骤。

开始加载(白屏) -> HTML 加载成功,开始加载数据(这个时候会有提示,短视频加载中) -> 数据加载成功,渲染成功开始, 加载图⽚片资源 -> 图⽚片加载成功, ⻚页⾯面可交互

内网加载、拉取资源的速度比外网快很多

ssr 可以缩短白屏的时间

服务端渲染(SSR)是什么?

渲染: HTML+CSS+JS+Data->渲染后的HTML

服务端:

  • 所有模板等资源都存储在服务端
  • 内网机器器拉取数据更更快
  • ⼀个 HTML 返回所有数据

浏览器器和服务器器交互流程

客户端渲染 vs 服务端渲染

客户端渲染 服务端渲染
请求 多个请求(HTML,数据等) 1 个请求
加载过程 HTML & 数据串行加载 一个请求返回一个HTML&数据
渲染 前端渲染 服务端渲染
可交互 图片等静态资源加载完成,JS逻辑执行完可交互 图片等静态资源加载完成,JS逻辑执行完可交互

总结:服务端渲染 (SSR) 的核心是减少请求

SSR 的优势

减少白屏时间

对 SEO 友好

SSR 代码实现思路路

服务端

  • 使用 react-dom/server 的 renderToString ⽅法将 React 组件渲染成字符串

  • 服务端路路由返回对应的模板

客户端

打包出针对服务端的组件

webpack ssr 打包存在的问题

浏览器的全局变量 (Node.js 中没有 document, window)

  • 组件适配:将不兼容的组件根据打包环境进行适配

  • 请求适配:将 fetch 或者 ajax 发送请求的写法改成 isomorphic-fetch 或者 axios

样式问题 (Node.js ⽆无法解析 css)

  • 方案⼀:服务端打包通过 ignore-loader 忽略掉 CSS 的解析
  • ⽅案二:将 style-loader 替换成 isomorphic-style-loader

如何解决样式不不显示的问题?

  • 使⽤用打包出来的浏览器器端 html 为模板

  • 设置占位符,动态插⼊入组件
posted @ 2020-09-18 17:23  jaiodfjiaodf  阅读(160)  评论(0编辑  收藏  举报