vue的核心是虚拟dom,使用虚拟dom
虚拟dom:virtual dom (也被称为vdom)
所谓虚拟dom,即为伪dom,假的dom,他不是一个真实的dom,而是由JS 来模拟出来的具有真实dom结构的一个树形结构。
jq版本的数据替换,基本上改变了大部分的dom结构,而vDom版本的则只改变了需要改动的dom元素,大大减少了dom的操作。
操作DOM影响性能,因为操作DOM是十分昂贵的
为什么操作DOM非常昂贵?
DOM是一个独立于语言的,用于操作XML和HTML文档的程序接口(API)。在浏览器中主要用于与HTML文档打交道,并且使用DOM API用来访问文档中的数据。
DOM是个与语言无关的API,它在浏览器中的接口却是用JavaScript来实现的。客户端脚本编程大多数都是在和底层文档打交道,DOM就成为现在JS编码中的重要部分。
浏览器中通常会把DOM和javascript独立实现。
在IE中,JavaScript的实现名为JScript,位于jscript.dll文件中,DOM的实现则存在另一个库中,名为mshtml.dll(内部称为trident)。
safari中的DOM和渲染是使用webkit中的webcore实现,JavaScript部分是由独立的SquirelFish引擎来实现。
google chrome使用webkit中的webCore库来渲染页面,但JavaScript引擎是他们自己研发的,名为V8。
firefox的JavaScript引擎名为TraceMonkey,与名为Gecko的渲染引擎相互独立。
访问DOM元素是有代价的。
浏览器下载完页面中的所有组件:HTML、JavaScript、CSS、图片后,会发生这样的过程: 1. 解析HTML,构建DOM树 2. 解析CSS,生成CSS规则树 3. 合并DOM树和CSS规则树,生成render树 4. 布局render树,负责各元素尺寸、位置的计算(重排) 5. 绘制render树,绘制页面像素信息 6. 浏览器会将各层的信息发送给GPU,GPU将各层合成(重绘)
当页面布局和几何属性改变时就需要重排:
浏览器渲染引擎是将需要渲染的多个样式放入一个队列当中,当到一定时间统一渲染,而下列属性需要最新的,所以会立即触发重排 offsetTop、offsetLeft、offsetWidth、offsetHeight scrollTop、scrollLeft、scrollWidth、scrollHeight clientTop、clientLeft、clientWidth、clientHeight getComputedStyle()
重排占用的是cpu的计算能力 重绘占用的是gpu的绘制图形能力,因为家用显卡都不利于绘制图形,所以,重绘会很浪费性能 GPU的分类:
M: model(即data) V: view(html页面中绑定事件和渲染) VM:viewModel(将视图和数据链接)
即可以使用vue很少的功能完成一个小项目,也可以使用更多的组件去完成大型的项目,vue都能提供。