虚拟dom

一、什么是虚拟DOM?
使用javascript模拟了DOM结构的树形结构(对象表示),这个树结构包含整个DOM结构的信息
使用虚拟DOM有什么好处?
操作数据要大大的减少性能损耗,提高渲染效率
越多的真实dom操作,越损耗性能
2.虚拟DOM为什么会提高性能?
虚拟DOM提高性能,不是说不操作DOM,而是减少操作DOM的次数,减少回流和重绘

虚拟 dom 相当于在 js 和真实 dom 中间加了一个缓存,利用 dom diff 算法避免了没有必要的 dom 操作,从而提高性能

1)用 JavaScript 对象结构表示 DOM 树的结构;

2)然后用这个树构建一个真正的 DOM 树,插到文档当中

3)当状态变更的时候,重新构造一棵新的对象树

4)然后用新的树和旧的树进行比较,记录两棵树差异

5)所构建的真正的 DOM 树上,视图就更新了
虚拟dom的实现:

let element={
    tagName:'div',//节点标签名
    props:{//dom的属性,用一个对象存储键值对
        id:'list'
    },
    children:[//该节点的子节点
        {tagName:'li',props:{class:'item'},children:['aa']},
        {tagName:'li',props:{class:'item'},children:['bb']},
        {tagName:'li',props:{class:'item'},children:['cc']}
    ]
}
对应的html写法是:
<div id='list'>
    <li class='item'>aa</li>
    <li class='item'>aa</li>
    <li class='item'>aa</li>
</div>

二、实现虚拟DOM
使用diff算法比较新旧虚拟DOM----即比较两个js对象不怎么耗性能,而比较两个真实的DOM比较耗性能,从而虚拟DOM极大的提升了性能!
在这里插入图片描述

  let myp = document.getElementById("myp")
         console.time("temp")
        for(var i=0;i<10000;i++){
            let num = myp.innerHTML*1
           myp.innerHTML = ++num
        }
        console.timeEnd("temp")
let myp = document.getElementById("myp")
         let num = 1
         console.time("temp")
         for(var i=0;i<10000;i++){
             num++
         }
         myp.innerHTML = num
         console.timeEnd("temp")

diff算法:
diff算法指的就是两个虚拟DOM作比对,在diff算法中有个概念就是同级比对,首先比对顶层虚拟DOM节点是否一致,如果一样就接着比对下一层,如果不一样,就停止向下比对,将原始页面中这个DOM及 下面的DOM全部删除掉,重新生成新的虚拟DOM,然后替换掉原始页面的DOM在这里插入图片描述
左图:简单粗暴的做法是:卸载C,装载F,卸载D,装载C,卸载E,装载D,装载E。虽然程序运行不会有错,但效率太低
右图:增加上key后,React就能根据key,直接找到具体的位置进行操作,效率比较高

列表中key的作用:

1)key是React用于跟踪哪些元素是增加、删除、修改的辅助标记,需要保证在同级元素中key的唯一性

2) React Diff 算法借助元素的 Key 值判断元素是新增、删除、修改,从而减少不必要的元素重渲染。

3)React 还需要借助 Key 值来判断元素与本地状态的关联关系

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值