vueOA系统信用盘新增三个极速的虚拟DOM渲染

1、为什么需要虚拟DOM
前面我们从OA系统信用盘新增三个极速Q3266397597【dashengba.com】零开始写了一个简单的类Vue框架,其中的模板解析和渲染是通过Compile函数来完成的,采用了文档碎片代替了直接对页面中DOM元素的操作,在完成数据的更改后通过appendChild函数将真实的DOM插入到页面。

虽然采用的是文档碎片,但是操作的还是真实的DOM。

而我们知道操作DOM的代价是昂贵的,所以vue2.0采用了虚拟DOM来代替对真实DOM的操作,最后通过某种机制来完成对真实DOM的更新,渲染视图。

所谓的虚拟DOM,其实就是用JS来模拟DOM结构,把DOM的变化操作放在JS层来做,尽量减少对DOM的操作(个人认为主要是因为操作JS比操作DOM快了不知道多少倍,JS运行效率高)。然后对比前后两次的虚拟DOM的变化,只重新渲染变化了的部分,而没有变化的部分则不会重新渲染。

比如我们有如下的DOM结构。

<ul id="list">
<li class="item1">Item 1</li>
<li class="item2">Item 2</li>
</ul>
我们完全可以用JS对象模拟上面的DOM结构,模拟后就会变成下面的这种结构。

复制代码
var vdom = {
tag: ‘ul‘,
attr: {
id: ‘list‘,
},
children: [
{
tag: ‘li‘,
attrs: {
className: ‘item‘,
children: [‘Item 1‘]
},
},
{
tag: ‘li‘,
attrs: {
className: ‘item‘,
children: [‘Item 2‘]
}
}
]

}
复制代码
必须要注意一点的是:JS模拟的DOM结构并没有模拟所有DOM节点上的属性、方法(因为DOM节点本身的属性非常多,这也是DOM操作耗性能的一个点),而是只模拟了一部分和数据操作相关的属性和方法。

2、怎么使用虚拟DOM
Vue在2.0版本引入了vdom。其vdom是基于snabbdom库所做的修改。snabbdom是一个开源的vdom库。

snabbdom的主要作用就是将传入的JS模拟的DOM结构转换成虚拟的DOM节点。

先通过其中的h函数将JS模拟的DOM结构转换成虚拟DOM之后,再通过其中的patch函数将虚拟DOM转换成真实的DOM渲染到页面中。

为了保证页面的最小化渲染,snabbdom引入了Diff算法,通过Diff算法找出前后两个虚拟DOM之间的差异,只更新改变了的DOM节点,而不重新渲染为改变的DOM节点。

在这里我不打算分析snabbdom的源码来解释到底snabbdom是怎么干成这件事的(主要是现阶段没到那个水平,哈哈。再者已经有很多同学做过类似的分析,相关链接附在文章末尾)。

我会从snabbdom的使用角度来看Vue中的虚拟DOM是如何完成视图渲染的。

我们先看一下snabbdom中两个核心API的功能。

h()函数:将传入的JS模拟的DOM结构模板转换成vnode。(vnode是一个纯JS对象)
patch()函数:将虚拟的DOM节点渲染到页面中。
我们提供一个实例来看一下snabbdom的实际作用。

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="container"></div>
<button id="btn-change">change</button>

复制代码
思路分析:
我们先通过h函数创建一个虚拟DOM节点,通过patch函数将虚拟DOM渲染到页面。
点击btn按钮时,更新ul#list列表的数据,改变了第二个li元素的值并且新增了一个li元素,第一个li元素的值并没有改变。我们再次通过patch函数将更新后的数据渲染到页面上。可以看到只有第二个和第三个li发生了更新,而第一个li由于没有改变,并没有重新渲染。
vue中的模板解析和渲染的核心就是:通过类似snabbdom的h()和patch()的函数,先将模板解析成vnode,如果是初次渲染,则通过patch(container,vnode)将vnode渲染至页面,如果是二次渲染,则通过patch(vnode,newVnode),先通过Diff算法比较原vnode和newVnode的差异,以最小的代价重新渲染页面。

原文地址:http://blog.51cto.com/13920926/2158963

时间: 2024-11-07 22:26:20

vueOA系统信用盘新增三个极速的虚拟DOM渲染的相关文章

OA系统信用盘新增三个极速彩版本

OA系统信用盘新增三个极速彩版本程序源码参数说明: QQ 2952777280 运行环境:php5.2+mysql 源码类别:时时彩(彩票)现金网系统/两面盘 界面语言:繁体中文 源码授权:无加密文件及认证授权,永久性可直接使用. 版本支持:PC/WAP网页版 编程语言:PHP OA系统信用盘新增三个极速彩版本自带系统彩票游戏:极速赛车.极速时时彩.极速飞艇.北京赛车(PK10).重庆时时彩.新疆时时彩.天津时时彩.广东快乐十分.重庆幸运农场.北京快乐8.江苏骰宝(快3).幸运飞艇. 名称 下载

