当前位置: 首页 > news >正文

潍坊网站推广排名石家庄市规划建设局网站

潍坊网站推广排名,石家庄市规划建设局网站,互联网广告平台有哪些,福建省住房和城乡建设厅官方网站1.虚拟dom的原理 虚拟 DOM 是对 DOM 的抽象#xff0c;本质上就是用 JavaScript 对象来描述 DOM 结构。Vue.js 中关于虚拟 DOM 的实现主要进行了以下几个步骤#xff1a; 1.生成虚拟 DOM#xff1a; Vue.js 使用 render 函数来依据模板代码生成虚拟 DOM。在这个过程中本质上就是用 JavaScript 对象来描述 DOM 结构。Vue.js 中关于虚拟 DOM 的实现主要进行了以下几个步骤 1.生成虚拟 DOM    Vue.js 使用 render 函数来依据模板代码生成虚拟 DOM。在这个过程中每一个 HTML 标签都将被转换成一个 VirtualNode 对象这个对象会记录该标签的类型、属性、子节点等信息。 2. 对比新旧虚拟 DOM     当数据发生变化时Vue.js 会重新生成新的虚拟 DOM然后与旧的虚拟 DOM 进行对比这个过程称为 Diff。通过 Diff 算法Vue 可以精确找出两个虚拟 DOM 之间的区别。 3. 局部更新真实 DOM     根据对比结果Vue 会直接计算出最小需要更新的 DOM 部分并将这些变化应用到真实的 DOM 上。这种思路能够最大程度地减少对 DOM 的操作从而提升性能。 2.手写实现虚拟dom(VirtualNode)  以下是使用 JavaScript 创建和操作虚拟 DOM 的简化版本例子 // 创建虚拟 DOM 对象 function createElement(tag, props, children) {return {tag,props,children} }// 渲染虚拟 DOM 到真实环境 function render(vnode, container) {var el;// 创建节点// 针对文本节点进行特殊处理if (typeof vnode string || typeof vnode number) {el document.createTextNode(vnode);}else {el document.createElement(vnode.tag);// 设置 DOM 属性for (var key in vnode.props) {el.setAttribute(key, vnode.props[key]);}// 如果有子节点递归调用 render 函数if (vnode.children) {vnode.children.forEach(child {render(child, el); // 注意这里使用 el 作为容器});}}// 将生成的真实 DOM 挂载到 container 上container.appendChild(el); }// 创建虚拟 DOM const vnode createElement(div, { id: app }, [createElement(div, {}, [Hello, Virtual DOM])]);// 渲染到真实 DOM render(vnode, document.body);小结 以上代码主要展示了如何创建虚拟 DOM 对象并实现虚拟 DOM 到真实 DOM 的渲染。在真实的 Vue.js 中虚拟 DOM 的实现会更加复杂包括 Diff 算法、批量异步更新等优化措施。 在上面的基础上让我们更深入理解 Virtual DOM (虚拟 DOM) 的 diff 算法和 patch 过程。 这两个环节主要做的是比较新老虚拟 DOM 的差异并找出最少的修改应用这些修改到真实 DOM 上以提高应用的性能。 还是用示例来解释ps:我的思路记录在了代码中的注释上 // 更新函数用于比较新旧虚拟节点vnode的差异并将差异应用到实际的 DOM 元素上。 function updateElement(vnode, oldVnode) {// 如果旧节点和新节点相同那么什么都不做。if (vnode oldVnode) return;// 如果有新的文本内容那么更新文本内容。if (vnode.text) {oldVnode.text vnode.text;}// 更新节点属性// el 是新旧节点共享的真实DOM元素var el oldVnode.el vnode.el;// oldProps 是旧虚拟节点的属性集合var oldProps oldVnode.props;// props 是新虚拟节点的属性集合var props vnode.props;// 如果旧属性在新属性集合中不存在那么在真实 DOM 上移除这个属性。for (var key in oldProps) {if (!props.hasOwnProperty(key)) {el.removeAttribute(key);}}// 对比新旧属性集合如果不相等那么在真实 DOM 上更新这个属性。for (var key in props) {if (props[key] ! oldProps[key]) {el.setAttribute(key, props[key]);}}// 比较和更新子节点此处简化为重新渲染所有子节点// oldChildren 是旧虚拟节点的子节点集合var oldChildren oldVnode.children || [];// children 是新虚拟节点的子节点集合var children vnode.children || [];// 逐个对比更新子节点for (var i 0; i children.length || i oldChildren.length; i) {// 递归调用 render 函数来处理子节点的更新这里假设 render 函数会处理子节点的渲染和更新render(children[i], el, oldChildren[i]);} } 这个 updateElement 函数是一个非常简化的例子它检查 vnode 与 oldVnode 的差异并将这些差异应用到实际的 DOM 元素上。然后它递归处理子节点。请注意这个函数并没有处理节点类型不同的情况也没有实现 key 属性和列表渲染的优化这些问题都是 Vue.js 的 diff 算法需要解决的。 在实际的 Vue.js 中虚拟 DOM 的更新过程会更加优化和复杂。比如 patch 过程会将修改操作放入队列并在下一个事件循环中执行同时对连续的同样操作进行合并以达到最高的性能。此外Vue.js 的 diff 算法也会根据列表渲染的 key 属性寻找新旧 vnode 列表中相同的部分以达到最小化 DOM 操作的效果。而且当组件重新渲染时Vue.js 会通过静态节点标记避免不必要的比较和渲染以进一步提升性能。 ps: 关于diff算法以及其他内容将会在下一篇博客中编写。
http://www.hkea.cn/news/14593142/

相关文章:

  • 手机wap网站导航模板建立自我追求无我
  • 网站建设需要会什么软件有哪些内容租号网站建设
  • 这几年做啥网站致富网站后角色管理权限怎么设置?
  • ruhe用dw做网站白酒网站模板
  • 北京市工程建设交易中心网站景宁建设局网站官网
  • 汕头市企业网站建设服务机构公司简介网站怎么做
  • 铜川市住房和城乡建设局网站开发h5网站开发
  • 郑州+高端网站建设汕头seo网络推广
  • 威海做企业网站的公司天津建站公司模板
  • 官网查询网站网站风格对比信息表
  • 郑州企业建站公司定制遂宁移动网站建设
  • 甜品网站建设策划书深圳整站
  • 怎么做网站海报检测WordPress主题的网站
  • 建设网站需要花费多少钱网站建设分为哪几个阶段
  • 上海网站建设 app开发做带后台的网站
  • 农产品电子商务网站建设要求怎么修改网站默认首页
  • 智慧政务网站怎么做品牌创意网站建设
  • 迅美网站建设营销方案包括哪些内容
  • 汕头网站推广排名青海城乡与建设厅网站
  • 蓝色 宽屏 网站 模板模板网站建设制作
  • asp网站后台失效免费企业网站模板下载
  • 网络公司网站策划书网站注册怎么做屏蔽过滤
  • 婚纱摄影网站怎么建设网站都有什么类型的
  • 响应式网站用什么单位手机 网站开发软件有哪些
  • 怎么把自己的网站发布到网上一般通过哪些行为来处理人际关系
  • 阿里云的网站影响网站pr的主要因素有哪些
  • 淄博公司做网站智慧团建的网址
  • 建设网站的课题在外国租服务器做那种网站
  • 重庆网站建设 狐灵ps做网站浏览器预览
  • 云建造网站电商可以从事的行业有哪些