snabbdom

使用虚拟dom的原因

风流意气都作罢 提交于 2020-08-14 11:40:34
一、为什么要使用虚拟dom。 我们来回顾一下前端开发刀耕火种的时代。 ①之前的前端开发需要手动操作dom,还要考虑浏览器兼容性等问题,非常的麻烦,后来有了JQuery等库,简化了dom操作,我们也不需要考虑浏览器兼容性等问题,但是随着前端项目的复杂,dom操作也变得复杂,我们既要考虑操作数据,也要考虑操作dom,为了简化dom操作,则出现了各种mvvm框架, ②mvvm框架帮我们解决可视图和状态的同步问题。也就是当数据发生变化自动更新视图,当视图发生变化,自动更新数据。 ③在过去,为了简化视图的操作,我们可以使用模板引擎,但是模板引擎没有解决跟踪状态变化的问题,就是当数据发生变化后,无法获取上一次的状态,只好把界面上的元素删除,然后在重新创建,jquery写的一个列表,当新增删除排序时,添加一个过渡效果,操作时列表会先被删除,然后重建,耗费性能。模板引擎没有解决跟踪状态变化的问题,所以有了虚拟dom,虚拟dom的好处是当状态发生改变时,不需要立即更新dom,只需要创建一个虚拟dom树,来描述dom,虚拟dom内部将弄清楚如何有效的(diff)更新dom,内部会使用diff算法来找到状态的差异,只更新变化的部分。虚拟dom只会更新数据发生变化的dom元素, ④总结:虚拟dom可以维护程序的状态,可以跟踪上一次的状态,我们可以通过对比前后两次状态的差异,来更新真实的dom。

Snabbdom的使用

[亡魂溺海] 提交于 2020-08-09 17:30:16
一、初始化工程 ①新建文件夹virtual-dom-study ②yarn init -y 生成package.json ③yarn add parcel-bundler 安装打包工具parcel ④package.json文件中加入脚本: "scripts": { "dev": "parcel index.html --open", "build": "parcel build index.html" }, ⑤根目录新建index.html和src文件夹 ⑥src文件夹新建01-basicusage.js文件 ⑦index.html引入上述所述js文件 二、导入snabbdom github中文介绍地址: https://github.com/coconilu/Blog/issues/152 ①安装snabbdom yarn add snabbdom ②01-basicusage.js写入 import { init, h } from 'snabbdom'; // 1.hello world // 参数:数组,模块 // 返回值:patch函数,作用对比两个vnode的差异更新到真实DOM let patch = init([]) // 第一个参数:标签+选择器 // 第二个参数:如果是字符串的话就是标签中的内容 let vnode = h('div', 'Hello

通俗易懂的vue虚拟(Virtual )DOM和diff算法

偶尔善良 提交于 2020-07-28 02:48:27
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 最近在看一些底层方面的知识。所以想做个系列尝试去聊聊这些比较复杂又很重要的知识点。学习就好比是座大山,只有自己去登山,才能看到不一样的风景,体会更加深刻。今天我们就来聊聊Vue中比较重要的vue虚拟(Virtual )DOM和diff算法。 虚拟(Virtual )DOM Virtual DOM 其实就是一棵以 JavaScript 对象(VNode 节点)作为基础的树,用对象属性来描述节点,相当于在js和真实dom中间加来一个缓存,利用dom diff算法避免没有必要的dom操作,从而提高性能。当然算法有时并不是最优解,因为它需要兼容很多实际中可能发生的情况,比如后续会讲到两个节点的dom树移动。 上几篇文章中讲vue的数据状态管理结合Virtual DOM更容易理解,在vue中一般都是通过修改元素的state,订阅者根据state的变化进行编译渲染,底层的实现可以简单理解为三个步骤: 1、用JavaScript对象结构表述dom树的结构,然后用这个树构建一个真正的dom树,插到浏览器的页面中。 2、当状态改变了,也就是我们的state做出修改,vue便会重新构造一棵树的对象树,然后用这个新构建出来的树和旧树进行对比(只进行同层对比),记录两棵树之间的差异。 3