服务器端渲染基础

概念

  • 随着前端技术栈和工具链的迭代成熟,前端工程化,模块化成为了当下主流技术方案,在这比技术浪潮中,涌现了诸如Anfular,React,Vue等基于客户端渲染的前端框架,这类框架所构建的SPA单页面应用的优缺点如下
  1. 优点
    1.1 用户体验好
    1.2 开发效率高
    1.3渲染性能好
    1.4可维护性好
  2. 缺点
    2.1 首屏渲染时间长 => 与传统服务器端渲染直接获取服务端直接渲染好的HTML不同,单页面应用使用js在客户端生成HTML来呈现网页内容,用户需要等待客户端js解析执行完才能看到页面,这样就使得首屏加载时间长,从而影响用户体验
    2.2 不利于SEO=>因为当搜索引擎爬虫网站HTML文件的时候,单页面的html是没有内容的,因为它需要通过客户端js解析执行完才能够生成网页内容,而目前的主流搜索引擎对于这一部分内容的抓取还不是很好
  • 为了解决是上面的两个缺陷,业界借鉴了传统的服务器端直出HTML的方案提出在服务器端执行前端框架代码来生成网页内容,然后将渲染好的网页内容返回给客户端,客户端只需要展示就可以了
    在这里插入图片描述
  • 当然,不仅如此,为了更好的用户体验以及页面的交互,同时会在客户端将来自服务端渲染的内容激活为一个SPA应用,也就是说之后的页面中的交互都是通过客户端渲染来进行处理的
    在这里插入图片描述
    同构应用
  • 通过服务端渲染首屏直出,解决SPA应用首屏渲染慢以及不利于SEO问题
  • 通过客户端渲染接管页面内容交互得到更好的用户体验
  • 这种方式通常称之为现代化的服务端渲染,也叫同构渲染
  • 这种方式构建的应用称之为服务端渲染应用或者同构应用

相关概念

  • 什么是渲染
  • 传统的服务端渲染
  • 客户端渲染
  • 现代化的服务端渲染(同构渲染)

什么是渲染

  • 渲染:把数据+模板拼接到一起
    在这里插入图片描述
  • 渲染的本质是字符串的解析替换

传统的服务端渲染

  • 早期的Web页面渲染都是在服务端进行的,服务端在运行的过程中,把所需要的页面数据结合模板渲染的html,然后响应给浏览器,所以浏览器呈现出来的直接就是包含内容的页面
    在这里插入图片描述
  • 以上最重要的是第四步

通过Node.js演示传统的服务器端渲染模式

const express = require("express")
const fs = require("fs")
// 模板引擎实际上就是字符串的替换
const template = require("art-template")
const app = express()
app.get("./", (req, res) => {
  // 1. 获取页面模板
  const templateStr = fs.readFileSync("./index.html", "utf-8");
  // 2. 获取数据
  const data = JSON.parse(fs.readFileSync("./data.json", "utf-8"))
  // 3. 渲染:  数据  +  模板  =  最终结果
  const html = template.render(templateStr, data)
  // 4. 把渲染结果发送给客户端
  res.send(template)
})
app.listen(3000, () => {
  console.log("启动服务器成功")
})

优点:

  • 适用于应用不复杂的页面

缺点:

  • 前后端代码完全耦合在一起,不利于开发和维护
  • 服务端压力大
  • 用户体验一般(想看到其他的页面,必须刷新请求一个新的页面)

客户端渲染

  • 服务器端渲染的缺点随着客户端Ajax技术的普及得到有效的解决
  • Ajax使得客户端动态获取数据成为可能,服务端渲染工作 => 来到的客户端
  • 解决了服务端渲染的问题
  1. 前后端代码完全耦合在一起,不利于开发和维护 => 页面的渲染放到客户端渲染处理,这样的话代码及人员的职责就可以实现划分,也就是说后端只需要负责数据的处理,给前端提供接口,而前端主要负责视图渲染的处理,这样的话我们就能极大提高项目的开发效率及可维护性
  2. 服务端压力大 => 渲染的工作分散到客户端
  3. 用户体验一般 => 传统的服务端渲染,我们要查看不同的页面,那么每个页面都要去完整的刷新,体验不够友好,客户端渲染的话,单页面SPA这种无刷新体验相比传统的服务端渲染体验好很多
  • 客户端渲染的流程
    在这里插入图片描述
  • 后端:负责处理数据接口
  • 前端:负责将接口数据渲染到页面中

客户端解决了服务器端渲染的问题,但也存在一些明显的不足

  • 首屏渲染慢:客户端渲染从服务端返回的是空白的HTML和相关的js代码,只有等js代码完全执行完成后才能看到完整的内容(至少发送两个http请求,html和js),而服务端渲染时直接返回拼接好的HTML(一个http请求)
  • 不利于SEO:因为返回的是空白的HTML,页面的内容是由js代码生成,SEO只会搜索HTML字符串中的内容,不会像浏览器一样去解析js代码,空白的HTML,SEO信息就是空白的

现代化的服务端渲染

前面了解到客户端渲染有两个比较突出的缺点

  • 首屏渲染慢
  • 不利于SEO

解决办法:现代化的服务端渲染 => 同构渲染
同构渲染 = 后端渲染 + 前端渲染

  • 基于React,Vue等框架,客户端渲染和服务器端渲染的结合

    • 在服务器端执行一次,用于实现服务器端渲染(首屏直出)
    • 在客户端再执行一次,用户接管页面交互
  • 核心解决SEO和首屏渲染慢的问题

  • 拥有传统服务端渲染的优点,也有客户端渲染的优点
    在这里插入图片描述
    如何实现同构渲染

  • 使用Vue,React等框架的官方解决方案

    • 优点:有助于理解原理
    • 缺点:需要搭建环境,比较麻烦
  • 使用第三方解决方案

    • React生态的Next.js
    • Vue生态的Nuxt.js
  • 接下来我们以Vue生态中的Nuxt.js为例演示同构渲染应用

