【Nuxt】01 什么是SSR 服务端渲染

news2024/11/19 3:37:26

前言

在当前的前端开发工作中,我们见到最多的三种渲染方式,如下:

  • CSRClient Side Rendering,客户端(通常是浏览器)渲染;
  • SSRServer Side Rendering,服务端渲染;
  • SSGStatic Site Generation,静态网站生成;

其中CSR在前端开发工作中最为常见,有SEO需求时会考虑SSR\SSR,但SEO时SSR效果更好,所以接下来大致说明一下CSR、SSR。

1 什么是浏览器端渲染 CSR

浏览器端渲染CSRClient Side Render的简称,页面上的内容是我们加载的 js 文件渲染出来的,js 文件运行在浏览器上面,服务端只返回一个html模板。简单的理解就是,服务器端不负责解析页面的文档结构,服务器端把 js 、css、images 等静态资源一次性给客户端,客户端通过 js 生产虚拟 DOM 结构树,再通过 axios 请求需要的数据渲染到页面中展示内容,实现了前后端分离。

咱们平常使用 vue 构建的 SPA 应用都是浏览器端渲染,Vue 应用原始的 HTML 页面 body 标签中只有一个 id 为 app 的节点, DOM 结构是通过 MVVM 模型中 VM 构建虚拟 DOM ,构建完成后再 mouted 到咱们的页面上。随后,根据业务需求发出 axios 请求,再根据 Diff 算法对新的数据,按需渲染更新页面。

在这里插入图片描述
在这里插入图片描述

2 什么是服务端渲染 SSR

服务端渲染 SSRServer Side Render 的简称,页面上的内容是通过服务端渲染生成的,浏览器直接显示服务端返回的html就可以了。简单的理解就是,将组件或页面通过服务器生成html字符串,再发送到浏览器客户端直接展示内容。

咱们经常提到的前后端混合开发模型 MVC 模型,比如:PHP 的 ThinkPHP 框架、java 的 Spring MVC 框架,这些框架都会直接对应一个解析引擎(我们也经常称作为:模板引擎),比如:PHP Smarty、java JSP 。这些解析引擎的解决思路也很相似,都是在传统的网页 HTML(标准通用标记语言的子集)文件 ( .htm, .html ) 中插入PHP 或者 java 程序段,从而形成 View 视图文件,这些程序片段会被 服务端 解析后形成完整的 html 文件,再发布到客户端进行显示。

PS:MVC 模式是开发者经典模式,其中 M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是将 M 和 V 的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View 的定义比较清晰,就是用户界面,咱们前端工程师的工作核心也就是在此。

在这里插入图片描述
在这里插入图片描述

2.1 使用SSR的利弊

追根溯源,早期咱们 Web 开发程序员是没有前后端明确概念这么一说的,在 jQuery 的时代,直接操作 DOM,前端开发都是 SSR 的,服务端通过 assign、show 等方式将数据注入到模板中,再解析成目标 html 后进行发布。后续React、Vue出现后,整合了dom操作,SPA应用大行其道。俗话说,天下大势,分久必合,合久必分啊,但一些官网,SSR 的需求还是仍然须在的。

2.2 SSR的优势
  1. 更利于SEO。
    不同爬虫工作原理类似,只会爬取源码,不会执行网站的任何脚本(Google除外,据说Googlebot可以运行javaScript)。使用了Vue、React或者其它MVVM框架之后,页面大多数DOM元素都是在客户端根据 js 动态生成,可供爬虫抓取分析的内容大大减少(如图一)。另外,浏览器爬虫不会等待我们的数据完成之后再去抓取我们的页面数据。服务端渲染返回给客户端的是已经获取了异步数据并执行 JavaScript 脚本的最终HTML,网络爬虫就可以抓取到完整页面的信息。

  2. 更利于首屏渲染
    首屏的渲染是 node 发送过来的 html 字符串,并不依赖于 js 文件了,这就会使用户更快的看到页面的内容。尤其是针对大型单页应用,打包后文件体积比较大,普通客户端渲染加载所有所需文件时间较长,首页就会有一个很长的白屏等待时间。

