2 「武装思想」- React SSR vs SSR vs CSR

CSR(SPA) 优缺点

页面之间的跳转不会刷新整个页面,而是局部刷新,体验上有了很大的提升。

单页应用中,只有首次进入或者刷新的时候才会请求服务器,只需加载一次js css资源,页面的路由维护在客户端,页面间的跳转就是切换相关的组件所以切换速度很快,另外数据渲染都在客户端完成,服务器只需要提供一个返回数据的接口,大大降低了服务器的压力。

所以后来就有了 web app的叫法,也是为了突出这种体验很像是Native App

SPA这种客户端渲染的方式在整体体验上有了很大的提升,但是它仍然有缺陷 - 对 SEO 不友好,页面首次加载可能有较长的白屏时间。

SSR VS CSR(SPA)


找了很久才找到这个图,相信看过之后就明白了。

下面这张图,是同一个应用,用两种不同的方式去渲染时页面的加载时序。

  • 橙色部分为页面背景色,对应了常规意义上的白屏时间

可以看到,从内容可见的时间上,SSRCSR更快。

这是由于 SSR 的工作原理,决定了它的优势,这种差异在弱网环境下会体现的更加明显。

SPA(客户端渲染) 方式比 SSR (服务端渲染) 模式在体验和性能上有了很大的提升。

SPA 好处有很多,但缺点也很明显。

SEO 不够友好:有些网站的流量来源主要还是靠搜索引擎,所以网站的 SEO 效果 还是很重要的,而 SPA 模式页面数据非直出,搜索引擎爬虫拿不到具体的数据,所以无法对网站的内容进行识别和分类,得不到网站的关键词和描述信息,就无法进行排名,甚至不会被收录。结果就是在搜索引擎里搜不到你的站点。

首次白屏等待:在 SPA 模式下,第一次打开页面我们得到的是一个html 框架,不包含内容。数据的渲染需要等待页面js css资源加载完成,且执行时再发起异步数据请求,然后等数据返回后,再进行渲染,渲染完成后用户才能看到最终的页面。

这样做会直接降低页面的首屏展现时间,也就是“白屏”等待,这个时间的长短和客户端的网络环境也密切相关,可能长也可能短,特别是在移动互联网环境下,对首屏加载性能影响很大。对于用户来说,当然是想更快的看到内容。

React SSR


到这里我们已经了解了 SSRCSR 的概念以及优缺点。它们自身的亮点很多,但是瑕疵也很多。

SPA 模式下,虽然体验上来了,也降低了服务端的压力。但是还不算完美,仍有缺陷。

那么有没有一种完美的方式呢?

既然发现了问题,那就要想办法解决这个问题。

我们先来分析下。

确定问题:其实就两个问题

  • SEO不友好

  • 首次白屏等待。

以上两个问题是在传统 SSR 模式下是不存在的,因为服务端会直接返回完整的html数据。

所以如果要解决这个问题我们只能让数据直出 SSR 了。

但如果这样做的话,SPA 的优势就没有了,技术上没有任何进步。

SSR + SPA 完美的结合

只实现 SSR 没什么意义,技术上没有任何改进,否则 SPA 技术就不会出现。

但是单纯的 SPA 又不够完美,所以最好的方案就是这两种技术和体验的结合。

第一次打开页面是服务端渲染,基于第一次访问,用户的后续交互是 SPA 的效果和体验,于此同时还能解决SEO问题,这就有点完美了。

单纯实现 SSR 很简单,毕竟这是传统技术,且和语言无关,随便用 phpjspaspnode 等都可以实现。

下面用 node 实现一个基本的 ssr

  1. 创建一个 node 服务

  2. 模拟数据请求方法 fetchData

  3. fetchData结果转换为 html 字符串

  4. 输出完整的 html 内容

效果如下

const http = require(‘http’);

//模拟数据的获取

const fetchData = function () {

return {

list: [{

name: ‘包子’,

num: 100

},

{

name: ‘饺子’,

num: 2000

}, {

name: ‘馒头’,

num: 10

}

]

}

}

//数据转换为 html 内容

const dataToHtml=(data)=>{

var html=‘’;

data.list.forEach(item=>{

html += <div>${item.name}有${item.num}个</div>

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

Vue

  • 什么是MVVM?

  • mvvm和mvc区别?它和其它框架(jquery)的区别是什么?哪些场景适合?

  • 组件之间的传值?

  • Vue 双向绑定原理

  • 描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?

  • 虚拟 DOM 实现原理

  • Vue 中 key 值的作用?

  • Vue 的生命周期

  • Vue 组件间通信有哪些方式?

  • vue 中怎么重置 data?

  • 组件中写 name 选项有什么作用?

  • Vue 的 nextTick 的原理是什么?

  • Vuex 有哪几种属性?

    开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

vue 中怎么重置 data?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值