面试 Vue 框架八股文十问十答第四期

面试 Vue 框架八股文十问十答第四期

作者:程序员小白条个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1) Vue 模板编译原理

Vue 的模板编译原理主要包括以下几个步骤:

  • 模板解析: 将模板字符串解析成 AST(抽象语法树)。
  • 优化静态内容: 遍历 AST,找到静态节点并标记,这样在更新时可以跳过静态节点的比对和更新。
  • 生成渲染函数: 将 AST 转换为渲染函数,渲染函数是一个函数,它返回 VNode(虚拟节点)。
  • 运行时渲染: 当组件的状态发生变化时,执行渲染函数生成新的 VNode,与旧的 VNode 进行比对,然后更新视图。

2)Vuex 的原理

Vuex 是 Vue.js 的状态管理库,其原理包括:

  • State: 单一状态树,即应用的所有状态保存在一个对象中。
  • Mutation: 更改状态的唯一途径是提交 mutation,它是一个包含 type 字符串的对象,通过 commit 方法提交。
  • Action: Action 提交的是 mutation,而不是直接变更状态,可以包含异步操作。
  • Getter: 允许组件从 Store 中获取状态,类似计算属性。

Vuex 将状态集中管理,通过一定的规则保证状态的一致性,使得状态的变更可追踪且易于调试。

3)Vuex 中 action 和 mutation 的区别

  • Mutation: 用于同步修改状态的方法,直接改变状态。Mutation 是 Vuex 中的基本操作,但是它不能包含异步操作。
  • Action: 用于提交 mutation,可以包含异步操作。Action 提交 Mutation,而不是直接更改状态。通过 Action 可以将异步逻辑和业务逻辑从组件中抽离,使得代码更清晰和可维护。

4)Vuex 和 localStorage 的区别

  • Vuex: 是 Vue.js 的状态管理库,用于集中管理应用的状态。状态是响应式的,通过 mutation 修改,组件可以通过 getter 获取状态。主要用于管理组件之间共享的状态。
  • localStorage: 是浏览器提供的本地存储机制,用于在浏览器端存储键值对。它是持久化的,数据存储在客户端,即使刷新页面或关闭浏览器仍然可以保留。

主要区别在于用途和作用范围。Vuex 用于管理应用的状态,而 localStorage 主要用于在浏览器端存储数据,它们解决了不同层面的问题。

5)对虚拟 DOM 的理解

虚拟 DOM(Virtual DOM)是一种编程概念,通常用于优化页面的渲染性能。

  • 虚拟 DOM 是一个 JavaScript 对象: 它是真实 DOM 的轻量抽象,包含了真实 DOM 树的层次结构及其属性。
  • DOM 操作开销大: 直接操作真实 DOM 可能会引起大量的重排和重绘,影响性能。
  • 差异计算: 通过比较两个虚拟 DOM 树的差异,找出最小变更,然后只对真实 DOM 进行必要的更新,以提高性能。
  • 框架使用虚拟 DOM: 许多前端框架(如React、Vue)使用虚拟 DOM 来实现高效的页面更新。

虚拟 DOM 提供了一种更高效的方式来管理页面的更新,通过差异计算和最小更新,减少了对真实 DOM 的频繁操作,提高了应用的性能

6)虚拟 DOM 就一定比真实 DOM 更快吗

当涉及虚拟 DOM 与真实 DOM 的速度对比时,情况并不是绝对的。虚拟 DOM 能在特定情况下提高性能,但并不总是比真实 DOM 更快。

  • 虚拟 DOM 的优势:
    • 批量操作: 虚拟 DOM 可以批量更新,减少直接操作真实 DOM 时的重绘和重排。
    • 差异计算: 虚拟 DOM 通过 diff 算法比较差异,最小化真实 DOM 的更新。
    • 跨平台性: 可以在不同环境中使用,如服务器端渲染和本地渲染。
  • 真实 DOM 的优势:
    • 简单: 直接操作真实 DOM 时,有时可以更快速和直接。
    • 小规模应用: 在小型应用中,直接操作真实 DOM 可能更为简单且性能良好。

7)虚拟 DOM 的解析过程

  1. 创建虚拟 DOM 树: 将应用中的真实 DOM 结构转换为虚拟 DOM 树。
  2. 更新虚拟 DOM: 当状态改变时,生成新的虚拟 DOM 树。
  3. Diff 算法: 比较新旧虚拟 DOM 树,找到节点变化的部分。
  4. 生成差异补丁: 根据差异生成补丁(Patch)。
  5. 应用补丁到真实 DOM: 将补丁应用到真实 DOM 上,更新发生变化的部分。

8)DIFF 算法原理

Diff 算法是虚拟 DOM 实现性能优化的关键。其原理:

  1. 同级比较: 只对比同层级节点,不会跨层级比较。
  2. 节点类型比较: 首先比较节点类型,如果不同直接替换,不再深入比较子节点。
  3. 节点属性比较: 对比节点属性,更新发生变化的属性。
  4. 子节点比较: 对比子节点,采用递归方式继续比较。
  5. 标记变化: 找出节点变化并标记,然后将这些变化更新到真实 DOM 上。

9)SSR 了解吗

SSR(Server-Side Rendering,服务器端渲染)是将 Vue 或 React 组件在服务器端预先渲染成 HTML,并将其发送给客户端,有利于 SEO、首屏加载性能等。通过在服务器上执行组件渲染,将渲染好的 HTML 作为初始页面返回给浏览器,加速页面加载。

10)hash路由和history路由实现原理说一下

  • Hash 路由: 使用 URL 中的 hash(#)部分来作为路由的实现方式。当 hash 发生变化时,页面不会重新加载,而是触发 hashchange 事件,JavaScript 可以监听这个事件来实现路由变化。
  • History 路由: 使用 HTML5 的 History API,如 pushState 和 replaceState,允许修改浏览器历史记录栈的条目而不引起页面刷新。当路由发生变化时,使用 History API 更新 URL,然后通过 popstate 事件来监听路由变化。

主要区别在于实现方式和对浏览器历史记录的管理,Hash 路由依赖于 URL 中的哈希部分,而 History 路由使用更现代的浏览器 API。

相关推荐
腾讯TNTWeb前端团队1 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
uhakadotcom5 小时前
视频直播与视频点播:基础知识与应用场景
后端·面试·架构
范文杰5 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪5 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪5 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy6 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom6 小时前
快速开始使用 n8n
后端·面试·github
uhakadotcom6 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom6 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom6 小时前
React与Next.js:基础知识及应用场景
前端·面试·github