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

河源做网站的客户海南 网站开发

河源做网站的客户,海南 网站开发,android下载软件app,济南网站建设小程序开发虚拟dom-Diff算法 vue2 diff算法在vue2中就是patch#xff0c;通过新旧虚拟dom对比#xff0c;找到最小变化然后进行dom操作 在页面首次渲染的时候会调用一次patch并创建新的vnode#xff0c;不会进行深层次的比较#xff0c;然后再组件中数据发生变化的时候#xff0c;…虚拟dom-Diff算法 vue2 diff算法在vue2中就是patch通过新旧虚拟dom对比找到最小变化然后进行dom操作 在页面首次渲染的时候会调用一次patch并创建新的vnode不会进行深层次的比较然后再组件中数据发生变化的时候会触发setter然后通过notify通知watcher对应的watcher会通知更新并执行更新函数会执行render函数获取新的虚拟dom然后执行patch对比上次渲染结果的老的dom计算出最小的变化根据最小的变化去更新真实的dom 什么是diff算法 diff是新旧内容之间的区别经计算vue中的diff算法就是通过一种简单而且高效的手段对比出新旧节点数组之间的区别以便以最小的dom操作来更新页面内容 对比的是vnode数组同时存在新旧两组vnode数组 真实的dom节点都是树的形式存在的根节点都是, 为了保证虚拟节点能和真实dom节点一样vnode也采用树形结构 如果再组件更新的时候需要对比全部vnode节点的话新旧两组节点需要及进行深度遍历和比较会产生很大的性能开销所以vue中默认同层节点比较多余层级的内容会直接新建或者舍弃只再同层级进行diff操作 一般来说diff操作一般发生在v-for循环或者有v-if/v-elsecomponent这类动态生成的节点对象上 diff算法的优化 只会对比同一层级不会跨级比较 比较标签名 如果同一层级的比较标签名不同旧直接移除老的虚拟节点 比较key 从标签名相同key相同就会被认为是相同节点也不继续按照这个树状结果做深度比较比如写v-for的时候会比较key不写key就会报错 在不使用key或者列表的index作为key的时候每个元素对应的位置关系都是index如果没有key的话后续的li都会重新渲染。如果使用key的话后续会判断li3和li4没有发生变化所以不会重新渲染。 key的作用是为了更加搞笑的更新虚拟dom因为可以非常精确的找到相同节点vue在patch过程中会判断两个节点是不是相同节点key是一个必要条件。如果在渲染列表的时候不写keyvue在比较的时候导致频繁更新元素使得整个patch比较低效避免使用数组下标作为key因为key值不是唯一的话可能导致出现上图的bug。vue判断两个节点是否相同的时候需要主动判断两者的元素类型和key如果不设置key就可能被认为两个相同的节点只能做更新操作造成大量不必要的dom更新操作。 双端diff 简单diff算法: 通过暴力手段直接遍历两个数组。双端就是从两端开始分别从中间进行遍历对比的算法 新旧头相等新旧尾相等旧头等于新尾旧尾等于新头四者互不相等 新头旧尾 头头相等 尾尾比较 新尾旧头 循环比较 增删 循环没有找到 头头尾尾头尾 尾头没有匹配到然后循环遍历如果循环遍历没有找到则生成这个节点。 children内增加节点 头头 尾尾 children内减少节点 增加整个children 删除整个children vue3 什么时候用到了diff算法 存在children的vnode类型element类型中vnode中存在children flagment碎片类型vnode可以创建一个具有多个dom节点的组件的方法就是创建一个没有底层vue实例的功能组件 templatespan1/spanspan2/spanspan3/span /template // flagment出现就是看起来像一个普通的dom元素但是是虚拟的不会在dom树中呈现 Fragmentspan1/spanspan2/spanspan3/span /FragmentpatchChildren根据是否存在key进行真正的diff或者直接patch diff算法 头和头比 尾和尾比 基于最长递增子序列进行移动/添加/删除 先进行头和头比较发现不同旧结束循环 然后进行尾和尾比较发现不同就结束循环 在保存没有比较过的节点并通过newIndexToOldIndexMap拿到数组里面对应的下标生成数组,-1是老数组里没有的就是说明是新增 然后取出数组里面的最长递增子序列 然后只需要把其他的剩余节点基于最长子序列的位置进行移动新增和删除就可以了 比较新老children的length获取最小值然后对于公共部分重新进行patch工作 如果老节点数量大于新的节点数量移除多出来的节点 如果新的节点数量大于老的节点数量重新mountChildren新增的节点 如果老节点是否全部patch新节点没有被patch完,创建新的vnode 如果新节点全部被patch老节点有剩余那么卸载所有老节点 最长子序列 这个核心后续回写
http://www.hkea.cn/news/14277402/

相关文章:

  • 莱州网站建设有限公司网络信用贷款哪个好
  • 重庆建网站的公司集中在哪里长春城乡建设部网站首页
  • 网站响应度微信管理系统下载
  • 在ps中如何做网站框架微信小程序开发教程书
  • 济南免费网站建设网页设计实训总结800字
  • 北京国贸网站建设海南手机网站建设公司哪家好
  • 成都企业网站建设费用深圳营销型网站建设服务商
  • 成都企业建设网站湖北专业网站建设检修
  • 网站建设公司的服务器ui网页设计课程总结
  • 商业网站建设视频教程一个县城广告公司利润
  • 申请号的网站网站设计怎么弄
  • 高校门户网站的建设如何在网站插做视频
  • 网站开发环境怎么写聊城开发网站建设
  • 网站设计步骤是什么昆山网站建设及推广
  • 开题报告电子商务网站建设长沙企业网站制作
  • 公司做网站之前要准备什么软件优化营商环境
  • 昌平网站开发多少钱晋中建设集团网站
  • 高清设计网站推荐网页设计作业 介绍家乡
  • 网站开发与设计实验报告总结游戏推广员好做吗
  • 微信小程序网站制作茂名企业自助建站系统
  • 做网站 宁波装修案例分析
  • 网站建设的总结与评价网站的排版问题
  • wordpress子目录站点选择主题手机触屏网站幻灯片
  • 中国全球门户网站wordpress关联博客
  • 网站不被搜索引擎收录吗wordpress导航菜单下拉
  • 网站建站如何做seowordpress docker -v
  • wordpress 免费么成都seo网站建设
  • 俄语网站万网企业网站建设
  • 能交易的网站多少钱wordpress抓取别人网站
  • 做网站的那些事萧山做网站公司