2.3 SSR的局限
  1. 服务端压力较大
    本来是通过客户端完成渲染,现在统一到服务端 node 服务去做。尤其是高并发访问的情况,会大量占用服务端CPU 资源;

  2. 开发条件受限
    在服务端渲染中,只会执行到组件beforCreatecreated生命周期钩子,因此项目引用的第三方的库需要考虑当前库是否支持ssr;

  3. 学习成本相对较高
    除了对 webpack、Vue、React 这些客户端的逻辑要熟悉,还需要掌握 node、Koa2 等相关服务端技术,前后端的技术界限被模糊化,相对于客户端渲染,项目构建、部署过程更加复杂。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1046762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何一键提取微信背景图?

微信图文中的背景图,就像室内装修中的墙纸。使用不同颜色、图案的背景图能让文章更有质感,更立体,能给读者带来不一样的视觉体验。那看到其他公众号用的背景图很好看,自己也想用,怎么办?(以速排…

国货疯抢流量,B站接连爆发800万播放实现破圈

近日,“79元商战”的消息洗刷全平台,众多国货品牌的“不容易”开始被越来越多的消费者注意到,消费者们自发性地开始重新审视真正做产品的国货品牌们,并为之全力支持。有网友笑称:这“泼天的富贵”终于落到了国货品牌的…

软信天成:元数据的干货分享!建议点赞收藏

元数据(Metadata)为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。简单来讲,元数…

golang工程——grpc一元请求与流请求

唉,难顶,像块砖一样到处搬。又跑去golang技术栈的项目俩月 本篇博客多有参考,记录一下近期学习 rpc、grpc原理 grpc 是一项进程间通信技术,可以用来连接、调用、操作和调试构建分布式程序,调用过程如同调用函数一样&…

【剑指Offer】77.按之字形顺序打印二叉树

题目 给定一个二叉树&#xff0c;返回该二叉树的之字形层序遍历&#xff0c;&#xff08;第一层从左向右&#xff0c;下一层从右向左&#xff0c;一直这样交替&#xff09; 数据范围&#xff1a;0≤n≤1500,树上每个节点的val满足 ∣val∣<1500 要求&#xff1a;空间复杂度…

深入浅出DAX:SELECTEDVALUE()

深入浅出DAX&#xff1a;SELECTEDVALUE() SELECTEDVALUE()&#xff0c;如果筛选 columnName 的上下文后仅剩下一个非重复值&#xff0c;则返回该值。否则返回alternateResult&#xff0c;语法如下&#xff1a; SELECTEDVALUE(<columnName>[, <alternateResult>] …

CorelDRAW Graphics Suite2023绿色中文版本下载教程

CorelDRAW Graphics Suite2023版是领先的一体化软件包&#xff0c;它包括多个程序&#xff0c;如CorelDRAW、Corel PHOTO-PAINT、Corel CAPTURE、Corel Font Manager、Duplexing Wizard等&#xff0c;可全部安装&#xff0c;也可根据实际需要选择进行安装&#xff0c;都是最新版…

敏捷发布列车初探2 ---- Agile Release Train

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 敏捷发布列车二、ART的特性2.敏捷团队为列车提供动力3.与共同节奏保持一致4.关键角色启用 三、ART的责任总结 敏捷发布列车 敏捷发布列车&#xff08;ART&#xff…

PHP生成二维码带图标代码实例

PHP生成二维码带图标代码实例&#xff08;PHP QR Code二维码生成类库&#xff09; public static function png($text, $outfilefalse, $levelQR_ECLEVEL_L, $size3, $margin4, $saveandprintfalse) { $enc QRencode::factory($level, $size, $margin); return $enc->…

IP地址证书:保护网站安全的重要措施

首先&#xff0c;我们需要了解什么是IP地址证书。IP地址证书是一种专门用于公网IP地址验证的数字证书&#xff0c;它主要用于解决IP地址明文传输的安全隐患和加密传输的问题。那么IP地址证书是如何保护网站的&#xff1f; 1&#xff0c;身份验证 IP地址证书用于对网站进行身份…

mysql workbench常用操作

1、No database selected Select the default DB to be used by double-clicking its name in the SCHEMAS list in the sidebar 方法一&#xff1a;双击你要使用的库 方法二&#xff1a;USE 数据库名 2、复制表名&#xff0c;字段名 3、保存链接

Swift data范围截取问题

文章目录 一、截取字符串的几种方法1. 截取前几位2. 截取后几位3. subData4. 下标截取 二、subData(in:) 报错 EXC_BREAKPOINT 一、截取字符串的几种方法 1. 截取前几位 mobileID.prefix(32)2. 截取后几位 mobileID.suffix(3)3. subData data.subdata(in: 0..<4)4. 下标…

港科夜闻|香港科技大学颁授荣誉大学院士予六位杰出人士

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科技大学颁授荣誉大学院士予六位杰出人士。他们分别为陈晓峰先生、郑志刚博士、冯英伟先生、李慧诗女士、姚珏女士及叶毓强教授(按姓氏英文字母排序)。荣誉大学院士颁授典礼由香港科大校董会主席沈向洋教授和香港科大…

开发APP的费用是多少

开发一款APP的费用可以因多种因素而异&#xff0c;包括项目的规模、功能、复杂性、技术选择、地理位置等。北京是中国的大城市&#xff0c;APP开发的费用也会受到北京的物价水平和市场竞争的影响。以下是一些可以影响APP开发费用的因素&#xff0c;希望对大家有所帮助。北京木奇…

Codeforces Round 889 (Div. 2)A~C1题解

A. Dalton the Teacher 题目分析&#xff1a; 模拟&#xff0c;写出两个就能找出规律&#xff1a;坐在自己位子上的小孩会不高兴&#xff0c;所以统计下来cnt 发现cnt为奇数是(cnt1)/2次就能换成要求&#xff0c;偶数就是cnt/2 #include<bits/stdc.h> #pragma GCC op…

Silicon labs BG22蓝牙开发记录(一)

本篇内容适用初学者使用&#xff0c;主要介绍如何快速了解Siliconlabs EFR32BG22蓝牙芯片相关的软件资源和硬件资源&#xff0c;结合了我作为FAE 支持的一些个人看法&#xff0c;便于使用者快速入门&#xff0c;加速你们的产品实施。 本系列分为&#xff1a; Siliconlabs BG22…

世界前沿技术发展报告2023《世界信息技术发展报告》(一)世界信息技术及产业发展重要动向

&#xff08;一&#xff09;世界信息技术及产业发展重要动向 1. 概述2. 半导体技术水平持续进步&#xff0c;行业内部开始新一轮调整2.1 全球主要经济体加强半导体技术能力建设&#xff0c;推动厂商扩产2.2 先进制程技术持续发展&#xff0c;先进封装技术崭露头角2.3 消费电子半…

幸存者偏差

幸存者偏差&#xff08;英语&#xff1a;survivorship bias&#xff09;&#xff0c;另译为“生存者偏差”&#xff0c;是一种认知偏差。其逻辑谬误表现为过分关注于目前人或物“幸存了某些经历”然而往往忽略了不在视界内或无法幸存这些事件的人或物。 幸存者偏差最早来源于第…

品牌出海的关键步骤:市场定位与创新营销

现如今越来越多的企业开始将目光投向海外市场&#xff0c;寻求品牌出海的机会。品牌出海是指企业将自身品牌拓展至海外市场&#xff0c;通过进军国际市场来实现增长和发展。然而&#xff0c;面对不同的文化、市场环境和消费者需求&#xff0c;成功的品牌出海需要制定有效的策略…

apifox怎么测试API,你学会了吗?

背景 由其他的team做的项目&#xff0c;配置到一个新的环境下。由于项目需要与别的公司的项目接连&#xff0c;所以需要创建公开的API接口&#xff0c;利用apifox来进行测试&#xff08;postman&#xff0c;jmeter都可以&#xff09;。此次利用apifox来创建测试API接口的测试 …