← 返回全部文章

技术笔记

SSR热更新方案

技术/前端
文章目录

前端React+中间层SSR+后端Koa。

生产模式下,SSR渲染使用编译好的静态资源。

开发模式下,SSR渲染使用动态编译的资源。源文件先经过webpack进行编译打包,再通过ssr进行直出渲染。

SSR原理

SSR

app为整个应用的入口,存在两个webpack入口文件,client-entry和server-entry。打包成client-bundle和server-bundle,client-bundle负责前端交互控制,对后端渲染好的内容进行对比更新;server-bundle负责服务器渲染内容直出的控制。

客户端更新是增量更新,即正常的fetch更新,接收包含后端渲染完成的HTML文本的对象,经React控制器通过对比后将更新的部分进行更新。链接访问则保证直出为完整的html文件。

总体上即将原本需要在前端渲染的React文本,在后端渲染完成后直出为HTML文本,但前端交互控制仍按照React方式进行。但由于渲染是在后端完成,部分生命周期钩子不能使用,如componentDidMount,updating,unmounting等。

热更新

热更新即在开发过程中,代码开发时自动运行更新,服务端更新使用nodemon,监听服务端文件改变,自动重启应用。而前端由于使用服务器渲染需要webpack打包和编译,存在client-entry和server-entry分别运行在前端和后端。因此client-entry使用webpack-dev-middleware和webpack-hot-middleware进行开发时编译,保证前后端通信,使用chokidar监听模板文件,实时更新模板。server-entry使用MFS监听webpack编译完成的内存文件,更新server-bundle。

ssr

方案的核心主要在于client-entry和server-entry,odemon的设置,至于前端为react或vue在webpack编译时修改即可。