深度剖析 Vue.js 经典知识点之:SPA、SSR与MVVM

news2024/11/20 18:40:32

SPA

更多精彩内容,请微信搜索“前端爱好者戳我 查看 。‘

谈一谈你对 SPA 单⻚面的理解,它的优缺点分别是什么

SPA( single-page application )仅在 Web ⻚面初始化时加载相应的 HTML、JavaScript 和 CSS。

一旦⻚面加载完成,SPA 不会因为用户的操作而进行⻚面的重新加载或跳转;取而代之的是利用路由机制实现 HTML 内容的变换,UI 与用户的交互,避免⻚面的重新加载。

优点:

  • 用户体验好、快,内容的改变不需要重新加载整个⻚面,避免了不必要的跳转和重复渲染;
  • 基于上面一点,SPA 相对对服务器压力小;
  • 前后端职责分离,架构清晰,前端进行交互逻辑,后端负责数据处理;

缺点:

  • 首屏(初次)加载慢:为实现单⻚ Web 应用功能及显示效果,需要在加载⻚面的时候将JavaScript、CSS 统一加载,部分⻚面按需加载;
  • 不利于 SEO:由于所有的内容都在一个⻚面中动态替换显示,所以在 SEO 上其有着天然的弱势。

SPA 单⻚面应用的实现方式有哪些

前端路由的实现原理。
  • hash 模式
  • history 模式

hash 模式中,在 window 上监听 hashchange 事件(地址栏中hash变化触发)驱动界面变化;

history 模式中,在 window 上监听 popstate 事件(浏览器的前进或后退按钮的点击触发)驱动
界面变化,监听 a 链接点击事件用 history.pushState 、 history.replaceState 方法驱动界面变
化;直接在界面用显示隐藏事件驱动界面变化。

VUE

使用过 Vue SSR 吗?说说 SSR?

SSR – Server Side Renderer

Vue.js 是构建客户端应用程序的框架。默认情况下,可以在浏览器中输出 Vue 组件,进行生成DOM 和操作 DOM。

然而,也可以将同一个组件渲染为服务端的 HTML 字符串,将它们直接发送到浏览器,最后将这些静态标记"激活"为客户端上完全可交互的应用程序。

即:SSR大致的意思就是vue在客户端将标签渲染成的整个 html 片段的工作在服务端完成,服务端形成的html 片段直接返回给客户端这个过程就叫做服务端渲染。

服务端渲染 SSR 的优缺点

服务端渲染的优点:

  • 更好的 SEO: 因为 SPA ⻚面的内容是通过 Ajax 获取,而搜索引擎爬取工具并不会等待 Ajax 异步完成后再抓取⻚面内容,所以在 SPA 中是抓取不到⻚面通过 Ajax 获取到的内容;而 SSR 是直接由服务端返回已经渲染好的⻚面(数据已经包含在⻚面中),所以搜索引擎爬取工具可以抓取渲染好的⻚面;

  • 更快的内容到达时间(首屏加载更快): SPA 会等待所有 Vue 编译后的 js 文件都下载完成后,才开始进行⻚面的渲染,文件下载等需要一定的时间等,所以首屏渲染需要一定的时间;SSR 直接由服务端渲染好⻚面直接返回显示,无需等待下载 js 文件及再去渲染等,所以 SSR 有更快的内容到达时间;

服务端渲染的缺点:

  • 更多的开发条件限制: 例如服务端渲染只支持 beforCreate 和 created 两个钩子函数,这会导致一些外部扩展库需要特殊处理,才能在服务端渲染应用程序中运行;并且与可以部署在任何静态文件服务器上的完全静态单⻚面应用程序 SPA 不同,服务端渲染应用程序,需要处于 Node.js server运行环境;

  • 更多的服务器负载:在 Node.js 中渲染完整的应用程序,显然会比仅仅提供静态文件的 server 更加大量占用CPU 资源 (CPU-intensive - CPU 密集),因此如果你预料在高流量环境 ( high traffic ) 下使用,请准备相应的服务器负载,并明智地采用缓存策略。

如果没有 SSR 开发经验的同学,可以参考一篇 SSR 的实践文章《Vue SSR 踩坑之旅》,里面 SSR 项目搭建以及附有项目源码。

谈一谈你对 MVVM 的理解

