Vue 的原理分析 MVVM的理解

 今天参去参加了面试,其中问了许多关于MVVM设计模式的探讨,还有关于Vue框架的一些之事,总结一下;

MVC:model 数据层 可以理解为ajax调取过来的一些数据; view 视图层 理解为html 静态的呈现。 controller js 控制层 数据层和视图层的连接层面。
MVVM :MV viewmodel 双向数据绑定 通过MV的交互 来实现model 与view 的响应处理。
vue 是一个渐进式的框架,采用的是一个自底向上的开发模式,渐进式:主张最少,
主流框架分析
我们看一下现有的一些主流框架从少到多所解决的问题。这个多少并不是来评价框架的好坏,而是从设计的角度出发看它涵盖多少内容。

纯模板引擎:最少的就是纯模板引擎,只管状态到界面的映射。

React和Vue:其实这两者都是非常专注的只做状态到界面映射,以及组件。

Backbone:它会给你多一些架构上指导,比如它会让你分层。

Angular:它做的事情就更多,它有自己的路由,这些都会包含在里面。

Ember:相比Angular,Ember做得就更加彻底,Ember信奉的是约定优于配置,它会将一切都帮你设计好打包好,你就开箱用就可以了。

Meteor:Meteor只是一个极端,它是从前到后全都包含,从前端到数据层到数据库,全都帮你打包好。

通过简单的分析,我们可以感受到,做得少的框架不一定就不如做得多的框架,这体现出一种取舍。也就是说,做得少的框架可以给你更多的灵活性,但你需要做更多的选择;做得多的框架有更强的侵入性,学习成本更高,灵活性更低。一旦选择了一个侵入性强的框架,那么一些小的部分你就没有机会去切换成其他你更想用的方案。

所以,React和Vue有一个共同特点,它们都有各自的配套工具,核心虽然只解决一个很小的问题,但它们有生态圈及配套的可选工具,当你把他们一个一个加进来的时候,就可以组合成非常强大的栈,就可以涵盖其他的这些更完整的框架所涵盖的问题。
给大家一个参考的连接:
https://www.zhihu.com/lives/846356429794336768/audition-messages
Vue的作者给我们的一些启发。

在关心一下:具体的vue实现
最重要的VM 利用了ES6的一些新特新,采用了声明式编程(Declarative Programming)替代了过去的类jquery的命令式编程(Imperative Programming)。利用ES6 的一些新特性
Object.defineProperty 给每个属性设置setter()和getter(),每一值的变动就会对应引起其他的变动,就实现了VM 这个和angular 的脏循环还有所出入。
另一个重要的是虚拟DOM,这一点vue和react采用的方案都差不多, 不过react的运行速度要比vue快很多, 由于原生的dom节点用不到的属性太多了(document.createElement创建的)要是遍历这个东西的话太耗费性能, 所以就有了虚拟dom, 虚拟dom是用javascript对象模拟的, 其中只包含用的到的属性, 所以进行遍历对比的时候就要快很多, 由于vue在数据变动的时候就要更新页面, 但是vue不知道具体什么东西变化了, 所以只能是把变化的属性关联的东西都从新渲染一下, 这个渲染并不是吧原来的东西删了在新创建一个, 而是把新的数据组装成的虚拟dom和原来渲染过的虚拟dom进行一个对比, 把差异的地方渲染到页面上, 这个对比的过程就叫diff算法

猜你喜欢

转载自blog.csdn.net/weixin_41686779/article/details/83793745