同构渲染的问题

  • 开发条件有限

    • 浏览器特定的代码只能在某些生命周期钩子函数中使用
    • 一些外部扩展库可能需要特殊处理才能在服务端渲染应用中运行
    • 不能在服务端渲染期间操作DOM
    • 某些代码操作需要区分运行环境
  • 涉及构建和部署的要求更多
    在这里插入图片描述

  • 更多的服务端负载

    • 在Node中渲染完整的应用程序,相比仅仅提供静态文件的服务器,需要占用大量的CPU资源
    • 如果在高流量环境下使用,需要准备相应的服务器负载
    • 需要更多的服务端渲染优化工作处理

服务端渲染使用建议

  • 首屏渲染速度是否真的重要
  • 是否真的需求SEO
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 服务渲染(Server Side Rendering,简称 SSR)是一种将应用程序的 HTML 和 CSS 部分渲染服务器,再将渲染结果发送给客户的技术。这样做的目的是为了提高首屏加载速度,并且在某些情况下改善 SEO。 传统的客户渲染(Client Side Rendering,简称 CSR)技术中,客户接收到的是一段空白的 HTML 文档,再通过 JavaScript 来动态渲染页面。这种方式对于用户体验来说不够优秀,因为首屏加载需要等待 JavaScript 执行完成。 服务渲染的技术能够解决这个问题,因为客户接收到的是一个完整的 HTML 文档,能够立即呈现。用户在操作页面时,再通过 JavaScript 来完成剩余的渲染和交互。 服务渲染并不适用于所有场景,在选择是否使用 SSR 时需要考虑到应用程序的特定要求和需求。但对于需要提高首屏加载速度和改善 SEO 的应用程序来说,服务渲染是一个不错的选择。 ### 回答2: 服务渲染(Server-Side Rendering,简称SSR)是指在服务动态生成页面内容,然后将渲染好的页面传输给浏览器进行展示的一种网页渲染技术。 传统的客户渲染,即前渲染,是指将数据请求发送给服务,然后由浏览器的JavaScript代码异步获取数据,再将数据和模板进行渲染生成页面。这种渲染方式可以实现灵活的交互效果,但也存在一些问题,如首屏加载较慢、对搜索引擎的SEO不友好等。 而SSR则是在服务生成完整的HTML页面,然后将渲染好的页面返回给浏览器展示。它的主要优点有: 1. 更快的首屏加载速度:由于服务渲染页面时已经生成完整的HTML,用户在打开网页时能够立即看到内容,提高了页面的加载速度和用户体验。 2. 更好的SEO:由于搜索引擎爬虫主要是获取HTML内容进行分析,使用SSR能够保证搜索引擎能够正确的读取页面的内容,提高网站的搜索引擎排名。 3. 更好的可访问性:由于服务渲染生成的页面已经包含了完整的内容和结构,相对于客户渲染,能够更好地支持辅助功能和设备兼容性。 尽管SSR在首屏加载和SEO方面具有很大的优势,但也存在一些限制和挑战。比如对于复杂的交互和动态内容的处理较为复杂,需要更多的服务器负载和带宽资源。此外,SSR还需要考虑页面的缓存策略和更新机制,以保证渲染的页面始终能够与最新的数据保持同步。 总之,服务渲染(SSR)是一种能够提高网页加载速度、改善SEO和可访问性的网页渲染技术。尽管它也有一些限制和挑战,但在某些场景下,特别是对于需要快速首屏加载和SEO友好的网站来说,SSR是一种值得采用的渲染方式。 ### 回答3: 服务渲染(Server-Side Rendering,简称SSR)是指在服务器进行网页内容的渲染,生成完整的HTML页面后再发送给客户的一种网页渲染方式。相对于传统的客户渲染(Client-Side Rendering,简称CSR),SSR具有以下特点: 1. SEO友好:由于搜索引擎爬虫只能解析HTML页面,传统的CSR渲染会导致搜索引擎无法获取到完整的页面内容。而使用SSR时,服务器渲染出的HTML页面包含了完整的内容,有利于SEO优化和搜索引擎收录。 2. 更快的首次加载速度:在CSR中,页面初始化的过程需要先下载基础的HTML结构和JavaScript代码,然后再通过JavaScript请求并渲染数据,这个过程会产生较长的白屏时间。而SSR在服务器就生成了完整的HTML页面,用户首次访问时可以直接加载这个HTML,减少首次加载时间。 3. 更好的用户体验:因为SSR在服务器渲染了完整的HTML页面,用户可以更快地看到网页的基本内容,提升了用户体验。而在CSR中,由于需要等待JavaScript的下载和执行,用户可能会出现闪动的页面或者突然出现的内容,造成用户体验不佳。 4. 兼容性好:由于SSR在服务器渲染,不依赖于浏览器的特定功能或版本,对于不支持JavaScript或禁用JavaScript的浏览器仍然可以渲染出完整的页面。 5. 服务器压力较大:相对于CSR,SSR需要在服务器进行页面渲染,因此对服务器的压力较大,特别是当网站的流量较大时。服务器需要消耗更多的计算资源和内存来渲染页面并返回给客户。 总结来说,服务渲染(SSR)通过在服务器生成完整的HTML页面,提供了更好的SEO友好性、首次加载速度和用户体验,但增加了服务器的压力。它适用于对SEO要求较高、首次加载速度重要的网站。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值