传统的服务端 MVC 架构模型:View

  • models 数据模型,专⻔提供数据支持的
  • controllers 控制器模块,处理不同的⻚面请求的或者处理接口请求
  • views 视图文件

核心理念:单一职责,分工协作

优点:

  • 更好的开发效率
  • 更好的可维护性

MVVM 模式常⻅于用于构建用户界面的客户端应用。

MVVM 模型:

字面意义是这样的:

MVVM 是 Model-View-ViewModel 的缩写,MVVM 是一种设计思想。
  • Model 层代表数据模式,也可以在 Model 中定义数据修改和操作的业务逻辑
  • View 代表 UI 组件,它负责将数据模型转化为 UI 展现出来
  • ViewModel 是一个同步 View 和 Model 的对象。

简单理解

前端开发早期的时候都是操作 DOM

后来使用 jQuery 让我们提高了操作 DOM 的效率,但从开发⻆度还是在大量的手动操作 DOM

MVVM 模式让以往手动操作 DOM 的方式彻底解脱了,它不要用户自己操作 DOM,而是将普通数据绑定到 ViewModel 上,会自动将数据渲染到⻚面中,视图变化会通知 ViewModel 层更新数据,数据变化也会通过 ViewModel 层更新视图,因此 MVVM 中最重要的⻆色就是 ViewModel,真正意义上把视图和数据实现了解耦,提高了开发效率

MVVM 模式主要用于构建用户界面的前端应用

  • 微软的 WPF,构建客户端应用的
  • 手机应用,iOS APP、Android App
  • Web 应用

核心:

  • MVVM 模式让我们从繁琐的 DOM 操作中彻底解放了
  • MVVM 也叫数据驱动视图

Vue 中的 MVVM:

用 Vue 中组件代码来表示 MVVM 的话就是这样的:


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

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

相关文章

如何创建springboot项目

SpringBoot 优点 可快速构建spring应用直接嵌入tomcat、jetty、undenrtow服务器(无须部署war文件)提供依赖启动器(starter)简化构建配置极大程度的自动化配置Spring和第三方库提供生产就绪功能,例如指标监控检测、外部…

讯飞星火认知大模型与ChatGPT的对比分析

引言: 人工智能是当今科技领域的热门话题,自然语言处理是人工智能的重要分支。自然语言处理的目标是让计算机能够理解和生成自然语言,实现人机交互和智能服务。近年来,随着深度学习的发展,自然语言处理领域出现了许多创…

桶排序 — 计数排序和基数排序

计数排序 int类型数组,其中存的是员工的年龄。比如说16 - 150。对于这样的数据来讲,数据状况是受限的。此时如果将数组从小到大进行排序,该如果实现? 这个实现很简单,实现一个统计数组范围从 0 ~ 150,遍历原…

UNIX网络编程卷一 学习笔记 第十七章 ioctl操作

ioctl函数传统上一直作为那些不适合归入现有已定义类别的特性的系统接口。POSIX正在通过创建特定的包装函数来代替ioctl函数的某些功能,以取而代之的是那些已被POSIX标准化的函数。例如,Unix终端接口传统上使用ioctl函数访问,而POSIX为终端创…

在idea中创建一个SpringBoot模块

方式一:自动创建(需要联网) 第一步:新建模块 按住ctrlshiftalts,打开项目结构,选择新建模块; 第二步:选择Spring Web (1)选择SpringBoot版本&#xff0c…

WebrtcNode, publish-sdp offer 流程(1)