OA系统信用盘新增三个极速彩版本Anroid中ListView实现分页加载

1.需要开启权限,AndroidManifest.xml文件中 OA系统信用盘新增三个极速彩版本  下载地址  QQ2952777280 <uses-permission android:name="android.permission.INTERNET"/>   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 2.activity_mai

OA系统信用盘新增三个极速彩版本自带系统彩票游戏

[游戏特色]运行环境:php5.2+mysql源码类别:时时彩(彩票)信用盘系统界面语言:繁体中文源码授权:无加密文件及认证授权,永久性可直接使用.版本支持:PC/WAP网页版编程语言:PHPOA系统信用盘新增三个极速彩版本自带系统彩票游戏由大神源码论坛dsluntan.com,详情请联系客服QQ3393756370 原文地址:http://blog.51cto.com/13855845/2137141

OA系统信用盘新增三个极速彩版本定制化视觉服务的使用

AI应用开发实战 - 定制化视觉服务的使用 OA系统信用盘新增三个极速彩版    下载地址  QQ2952777280 OA系统信用盘新增三个极速彩版本程序源码参数说明: 运行环境:php5.2+mysql 源码类别:时时彩(彩票)现金网系统/两面盘 界面语言:繁体中文 源码授权:无加密文件及认证授权,永久性可直接使用. 版本支持:PC/WAP网页版 编程语言:PHP 零.定制化视觉服务简介 有的时候,在构建应用的过程中,在缺少强大计算资源与高性能算法的情况下,我们不一定需要自己从零开始训练模型

php开发搭建OA信用盘幸运飞艇系统源码网站常见问题总结

PHP 是一种易于学习和使用的服务器端脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.PHP 独特的语法混合了C.Java.Perl以及PHP自创的语法.它可以比CGI或者Perl更快速地执行动态网页.用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多:PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快. 现

JDK动态OA信用盘平台出租代理和cglib动态代理

一.代理设计模式OA信用盘平台出租haozbbs.com Q1446595067 代理类和委托类具有相同的接口.代理类的对象本身并不真正实现服务,而是通过委托类的对象的相关方法来提供特定的服务. 二.静态代理 见<大话设计模式>第7章 缺点: 一个代理类只能应用于一个接口的实现类,如果有多个接口的话就要定义很多实现类和代理类才行.而且,如果代理类对业务方法的预处理.调用后操作都是一样的(比如:调用前输出提示.调用后自动关闭连接),则多个代理类就会有很多的重复代码.这时我们可以定义这样一个代理类

好系统U盘启动解决win7系统显示windows未能启动

u盘安装win7系统后,发现开机启动出现windows未能启动画面的情况,那么遇到这种windows无法正常启动情况要怎么办呢?此文好系统U盘启动就为大家分享解决win7系统显示windows未能启动的方法. 很多情况下,当您的电脑安装win7系统后,发现电脑开机的时候并未出现启动画面,在计算机的操作.运行中,难免遇到应用程序无法安装或者Windows无法正常启动运行的问题,这对我们使用计算机带来了很大的不便.小编不得不说您先不要着急,遇事这种麻烦要先想到该如何解决问题,那遇到这样的问题要如何解

Oracle数据OA信用盘平台出租远程连接的四种设置方法和注意事项

OA信用盘平台出租论坛:haozbbs.com Q1446595067 第一种情况: 若oracle服务器装在本机上,那就不多说了,连接只是用户名和密码的问题了.不过要注意环境变量%ORACLE_HOME%/network/admin/是否设置. 第二种情况: 本机未安装oracle服务器,也未安装oracle客户端.但是安装了pl sql development.toad sql development.sql navigator等管理数据库的工具.在虚拟机或者另一台电脑上安装了oracle服

解 US信用盘源码出售决Aanaconda3 安装 graphviz但是在pycharm

直接说解决办法:US信用盘源码出售论坛:haozbbs.com Q1446595067 第一步:打开Anaconda Prompt; 第二步:不要使用conda,而是使用命令pip install graphviz; 第三步:直接安装成功. 在pycharm里面测试 可以使用. 注意:我前期一直无法导入这个模块,试过了很多办法,下载了很多安装包,但是都不行,我不太确定上面的这些独立做能不能成功安装,还没按照其他教程安装下面软件的朋友可以单独试一下上面的步骤,给我个反馈!祝大家码字顺利! 原文地址