本文主要介绍 UmiJS 的预渲染功能。
服务端渲染(Server-Side Rendering),是指由 服务端 完成页面的 HTML 结构拼接的页面处理技术,发送到浏览器,然后为其绑定状态与事件,成为完全可交互页面的过程。
服务端渲染,首先得有后端服务器(一般是 Node.js)才可以使用,而没有后端服务器的情况下,可以使用 预渲染 。
预渲染与服务端渲染唯一的不同点在于 渲染时机 ,服务端渲染的时机是在用户访问时执行渲染(即实时渲染,数据一般是最新的),预渲染的时机是在项目构建时,当用户访问时,数据不一定是最新的( 如果数据没有实时性,可以直接考虑预渲染 )。
预渲染在构建时执行渲染,将渲染后的 HTML 片段生成静态 HTML 文件。无需使用 web 服务器实时动态编译 HTML,适用于 静态站点生成 。
Umi3 在 SSR 上做了大量优化及开发体验的提升,具有以下特性:
默认情况下,服务端渲染时关闭的,可通过配置开启:
服务端渲染的数据获取方式与 SPA(单页应用) 有所不同,为了让客户端和服务端都能获取到同一份数据,Umi 提供了页面级数据的预获取。
每个页面可能有单独的数据预获取逻辑,这里我们会获取页面组件上的 getInitialProps 静态方法,执行后将结果注入到该页面组件的 props 中,如:
getInitialProps 有几个固定参数:
为了结合数据流框架,我们提供了 modifyGetInitialPropsCtx 方法,由插件或应用来扩展 ctx 参数,以 dva 为例:
然后在页面中,可以获取到 store :
同时也可以在自身应用中进行扩展:
同时可以使用 getInitialPropsCtx 将服务端参数扩展到 ctx 中,例如:
在使用的时候,就有 req 对象,不过需要注意的是,只在服务端执行时才有此参数:
则在执行 getInitialProps 方法时,除了以上两个固定参数外,还会获取到 title 和 store 参数。
关于 getInitialProps 执行逻辑和时机,需要注意:
执行 umi build ,除了正常的 umi.js 外,会多一个服务端文件: umi.server.js (相当于服务端入口文件)。然后在后端框架中,引用该文件:
render 方法参数和返回值如下:
完美兼容客户端动态加载,配置如下:
@umijs/preset-react 插件集中已内置对标题的渲染,通过以下步骤使用:
@umijs/preset-react 插件集中已内置 dva
这时候 getInitialProps(ctx) 中的 ctx 就会有 store 属性,可执行 dispatch ,并返回初始化数据。
Umi 同时支持对服务端和客户端包大小的分析
我最开始接触是在Vue的官网上,开始是作为一个小节出现,现在已经是个专门的大章节来专门讲Vue服务端渲染的内容。
服务端渲染 简单来说就是在服务器上把数据和模板拼接好以后发送给客户端显示。
回顾下前端的 历史 ,最开始的站点是简单的静态网站。后端大哥把.html文件推送给用户,用户浏览器解析这些字符串进行显示。那个时候就是 服务端渲染 。可是后来由于网站内容越来越复杂、特效越来越炫酷,这种‘兼职’状态已经不能满足需求,细分之下的前端出现了。
随后为了方便的开发,开始提倡 前后端分离,大家各做各的,彼此之间通过基于HTTP的各种API协作,变成了数据动态生成的新一代站点。
再后来出现了Vue等三大MV*框架,网站做成了SPA应用,解决了很多问题的同时也带来了新问题,其中最突出的两个:难以SEO和首屏加载缓慢。
想要了解更多关于前端技术内容欢迎关注尚硅谷教育!
前端安全相关面试题
前端JS高阶面试题
前端设计模式-面试题
web前端渲染优化
web前端之二叉搜索树
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)