当前位置: 首页 > 后端技术 > Python

一篇文章教你如何将DOM转换为虚拟DOM

时间:2023-03-25 20:49:30 Python

【1.【VirtualDOM简介】VirtualDOM是一个虚拟节点,通过JavascriptObject对象模拟DOM中的节点,然后渲染成RealDOM节点。浏览器在处理DOM的时候,总会附加很多属性,导致每次数据更新时渲染都非常慢。Virtual DOM使用Javascript作为中间层。Javascript记录状态并将每个状态更改同步到视图。[2。虚拟DOM的优点】保证性能下限和跨平台。无需手动操作DOM,只需要编写View-Model的代码逻辑,框架会将虚拟DOM和数据双向绑定,帮助我们以可预测的方式更新视图,大大提高我们的开发效率。虚拟DOM的核心思想是:为复杂的文档DOM结构提供一个便捷的工具,进行最少的DOM操作。这句话可能过于抽象,但基本概括了虚拟DOM的设计思想。[3.项目实现】首先简单模拟下vue如何生成虚拟DOM,超级简化版!!!是不是很眼熟?没错,用Vue搭建的脚手架中的main.js文件就包含了这段代码块。接下来,我们需要处理新的Vue对象。我们将基于ClassVNode类来实现,如下图:tag代表标签;数据代表属性;value代表价值;type代表类型;children代表孩子。虚拟DOM转换代码如下:现在分析一下转换过程:1.首先了解nodeType代表什么?nodeType为1表示元素,nodeType为3表示文本。2、当nodeType==1时,看类VNode的构造函数需要什么?我们从DOM中取我们需要的,nodeName代表label,_propertyObj代表attribute,nodeType代表type元素没有文字(因为nodeType为1为element,nodeType为3为text,当前nodeType==1所以没有文字,代表一个元素),因此值字段直接传递给未定义。3、将新的对象实例赋值给_vnode,然后取出当前元素的所有子元素,遍历并递归写入到_vnode中的children中。4、元素的处理结束。在nodeType==3的情况下,由于是文本,肯定没有标签和属性,所以如果直接传undefined值,使用node.nodeValue获取。同样,nodeType也代表类型,每次递归入口都会做不同的类型。区别对待。[5.总结】流行的前端框架Vue和React都使用了虚拟DOM。目的之一是提高性能。了解如何将DOM转换为虚拟DOM,就是学习Vue的底层原理。Vue中的diff算法就是比较同层DOM树。学习虚拟DOM是学习diff算法的前置知识点。虽然这个知识点在平时的开发中几乎用不到,但是其中包含的思想确实值得学习。飞来飞去不是学习,而是多思考多实践。希望对您有所帮助!如果想深入了解Python网络爬虫和数据挖掘,可以去专业网站:http://pdcfighting.com/