对比分析–浅析SSR(服务端渲染)和SPA(客户端渲染)

一、前言

C端项目重构成首屏服务端渲染(SSR:serve side render),对于重构成SSR,redux不是必须的。本文以vue为栗子的项目。

二、什么是服务端渲染

将组件或页面通过服务器生成html字符串,再发送到浏览器,最后将静态标记”混合”为客户端上完全交互的应用程序。

我以weekly周报的登陆页面为例

对比分析--浅析SSR(服务端渲染)和SPA(客户端渲染)

登陆页没有使用服务端渲染,请求到login页面,返回的body为空,之后执行js将html结构注入到body中,结合css显示出来

我的另外一个vue的nuxt写的ssr渲染的songEagle,首页返回的body是带有html的。

对比分析--浅析SSR(服务端渲染)和SPA(客户端渲染)

三、SSR渲染和客户端渲染的区别

1、SSR渲染的优势:

(1)更利于SEO;

(2)更利于首屏渲染(特别是对于缓慢的网络情况或运行缓慢的设备,内容更快到达)

2、SSR渲染的缺点:

(1)服务器压力大,考虑服务器端负载。

(2)开发条件受限,只会执行到ComponentMount之前的生命周期钩子,引用第三方库不可用其他生命周期钩子,引用库选择产生很大的限制。

(3)学习成本增大,需要学习构建设置和部署的更多要求。

四、耗时比较

1、数据请求

由服务端请求首屏数据,而不是客户端请求首屏数据,这是”快”的一个主要原因。服务端在内网进行请求,数据响应速度快。客户端在不同网络环境进行数据请求,且外网http请求开销大,导致时间差。

对比分析--浅析SSR(服务端渲染)和SPA(客户端渲染)

对比分析--浅析SSR(服务端渲染)和SPA(客户端渲染)

2、HTML渲染

服务端渲染是先向后端服务器请求数据,然后生成完整首屏html返回给浏览器;

客户端渲染是等js代码下载、加载、解析完成后再请求数据渲染,等待的过程页面是什么都没有的,就是用户看到的白屏。

就是服务端渲染不需要等待js代码下载完成并请求数据,就可以返回一个已有完整数据的首屏页面。

对比分析--浅析SSR(服务端渲染)和SPA(客户端渲染)

对比分析--浅析SSR(服务端渲染)和SPA(客户端渲染)

五、原理

相对于SPA,vue增加了一些扩展工具,首先我们来看一下比较重要的一个 工具vue-server-renderer,从名字就知道是在服务端渲染时候调用的

具体实现:

1、创建一个空项目 mkdir vuessr && cd vuessr

2、运行 npm init 进行初始化

3、安装我们需要的依赖 cnpm install vue vue-server-renderer –save

4、创建index.js代码如下:

5、运行 node index.js 可以看到在控制台输出了

  <div data-server-rendered="<span" class="hljs-string">"true">Hello World<<span class="hljs-regexp">/div></span></div>

六、总结

什么是SSR?将组件或页面通过服务器生成html字符串,再发送到浏览器,最后将静态标记”混合”为客户端上完全交互的应用程序。SSR有更利于SEO和首屏渲染,同时也有缺点:服务器压力大,开发条件受限,只会执行ComponentMount之前的生命周期,第三库使用受限,学习成本大。原理是靠vue-server-renderer这个库的createRenderer(),然后调用rendererToString()。

【谢谢关注和阅读,后续新的文章首发:sau交流学习社区:https://www.mwcxs.top/

Original: https://www.cnblogs.com/chengxs/p/11046599.html
Author: saucxs
Title: 对比分析–浅析SSR(服务端渲染)和SPA(客户端渲染)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/544057/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java单例模式推荐写法-双重检测机制实现单例模式

    本文为joshua317原创文章,转载请注明:转载自joshua317博客 https://www.joshua317.com/article/256 Java单例模式推荐写法&#…

    Java 2023年5月29日
    062
  • 线程并发笔记(一)

    三个概念 1、可见性;2、有序性;3、原子性; 一、可见性 并发问题都是程序在不合适的时间读取了不该读取的数据,所以想要透彻弄明白并发实质还是需要看计算机的数据如何存储。计算的存储…

    Java 2023年6月7日
    097
  • poi读excel的空cell时,产生空指针

    背景 昨天,我用poi读取excel时,当读到空的cell时,抛出个空指针异常。但是当我读取别的excel时,即使cell为空,也不抛空指针啊,读出结果为”&#8221…

    Java 2023年6月5日
    067
  • 记一次k8s部署问题

    问题描述 在k8s master节点按步骤创建成功后,执行从节点的加入操作,发现一直超时无法加入 问题日志 [root@node02 kubernetes-1.14]# kubea…

    Java 2023年6月9日
    0176
  • 如何自动化你的Excel导入导出(Java)?

    如遇图片无法显示,请前往掘金查看原文 GitHub | 中文 | English | 博客 为什么使用AutoExcel? Excel导入导出在软件开发中非常常见,只要你接触过开发…

    Java 2023年5月29日
    093
  • PDF转图片,拼接图片

    一、导入PDF处理的包 阿里云仓库搜索icepdf-core依赖,找到合适的版本,导入pom.xml文件。 二、PDF转图片存储 1、读取目标PDF文件; 2、创建Document…

    Java 2023年6月5日
    087
  • mybatis-plus

    mybatis-plus执行 SQL 分析打印 https://gitee.com/baomidou/mybatis-plus-samples/blob/master/mybati…

    Java 2023年5月30日
    091
  • SpringBoot集成knife4j

    前言 项目api编写有文档但是调试麻烦,需要借助postman/apipost等第三方工具,需要在开发框架中内置接口管理及调试功能增加开发便捷性 pom配置 说明,框架使用spri…

    Java 2023年6月15日
    075
  • linux-0.11分析:进程初始化函数init(),第一部分setup((void *) &drive_info) ,第十二篇随笔

    进程的初始化函数, init() 先看看这个函吧: void init(void) { int pid,i; setup((void *) &drive_info); (v…

    Java 2023年6月16日
    081
  • springcloud各种网址

    1.springcloud中文文档: https://springcloud.cc/spring-cloud-dalston.html 2.疑难杂症解决网址 springcloud…

    Java 2023年5月30日
    086
  • ICMP 介绍

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月9日
    057
  • SpringBoot中通过AOP整合日志文件

    1.SpringBoot中通过AOP整合日志文件 1. 导入相关的依赖 org.springframework.boot spring-boot-starter org.sprin…

    Java 2023年6月5日
    097
  • Java 判断URL是否有效

    需要针对一些URL地址进行检测是否可用,使用java.net 下的类来实现,主要用到了 URL和HttpURLConnection 二个类 ,URL 是统一资源标识符的引用,一个U…

    Java 2023年5月29日
    077
  • java 反射: 当Timestamp类型的属性值为null时,设置默认值

    import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.ref…

    Java 2023年5月29日
    064
  • 架构设计之数据分片

    数据分片技术作为目前架构设计中处理大数据的一种常规手段,当前被广泛用于缓存、数据库、消息队列等中间件的开发与使用当中,例如在数据量较大的项目当中,系统的性能瓶颈主要来自于与数据库的…

    Java 2023年6月9日
    074
  • 数据结构笔记—第一篇 数据结构概述

    第一篇数据结构概述 1.数据结构概述 什么是数据结构? 简单来说,就是计算机存储,组织数据的方式;它包含三方面的内容,逻辑关系、存储关系及操作。 记住关键字:存储—&#…

    Java 2023年6月16日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球