什么是前端渲染?什么是服务端渲染?两者区别及应用场景

什么是前端渲染?什么是服务端渲染?两者区别及应用场景,第1张

举个商品列表页面为例子。

前端渲染:说的应该是刚进入页面时,商品列表这些数据都不给你,不会渲染出这些数据。然后加载script时,再用ajax或者fetch之类的发起了请求另一个接口,服务端返回了商品列表的json数据给你,你在js中用模板引擎之类的技术,把这些数据拼成html字符串插入到Dom里。

服务端渲染:服务端用php的smarty模板或者java的jsp,把页面的商品列表信息渲染出来了,返回一个html给浏览器了。

区别:如果页面要求被蜘蛛抓取,前端渲染的数据就不能被抓取到,但是服务端渲染的页面就能被抓取到。如果有SEO要求,只能用服务端渲染。如果用Node.js渲染的话,那就都没这些问题了。

本文主要介绍 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 同时支持对服务端和客户端包大小的分析


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/713698.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-07
下一篇2023-08-07

发表评论

登录后才能评论

评论列表(0条)

    保存