MVC即为Model + View + Controller的一种软件架构。View为前端视图,和用户直接打交道的;Model是数据模型,能够理解为数据库持久化存储;Controller即为链接Model和View之间的业务逻辑控制器。javascript
当前端业务逻辑不断扩大···前端数据、业务更加复杂的时候,DOM操做确定会增长若是按照之前的方式直接操做DOM性能会差。因而前端大佬们将数据Model与页面View分离,当数据更新的时候DOM自动更新,若是页面有更新Model也要同步更新,MVVM模式应运而生。在学习软件工程的时候,咱们知道要下降耦合,将Model、View分离也是在解耦操做。前端
MVVM = Model + View + ViewModelvue
MVVM作的是将View与Model之间联系完全剥离,任何数据同步都交由ViewModel处理。对视图的修改以及数据的更新都经过ViewModel实现同步。java
前面说到采用MVVM能够实现双向绑定,减小数据更新频繁时,DOM随之频繁操做的问题。但是当数据更新时,视图的渲染依然须要更新DOM树。DOM很是很是大,若是直接对DOM进行处理性能可能会受影响,因而聪明的FEer想到采用js对象模拟DOM树,也就是虚拟DOM。数据库
固然若是每次视图更新都要渲染整棵DOM树工做量依然很大。因而乎,每次渲染以前对新旧两棵树进行对比diff()
。差别更新到相应的位置。小程序
组件,咱们能够为是一个自定义、可复用的代码段,都有其特定功能。Vue组件也是Vue实例,如header
、footer
。并且,组件间是能够通讯的。微信小程序
单文件组件就是一个vue
文件就是一个组件,一个文件能够导出一个组件。浏览器
data为函数,不一样地方使用这个组件时,可让这个数据私有。缓存
// 若是data不是函数
let component1 = new MyComponent()
let component2 = new MyComponent()
component1.data.title = '123'
// 此时component2的data的title属性也会跟着变化
// 因此两个实例的data必须有本身的域
复制代码
props
传递数据,v-on
,emit
监听/触发自定义事件响应new Vue()
做为EventBus,一个负责$emit
触发事件,另外一个$on
监听事件响应。Vuex
Computed实现原理:不管是属性仍是计算属性都会对应生成一个watcher实例。因此,当其依赖更新时,计算属性会随之更新。微信