从单页应用(SPA)到服务器渲染(SSR)


情景回顾

在学习Vue开发一个电商网站的管理后台时,使用到了一个组件 vue-quill-editor 主要是一个快捷的一个富文本编辑器

在使用这个组件的组件的时候看到了两种的使用方式分别是SPASSR,技术不够的我,只能面向百度编程,那我们来看看是是吧!

本文分别从两者的概念,主要的不同,优劣势列举等等去分析SPA和SSR。

SPA(Single Page Web Application)[单页面应用程序]

概述

单页Web应用就是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。也就是网页上通过hash(#)的变化来实现推动界面变化,通过不同的组件切换,展示所对应的功能模块,也避免了页面的重新加载

使用SPA的主流框架(MVVM:Model-View-ViewModel)

  1. AngularJS
  2. VueJS
  3. backone
  4. extjs

小知识点

<a href="target">go target</a>
<div id="target">i am target place</div>
<!--
点击a链接,文档会自动滚动到id为target的div区域中,运用在电商网站的楼层跳跃等实际当中
hash除了整个功能还有另一种含义:
指导浏览器行为但是不上传服务器 因为改变URL中的任何一个字符都会使浏览器重新去请求服务器,导致很多已经加载过的资源都会重新请求 简而言之:
[改变#后面的值不触发网页重载,但会记录到浏览器history中去。]
-->

SPA优点

  1. 很好的用户操作,用户不需要刷新页面,整个交互都通过AJAX向服务器发起请求,后通过服务器返回的内容进行下一步的操作
  2. 适合用于前后端分类开发,服务端提供API地址,前端使用对应服务的API地址和对应的请求方式,拿到数据对客户端进行渲染

SPA缺点

  1. 初次加载耗时多

    • 在加载页面显示的时候加载打包文件,如果打包文件较大或者网速慢则用户体验不好,首屏时需要请求一次html,同时还要发送一次js请求,两次请求回来了,首屏才会展示出来。
  2. SEO(搜索引擎优化)不友好

    • 因为搜索引擎只认识html里的内容,不认识js的内容,而单页应用的内容都是靠js渲染生成出来的,搜索引擎不识别这部分内容,也就不会给一个好的排名,会导致单页应用做出来的网页在百度和谷歌上的排名差。使用单页面应用将大大减少搜索引擎对网站的收录。

实现一个简单的基础的SPA

主要通过 onhashchange 事件,所以我们主要监听这个事件的触发即可实现

下面是一个利用$.ajax实现的单页面切换的例子:


window.onhashchange = function(){ //监听hash值变化,实现页面变换
  var hash=window.location.hash;
  changePage(hash);
} function changePage(hash){
  switch (hash) // 通过不同的hash地址路由到对应的页面
  {
  case '#index':
    url='partials/list.html';
    break;
  case '#newpage':
    url='partials/newpage.html';
    break;
  case '#edit':
    url='partials/edit.html';
    break;
  case '#view':
    url='partials/view.html';
    break;
  }   $.ajax({ //根据hash值选择页面
    type:'GET',
    url:url,
    success:function(data){
      main.innerHTML=data; // 服务器拿到响应数据再渲染
     }
  });
}

SSR

那在上面我们已经初步的了解了SPA的一些特别之处还有弊端
那我们再来看看SSR又能够带给我们怎么样的特点呢

SSR: Server-Side Render 服务端渲染

简单的说就是: 服务端直接渲染出HTML字符串模板,浏览器可以直接通过解析该字符串模板显示页面,因此首屏的内容不在依赖JavaScript的渲染!!!

就好像我不需要再通过JS动态切换,而是服务端已经渲染好,我直接拿来就是可以使用

SSR优势

  1. 首屏加载时间:因为是 HTML 直出,浏览器可以直接解析该字符串模版显示页面。
  2. SEO 友好:正是因为服务端渲染输出到浏览器的是完备的 html 字符串,使得搜索引擎 能抓取到真实的内容,利于 SEO。

SSR缺点

  1. 虽然 SSR 能快速呈现页面,但是在 UI 框架(比如 React)加载成功之前,页面是没法进行 UI 交互的。

  2. TTFB (Time To First Byte),即第一字节时间会变长,因为 SSR 相对于 CSR 需要在服务端渲染出更多的 HTML 片段,因此加载时间会变长。

  3. 更多的服务器端负载。由于 SSR 需要依赖 Node.js 服务渲染页面,显然会比仅仅提供静态文件的 CSR 应用需要占用更多服务器 CPU 资源。以 React 为例,它的 renderToString() 方法是同步 CPU 绑定调用,这就意味着在它完成之前,服务器是无法处理其他请求的。因此在高并发场景,需要准备相应的服务器负载,并且做好缓存策略。

总结


SPA:
优点:

  1. 页面之间的切换快
  2. 一定程度上减少了后端服务器的压力
  3. 后端程序只需要提供API,不用管client是手机端还是PC端
    缺点:
  4. 首屏打开很慢,用户首次打开要下载SPA框架及应用程序的代码,然后再渲染页面
  5. 不利于SEO搜索引擎优化

SSR:
优点:

  1. 更快的响应时间,不用等待所有的js都下载完成,浏览器变成现实比较完整的页面
  2. 更好的SEO,我们可以将SEO的关键数据直接在后台就渲染成html,从而保证搜索引擎的爬虫能爬取到关键数据

缺点:

  1. 占用更多的cpu和内存资源
  2. 一些常用的浏览器API无法使用,比如window,document,alert等,如果使用的话需要对运行环境加以判断
  3. 开发调试会比较麻烦,对SPA的一些组件的生命周期的管理会变得复杂,只会执行ComponentMount之前的生命周期,第三库使用受限,学习成本大。

为什么SSR比SPA要快

服务端渲染路线

客户端渲染路线

服务器端渲染会先向后端请求数据,生成完整首屏HTML后返回给客户端

客户端渲染会等待JS下载,解析完之后再向服务器请求数据,等待过程中是什么也没有的,所以会出现首屏白页的情况

参考文档

这些文章都是我在搜索资源时,感觉能够很大程度帮助你理解一些概念,并通过简单的言语能够表达清晰,有需要的可以去查看

从单页应用(SPA)到服务器渲染(SSR)的更多相关文章

  1. Asp .Net Core Spa (二) - 服务器渲染1

    Server Side Rendering 服务器渲染是各 Spa 项目目前很热衷于解决的一个问题,毕竟针对SEO和首次加载优化 .Net Core SPA 服务器渲染 将分为 两篇: 第一篇 主要分 ...

  2. 单页应用SPA做SEO的一种清奇的方案

    单页应用SPA做SEO的一种清奇的方案 网上有好几种单页应用转seo的方案,有服务端渲染ssr.有预渲染prerender.google抓AJAX.静态化...这些方案都各有优劣,开发者可以根据不同的 ...

  3. 单页面(如react,vue)网站的服务器渲染 SSR 之 SEO 大杀器 Rendertron

    单页面网站,比如vue.recat框架的网站,一般都是直接从服务器推送index.html,再根据自身路由通过js在客户端浏览器渲染出完整的html页面. 但是搜索引擎的爬虫可没有这么智能(实际上go ...

  4. 移动前端开发-单页应用(spa)模型

    一门新的技术诞生总会引来一番争议,单页Web应用程序也不例外,其最大的优势在于用户体验,对于内容的改动不需要加载整个页面:对服务器压力很小,消耗更少的带宽,与面向服务的架构更好地结合.使用HTML+C ...

  5. 单页应用SPA的路由

    关于单页应用 单页Web应用(single page web application,SPA),就是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用 ...

  6. 《移动Web前端高效开发实战》笔记4--打造单页应用SPA

    路由是一个单页应用的核心,大部分前端框架都实现了一个复杂的路由库,包括动态路由,路由钩子,组件生命周期甚至服务器端渲染等复杂的功能.但是对于前端开发者而言,路由组件的核心是URL路径到函数的映射,了解 ...

  7. 单页应用SPA开发最佳实践

    最近用vue+vue-router做了个单页应用的项目,页面大概有15个左右.积累了一些开发经验在此做一些记录.本文主要从可维护性方面来考虑SPA的开发实践 全站的颜色定义放在一个less或者scss ...

  8. 基于jQuery/zepto的单页应用(SPA)搭建方案

    这里介绍一个基于jquery或zepto的单页面应用方案,遵循尽可能简单的原则,使大家一目了然,只需配置一个路由,之后完全按照jq日常写法即可完成.可做学习使用,也可修改后用于一些业务逻辑简单的spa ...

  9. 以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题

    以前都是开始一段废话的,现在直接进入主题,首先介绍一下一些概念: 单页应用: 优点: 具有桌面应用的即时性.网站的可移植性和可访问性. 用户体验好.快,内容的改变不需要重新加载整个页面,web应用更具 ...

随机推荐

  1. volatile 关键字精讲

    1.错误案例 通过一个案例引出volatile关键字,例如以下代码示例 : 此时没有加volatile关键字两个线程间的通讯就会有问题 public class ThreadsShare { priv ...

  2. [从源码学设计]蚂蚁金服SOFARegistry 之 服务注册和操作日志

    [从源码学设计]蚂蚁金服SOFARegistry之服务注册和操作日志 目录 [从源码学设计]蚂蚁金服SOFARegistry之服务注册和操作日志 0x00 摘要 0x01 整体业务流程 1.1 服务注 ...

  3. C#扫盲篇(四):.NET Core 的异步编程-只讲干货(async,await,Task)

    关于async,await,task的用法和解释这里就不要说明了,网上一查一大堆.至于为啥还要写这篇文章,主要是其他文章水分太多,不适合新手学习和理解.以下内容纯属个人理解,如果有误,请高手指正.本文 ...

  4. 【Java基础】Java9 新特性

    Java9 新特性 模块化系统 Java 和相关生态在不断丰富的同时也越来越暴露出一些问题: Java 运行环境的膨胀和臃肿.每次 JVM 启动的时候,至少会 30-60MB 的内存加载,主要原因是 ...

  5. Netty中使用的设计模式

    创建型 简单工厂 public class DefaultThreadFactory implements ThreadFactory { @Override public Thread newThr ...

  6. SAP下载文档为乱码

    通过事物WE60下载的文档为乱码,主要原因是编码格式的不匹配,通常默认的编码格式为ANSI编码,那么我们需要将源码的编码格式转换成UTF-8,这样问题可以解决了.   附:编码格式介绍 不同的国家和地 ...

  7. 给dtcms增加模板自动生成功能

    作为dtcms的使用者你是不是像我一样,也在不停的修改模板之后要点击生成模板浪费了很多开发模板的时间? 那就跟我一起给dtcms增加一个开发者模式,当模板修改完成之后,直接刷新页面就能看到效果,而不再 ...

  8. JVM虚拟机基础

    JVM 全称Java Virtual Machine,也就是我们耳熟能详的Java 虚拟机.它能识别.class 后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作. Ja ...

  9. Python Debug工具

    最近在github上冒出了一个python的debug神器PySnooper,号称在debug时可以消灭print.那么该工具有哪些优点呢,如何使用该工具呢.本文就介绍该工具的优缺点和使用方式. 前言 ...

  10. Spring Security,没有看起来那么复杂(附源码)

    权限管理是每个项目必备的功能,只是各自要求的复杂程度不同,简单的项目可能一个 Filter 或 Interceptor 就解决了,复杂一点的就可能会引入安全框架,如 Shiro, Spring Sec ...