Vue面试笔记(一)

67 阅读4分钟

1.谈谈你对Vue的理解?

Vue是一套用于构建用户界面的渐进式框架,Vue的核心只关注视图层。

渐进式框架:web应用程序被分解为许多可重用的模块,这样子的模块可以被多个应用程序共享,提高了开发效率,且这种框架不强求开发者一次性集成全部的功能,而是根据实际需要,按需引入使用。比如说vue-router:路由模块,pinia:全局状态管理模块...这些模块完全可以在项目之初不引入使用,如果项目需要再引入使用。

1.1 声明式框架

Vue的核心特定是用起来简单。因为Vue是声明式框架。于是你需要区分声明式框架命令式框架的区别。

声明式代码注重结果,命令式代码关注过程。

// 需求:实现数组内数字的累加
let numbers = [1,2,3,4,5]
let total = 0
// 命令式编程:
for( let i = 0; i < numbers.length; i++ ){
  total += numbers[i]
}
console.log(total)

// 声明式编程:
let total = numbers.reduce( (pre, cur) => {
  return pre + cur
},0)
console.log(total)

从上方的例子可以看出,命令式一步步执行代码实现累加的这个过程,最终获得结果。而声明式编程的思路是通过数组类型封装好的reduce()方法实现累加,获得结果。但是两者的区别显而易见,声明式不关注实现,命令式关注实现的过程。

1.2 MVVM模式

MVVM的起源其实是MVC,而MVC最开始其实是后端的框架。

MVC:M(Model) V(View) C(Controller),采用MVC模式的目的其实是为了划分职责,分层管理。用户请求资源是通过控制层(Controller),控制层要从数据模型(Model)中获取数据,之后反馈给视图层(View)。

MVC模型示意图.png

那么从前端的角度来看MVC模式,前端关注的事情其实就是如何将数据同步到页面上,这其实是借鉴了MVC的思想。

MVVM:其实是MVC模式的改进版。M(Model) - V(View) - VM(ViewModel),ViewModel连接了数据和视图,作为二者之间的桥梁。

Vue的设计借鉴了MVVM模式,但并不全是MVVM模式。

1.3 采用虚拟DOM

传统的项目更新页面会拼接一个完整的字符串innerHTML,之后全部重新渲染。在使用了虚拟DOM之后,相当于添加了一个缓存层,可以比较新旧DOM节点的区别,找到变化的节点进行更新(diff算法)。

1.4 组件化

实现高内聚、低耦合、单向数据流

  • 组件化开发能提高应用的开发效率、测试性、复用性等
  • 降低更新范围,只重新渲染有变化的组件

2.谈谈你对SPA的理解?

2.1 基本概念

  • SPA(Single Page Application)单页应用。一般情况下,Vue和React的项目都只有一个HTML页面,并且只有一个挂载点,最终打包后会在此页面中引入对应资源。也换页面通过监听前端路由的变化渲染对应页面,称为客户端渲染CSR(Client Side Rendering)
  • MPA(Multi Page Application)多页应用。多个HTML页面,每个页面必须重复加载js,css等相关资源。多页应用的页面跳转需要刷新整页资源,称为服务端渲染SSR(Server Side Rendering)

2.2 优缺点

单页应用(SPA)多页应用(MPA)
组成一个主页面和页面组件多个完整的页面
刷新方式局部刷新整页刷新
SEO搜索引擎优化无法实现容易实现
页面切换速度快、用户体验良好切换加载资源速度慢,用户体验差
维护成本相对容易相对复杂

SPA应用虽然体验好,维护成本低,但是首屏白屏时间长,不利于SEO优化。针对这两个问题的解决方法有如下两种:

  • 静态页面预渲染(Static Site Generation)SSG,在打包的时候生成完整的HTML页面,不过这种方式仅适合静态页面网站,变化率不高的王章,比如说企业门户网站这种,像新闻网这种就不适合。
  • SSR + CSR结合的方式。首屏采用服务端渲染的方式,后续的交互采用客户端渲染的方式。 (Nuxt.js)