一、vue的理解
Vue 是一套渐进式 JavaScript 应用框架,专注于构建用户界面。它的核心思想是数组驱动和组件化。通过将页面拆分成独立的组件,可以更好地管理代码,提高代码的复用性和可维护性。另外,Vue还提供了 Vuex、Vue Router、Axios 等官方插件,可以进一步扩展 Vue 的功能。
渐进式:逐级递增的意思。声明式渲染 => 组件系统 => 客户端路由 => 大规模状态管理 => 构建工具,需要什么功能就在基础上增加(后面是Vue的生态)。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:blog.csdn.net/qq_38290251…
二、spa
缺点:不利于seo;首页加载慢,白屏时间长,由于html里是先执行空div再执行js渲染出内容
优点 :运行后js都加载好了,切换时仅需调用不同的js,性能体验会比较好
三、为什么需要虚拟Dom
需要虚拟DOM的原因:
- 框架设计
-
数据驱动框架,框架设计时,当数据发生变化时,无法做到数据一变就精准定位到某个DOM元素进行更新,能更新的最小颗粒度是组件,在组件中有多个DOM元素,当有数据变化时就去做全量渲染,更新所有真实DOM元素,效率太低了。
-
js层的操作效率高,可以将DOM操作转换成对象操作,最终再通过diff算法对比差异,真实DOM精准更新,减少对真实DOM的操作。
- 解耦运行环境
- 真实DOM只能运行在浏览器环境,这会限制整个vue框架的运行环境,
- 虚拟DOM的本质是js对象,js对象在各个环境都是可以支持的,
- 虚拟DOM充当了描述界面的作用,告诉环境界面上有啥,具体要怎么渲染出页面可根据不同的环境做不同的渲染工作
- 同一套框架的代码可以移植到不同的环境,为后续多端框架提供了一个基础
四、对组件化的理解
五、diff+组件级watcher
六、响应式数据的理解
七、vue中如何检测数组变化
八、依赖收集
vue2依赖收集: 一个组件在渲染时会创建一个渲染watcher, 在渲染时会调用render方法,而且会把watcher放在全局上(为了可以持续使用),放完后开始页面渲染,会访问一些响应式数据,每个响应式数据会配备一个dep属性,会记住当前在哪个模板中使用,记住当前模块,后面当属性发生变化了可以通过属性对应的dep去通知刚才搜集的watcher重新渲染,这样组件就重新更新了。
九、Vue.set方法是如何实现的
Vue.set是Vue中用于在对象上设置属性并确保新属性是响应式的方法。
实现步骤:
- 开发环境且target 没定义或者是基础类型:报错;
- 处理数组情况: 如果目标是数组,并且键是有效的数组索引,使用splice方法添加新元素以保持响应性。
- 处理已有属性: 如果属性已经存在于对象中,直接赋值。
- 处理vue实例或根数据data:报错
- 处理新属性: 如果目标对象不是响应式对象,直接赋值新属性。
- 添加响应式新属性: 如果目标对象是响应式的,通过 defineReactive 方法将新属性定义为响应式。这包括定义 getter 和 setter。
- 通知依赖更新:调用 ob.dep.notify()通知所有依赖于该对象的 watchers 执行更新。