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

武汉优联网站建设厦门seo外包

武汉优联网站建设,厦门seo外包,上海网站建设服,做网站好还是网店diff算法 snabbdom: h函数:产生虚拟节点 第一个参数:为标签,第二个:属性 ,第三个:值 一个虚拟dom的属性:让虚拟节点上树,即生成真实dom //h函数//vnode:把参数返回成一…

diff算法

snabbdom:

h函数:产生虚拟节点

第一个参数:为标签,第二个:属性 ,第三个:值

一个虚拟dom的属性:让虚拟节点上树,即生成真实dom

//h函数//vnode:把参数返回成一个对象export default function(sel,data,children,text,elm){const key=data.keyreturn {sel,data,children,text,elm}
}import vnode from './vnode.js'//低配版本的diff,必须接受三个参数
// h('div',{},'文字'/[]/h{})export default function h(a,b,c){if(arguments.length<3){return ;}if(typeof c =='string'||typeof c=='number'){return vnode(a,b,undefined,c,undefined)}if(Array.isArray(c)){let children=[]for(let i=0;i<c.length;i++){if(!(typeof c[i]=='object'&& c[i].hasOwnProperty(sel))){return }children.push(c[i])}return vnode(a,b,children,undefined,undefined)}if(typeof c=='object' &&c.hasOwnProperty(sel)){let children=[c]return vnode(a,b,children,undefined,undefined)}else{return }}h('div',{},'文字')

diff算法:

//patch函数:

过程:

先判断老节点是否为虚拟节点,若不是,把它转化为虚拟节点,若是,则判断旧vnode和新的vnode是否为同一节点,若是进行精细比较,若不是,则直接暴力删除添加

(1):如何定义 是相同节点:

        新旧节点的key相同和新旧节点的选择器相同

(2):暴力删除旧的,插入新节点

        创建子节点时,递归创建

        

const myvnode1=h('h1',{},'你好')
const container=document.getElementById('container')function patch(oldvnode,newnode){if(oldnode.sel==''||oldnode.sel=='undefioned'){oldvonde=vnode(oldvnode.tagname.toLowerCase(),{},[],undefined,oldvnode)}if(oldvnode.key==newvnode.key&&oldvnode.sel===newvnode.sel){//判断新旧是否为一个对象patchVnode(oldVnode,newvnode)}else{let newdom=createElement(newvnode)//插入oldVonde.elm.parentNode.insertBefore(newdom,oldvnode.elm)oldvnode.ele.parentNode.removeChild(oldvnode);}
}function patchvnode(oldvnode,newvnode){if(oldvnode==newvnode) return if(newvnode.text!=='undefined' &&newvnode.children.length==0){if(newvnode.text!=oldvnode.text){oldvnode.elm.innerText=newvnode.text}}else{//判断老的有没有childrenif(oldvnode.children!=='undefined'&&oldvnode.children.length!==0){updateChilden(oldvnode.elm,oldvnode.children,newvnode.children)}else{//老的没有,新的有oldvnode.elm.innerHTML=''for(let i=0;i<newvnode.chileren.length;i++){let dom=createElement(newvnode.children[i])oldvnode.ele.appChildren(dom)}}}
}function createElement(vnode){//创建domlet domnode=document.createElement(vnode.sel)if(vnode.text!=''&&(vnode,children=='undefined)){domNode.innerText=vnode.text;}else if(Array.isArray(vnode.children)&&vnode.children.length>0){//内部是子节点,要进行递归for(let i=0;i<vnode.children.length;i++){let ch=vnode.childrfen[i]let chdom=createElement(ch)domnode.appendChild(chdom)}}vnode.elm=domnodereturn vnode.elm}function updateChilden(parentelm,oldch,newch){let oldstart=0;let newstart=0;let oldend=oldch.length-1;let newend=newch.length-1;let oldsnode=oldch[0]let oldenode=old[oldend]let newsnode=newch[0]let newenode=newch[newend]while(oldstart<=oldend&&newstart<=newend){if(checksamenode(oldsnode,newsnode)){patchvnode(oldsnode,newsnode)oldsnode=oldch[++oldstart]newsnode=newch[++newstart]}//新后和旧后else if(checksamenode(oldenode,newenode)){patchvnode(oldenode,newenode)oldenode=oldch[--oldend]newenode=newch[--newend]}else if(checksamenode(oldsnode,newenode)){patchvnode(oldsnode,newenode)parentelm.insertBefore(oldsnode.elm,oldenode.elm.nextSibling)oldsnode=oldch[++oldstart]newenode=newch[--newend]}else if(checksamenode(oldenode,newsnode)){patchvnode(oldenode,newsnode)parentelm.insertBefore(oldenode.elm,oldsnode.elm)oldenode=[--oldend]newsnode=[++newstart]}else{}}//剩余节点if(newstart<=newend){for(let i=newstart,i<=newend;i++){parentelm.insertBefore(createElement(newch[i]),newch[i+1].elm)}}else if(oldstart<oldend){for(let i=oldsrart,i<=oldend;i++){parentelm.removeChild(oldch[i])}}}function checksamenode(a,b){return a.sel==b.sel&&a.key==b.key
}

diff算法优化:

虚拟dom变为真实dom

http://www.dtcms.com/wzjs/29540.html

相关文章:

  • wordpress采集微信公众号seo搜索引擎优化工资薪酬
  • 做网站的人搞鬼少首页文件网站如何推广营销
  • wordpress主机免费广州关键词优化外包
  • 百度收录网站技巧广州排前三的seo公司
  • 校园互动网站建设专业做网站的公司
  • 微信的企业网站模板18款免费软件app下载
  • 如何网站做百度推广竞价推广代运营服务
  • 网站上传程序流程中国宣布疫情结束日期
  • 做兼职什么网站靠谱国内新闻今日头条
  • 如何做网站的维护和推广线上营销推广方案模板
  • 怀化主要网站电商培训机构排名
  • 营销网站建设培训今日山东新闻头条
  • 怎么改变wordpress首页重庆seo网站推广费用
  • 赛门博网站建设近期国际新闻
  • 做网站的画布是多少太原网站关键词推广
  • 住房建设厅网站宁波seo外包推广软件
  • web前端自己做网站常用的网络营销方法有哪些
  • 二级域名做外贸网站好吗百度统计怎么使用
  • wordpress日历事件搜索引擎优化seo网站
  • 如何在一个数据库做两个网站今日桂林头条新闻
  • 深圳设计公司前十名seo公司网站
  • 西安开发网站建设中国万网登录入口
  • 番禺建设网站石家庄网站建设公司
  • 公司网站建设收费网站测速
  • 苏州住房和城乡建设厅网站网络推广项目
  • 实验一 电子商务网站建设与维护百度seo优化收费标准
  • 上海新闻最新消息今天seo工作是什么意思
  • 北京好一点的微网站开发公司360站长
  • 供应链管理系统的作用seo营销推广
  • 天津做企业网站公司软文发稿系统