问:我们在使用Vue时,实际上干了什么?
 
答:实际上只干了一件事——new了一个Vue对象。后面的事,都交由这个对象自动去做。就好像按了下开关,机器跑起来了,剩下的事就不用我们再操心了。
 
各位看官先别不服,FEer在基于Vue开发项目时,确实写了很多代码,但本质上,这些代码都是在往这台机器的固定工作程序上添加自定义的行为。譬如说,一个组件被初始化时,其created生命周期钩子一定会被执行,我们可以做的只是填写具体的执行内容,至于这些内容何时被真正执行,是完全由Vue对象控制的,开发者无从插手。
 
为什么这样设计呢?根本原因是前端项目越来越复杂,传统的开发方式显得力不从心。举个例子,用jQuery时,我们自己操作DOM;用Vue时,我们不再亲自操作DOM,而是让Vue去做。我们之所以愿意把DOM管理权让渡给Vue,因为这本就是个脏活累活,随着前端项目规模迅速增长,手动管理DOM的难度、出错率和对性能的影响都在急剧升高,以至于手动管理显得不现实,必须应用一套自动化的管理方式。
 
什么叫自动化的管理方式?
 
DOM本质上是数据的呈现,或者说是数据映射成的视图。当然,严格地说,DOM本身也只是一种描述用户界面的模型,最终的呈现是由浏览器在解析DOM后完成的,但在前端语境下,可以把DOM与视图等同。
 
所以前端程序的核心任务是:达成数据与视图之间的映射
 
用jQuery时,映射是我们亲自做的,比如说有一个name需要展示出来,我们就创造一个div,把name放在div里,然后把div挂载到DOM树上;但用Vue时,情况不一样了,我们告诉Vue有一个name变量需要被映射,并且(以字符串的形式)告诉Vue映射的模板是个div,但真正创造div结点并将其挂载到DOM树上这一步,是由Vue完成的。
 
看出区别了吗?用上Vue后,我们不再关心DOM结点增/删/改的具体实现,而是专注于创造数据与视图的映射规则(业务逻辑),Vue自会根据这些规则,以最优的策略完成DOM操作,这就是自动化的管理方式。
 
从前文描述可以看出,Vue值得我们了解的重点包括:
1. 如何监听数据变化?因为只有实现了监听数据变化,才能把变化同步到视图上。尤雨溪说基本原理是用Object.defineProperty方法劫持data对象各个属性的getter和setter。
2. DOM更新策略。React和Vue都采用了Virtual DOM技术,以尽量减少DOM操作数量和范围。
 
另外一个值得关注的点是组件的实现,因为现代前端项目体积庞大,必须依赖组件化功能将项目拆分为相对独立的模块,方能有效地组织和复用代码。
 
Vue生态还拥有许多其他工具,它们都是基于Vue所要完成的任务,在某个具体的方面提供支持,如vuex是为了实现跨组件通信、数据共享和状态集中管理,vue-router是为了管理组件和路径的映射关系等。
 
以上提到的三点在Vue.js中的具体实现,且待下回分解。

前端框架本质之探究——以Vue.js为例的更多相关文章

  1. 4.VUE前端框架学习记录四:Vue组件化编码2

    VUE前端框架学习记录四:Vue组件化编码2文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

  2. 3.VUE前端框架学习记录三:Vue组件化编码1

    VUE前端框架学习记录三:Vue组件化编码1文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

  3. 前端框架之争丨除了Vue、Angular和React还有谁与之争锋

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://www.sitepoint.com/most-popular-frontend-f ...

  4. 前端框架Angular、react、vue在github上的数据统计-2018-05

    2018年5月31日09:15:45 突然想看看几个前端框架的数量,然后就截图了如下数据: 分析: react关注.收藏.Fork都高vue一些, 但相差不大 angular比较奇葩,收藏只有二者一半 ...

  5. Vue.js-----轻量高效的MVVM框架(一、初识Vue.js)

    1.什么是Vue.js? 众所周知,最近几年前端发展非常的迅猛,除各种框架如:backbone.angular.reactjs外,还有模块化开发思想的实现库:sea.js .require.js .w ...

  6. 前端框架:Angular React 和 Vue的比较

    前端这几年的技术发展很快,细分下来,主要可以分成四个方面: 1.开发语言技术,主要是ES6&7,coffeescript,typescript等: 2.开发框架,如Angular,React, ...

  7. 常用的前端框架Angular、React、Vue

    VUE 一.vue导读 1.1 vue的优点:结合其他框架点,轻量级,中文API,数据驱动,双向绑定,MVVM设计模式,组件化开发,单页面应用 1.2 vue环境的导入: 本地导入 <!--方法 ...

  8. 前端架构之路:使用Vue.js开始第一个项目

    Vue.js做为目前前端最热门的库之一,为快速构建并开发前端项目多了一种思维模式.本文通过一个简单的实例开始上手Vue.js开发.   一.技术准备 笔者建议在开始项目前,对以下两个技术点进行了解. ...

  9. spring cloud 框架源码 activiti工作流 vue.js html 跨域 前后分离 springboot

    1.代码生成器: [正反双向](单表.主表.明细表.树形表,快速开发利器)freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本.处理类.service等完整模块2. ...

随机推荐

  1. python—查找以XXX结尾的文件

    # 查找电脑所有视频 for cur_dir,dirs,files in os.walk(r'f:'): print('当前正在%s目录下查找'%cur_dir) for f in files:#当前 ...

  2. [leetcode]66. Plus One加一

    Given a non-empty array of digits representing a non-negative integer, plus one to the integer. The ...

  3. pythone函数基础(15)接口开发初识

    导入需要的第三方模块 import flaskimport toolsimport json,redisimport random server = flask.Flask(__name__)#新建一 ...

  4. anaconda安装qt错误

    windows下miniconda2安装python3下的qt包报错 conda install qt ERROR conda.core.link:_execute_actions(330): An ...

  5. typescript如何判断实例是否实现了接口?

    ·不能用instanceof,因为运行时不存在Interface ·TS 中判断是否实现接口的核心原则是基于结构而不是基于名称的.即鸭子类型判断. ·实现: interface A{ discrimi ...

  6. bottle源码

    import sys __author__ = 'Marcel Hellkamp' __version__ = '0.13-dev' __license__ = 'MIT' ############# ...

  7. idea实现热部署并且开启自动编译

    [注]本文转自https://blog.csdn.net/z15732621582/article/details/79439359博文,如有冒犯,请联系博主: 问题描述: 最近在调试代码并进行本地测 ...

  8. EXCEL公式及宏

    VLOOKUP特别好用的一个用于映射的公式 1.需要根据ID找到对应的NAME 2.将可以用于映射的两列放到G,H列中(注意!用于检索的要放在相对的第一列中) 3.VLOOKUP(A2,G:H,2,F ...

  9. 解决build workspace 缓慢的问题

    (1).解决方法         方法1.修改eclipse启动文件 eclipse.ini 中添加启动参数参数: -vmargs -Xmx512m         方法2.关闭自动构建工作区: pr ...

  10. PackageManagerService 学习记录 基于7.1.1源码

    参考: http://blog.csdn.net/innost/article/details/47253179 http://blog.csdn.net/gaugamela/article/deta ...