1. AmqpClient - New message received sdp offer 的消息 AmqpClient - RpcServer New message received {method: onTransportSignaling,args: [aa230ce0863e42baa8bae5c14e91e809,{sdp: v0\r\n o- 2367615733001925388 2 IN IP4 127.0.0.1\r\n s-\r\n t0 0\r\n agroup:BUND…

quickstart Guide快速入门

本文档参考backtrader官方文档,是官方文档的完整中文翻译,可作为backtrader中文教程、backtrader中文参考手册、backtrader中文开发手册、backtrader入门资料使用。 快速入门章节目录 快速入门使用平台从0到100:一步一步的演示基本设置设置现…

C++ set类成员函数介绍 (set和multiset)

目录 🤔set模板介绍: 🤔特点: 🤔set的成员函数: 😊set构造函数: 🔍代码实例: 🔍运行结果: 😊 set赋值函数&#xf…

IMX6ULL裸机篇之I2C相关寄存器

一. I2C实验 I2C时钟选择与传输速率 1. IMX6ULL的 I2C频率标准模式 100kbit/S,快速模式为 400Kbit/S 2. 时钟源选择 perclk_clk_rootipg_clk_root66MHz(由之前的时钟实验章节可以知道是 66MHz)。 二. I2C 寄存器配置 I2Cx_IFDR寄存器&…

《计算机组成原理》唐朔飞 第5章 输入输出系统 - 学习笔记

写在前面的话:此系列文章为笔者学习计算机组成原理时的个人笔记,分享出来与大家学习交流。使用教材为唐朔飞第3版,笔记目录大体与教材相同。 网课 计算机组成原理(哈工大刘宏伟)135讲(全)高清_…

chatgpt赋能python:Python中用什么表示空值?

Python中用什么表示空值? 在Python编程中,我们经常会遇到处理空值的场景。空值通常表示缺失的或未定义的值,这在数据处理和分析中尤其常见。那么,在Python中,究竟用什么来表示空值呢? None 在Python中&a…

6G显存玩转130亿参数大模型,仅需13行命令,RTX2060用户发来贺电

羊驼家族的Alpaca和Vicuna也都能运行,显存最低只需要6G,简直是低VRAM用户的福音有木有。 GitHub上的搭建教程火了之后,网友们纷纷跑来问苹果M2是不是也能跑。 这通操作的大致原理是利用最新版CUDA,可以将Transformer中任意数量的…

什么是先进存力?曙光存储:内铸数字底座,外成实践底气

5月26日,由DOIT联合中国电子学会共同举办的2023数据基础设施技术峰会在苏州举办。中科曙光存储产品事业部副总经理张新凤受邀参会,并在主论坛发表主题演讲,与数百位业内专业嘉宾伙伴共探存力发展未来。 什么样的存力能打造数字经济底座&#…

【笔记】【Javascript】javascript实现继承

前言 之前写过关于面向对象编程的文章,通过阅读别人的博客了解了一下Javascript实现继承的方法,并且使用图画的形式帮助了解,图是自己做的,若有偏差请读者帮忙指出,谢谢。笔记中有些个人理解后整理的笔记,…

基于STM32的ADC采样及各式滤波实现(HAL库,含VOFA+教程)

前言:本文为手把手教学ADC采样及各式滤波算法的教程,本教程的MCU采用STM32F103ZET6。以HAL库的ADC采样函数为基础进行教学,通过各式常见滤波的实验结果进行分析对比,搭配VOFA工具直观的展示滤波效果。ADC与滤波算法都是嵌入式较为…

MySQL进阶- Linux安装 和 索引

目录 Linux安装索引索引的概述索引的结构索引结构的介绍BtreeBtreeHash 索引的分类索引的语法(创建,查看,删除等)SQL性能分析SQL的执行频率(查看SQL的执行频率)慢查询日志show profilesexplain执行计划 索引…

video标签学习 xgplayer视频播放器分段播放mp4

文章目录 学习链接目标video标签自带视频和制作的视频区别video标签的src属性本地视频文件前端代码播放效果 服务器视频文件示例1后端代码前端代码播放效果 示例2后端代码前端代码播放效果 示例3后端配置前端代码播放效果 video对象video对象创建和获取video的属性video的方法v…

chatgpt赋能python:Python模块安装方法全解析

Python模块安装方法全解析 Python是一种功能强大的编程语言,拥有大量的开源库,这些库是在各种应用程序中使用的重要组件,它们能加速开发过程。不管你是初学者、中级者还是高级者,总会遇到需要安装第三方库的情况。但是安装库是一…

《Java并发编程实战》课程笔记(四)

互斥锁 原子性问题到底该如何解决呢? “同一时刻只有一个线程执行”这个条件非常重要,我们称之为互斥。如果我们能够保证对共享变量的修改是互斥的,那么,无论是单核 CPU 还是多核 CPU,就都能保证原子性了。 锁模型 …

Python连接达梦数据库

python如果想连接达梦数据库,必须要安装dmPython。 简介:dmPython 是 DM 提供的依据 Python DB API version 2.0 中 API 使用规定而开发的数据库访问接口。dmPython 实现这些 API,使 Python 应用程序能够对 DM 数据库进行访问。 dmPython 通…