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

用jsp和mysql做网站宁波行业网站建设

用jsp和mysql做网站,宁波行业网站建设,在线玩的游戏网站,没网站怎么做京东联盟手动实现 Vue 3 的虚拟 DOM 和 Diff 算法 Vue 3 引入了许多新的改进和特性#xff0c;其中之一是对虚拟 DOM (Virtual DOM) 和 Diff 算法的优化。在这篇文章中#xff0c;我们将通过一个简单的示例来手动实现 Vue 3 风格的虚拟 DOM 和 Diff 算法。 虚拟 DOM 的基础 虚拟 D…手动实现 Vue 3 的虚拟 DOM 和 Diff 算法 Vue 3 引入了许多新的改进和特性其中之一是对虚拟 DOM (Virtual DOM) 和 Diff 算法的优化。在这篇文章中我们将通过一个简单的示例来手动实现 Vue 3 风格的虚拟 DOM 和 Diff 算法。 虚拟 DOM 的基础 虚拟 DOM 是真实 DOM 的 JavaScript 对象表示它允许我们以一种更高效的方式来描述和更新用户界面。当数据变化时Vue 会先在虚拟 DOM 上应用这些变化然后使用 Diff 算法来确定如何最有效地更新真实的 DOM。 实现虚拟 DOM 节点 首先我们需要一个函数来创建虚拟 DOM 节点。这个函数被称为 h代表 HyperScript它接收节点的类型如 div、span、属性和子节点并返回一个虚拟节点对象。 function h(tag, props, ...children) {return { tag, props, children }; }渲染虚拟 DOM 接下来我们需要一个 render 函数将虚拟 DOM 节点渲染到真实的 DOM 上。 function render(vnode, container) {if (typeof vnode string) {const textNode document.createTextNode(vnode);container.appendChild(textNode);return;}const el document.createElement(vnode.tag);if (vnode.props) {Object.keys(vnode.props).forEach(key {el.setAttribute(key, vnode.props[key]);});}if (vnode.children) {vnode.children.forEach(child render(child, el));}container.appendChild(el); }实现 Diff 算法 Diff 算法是用来比较新旧虚拟 DOM 树的差异并更新真实 DOM 的关键部分。以下是 Diff 算法的简化实现 function patch(oldVnode, newVnode, container) {// 如果节点类型不同则替换整个节点if (oldVnode.tag ! newVnode.tag) {container.replaceChild(render(newVnode), container.firstChild);return;}// 更新文本节点if (typeof newVnode string) {if (oldVnode ! newVnode) {container.textContent newVnode;}return;}// 对子节点进行 Diff 操作const oldChildren oldVnode.children || [];const newChildren newVnode.children || [];for (let i 0; i newChildren.length || i oldChildren.length; i) {const oldChild oldChildren[i];const newChild newChildren[i];if (newChild) {if (oldChild) {patch(oldChild, newChild, container.childNodes[i]);} else {render(newChild, container);}} else if (oldChild) {container.removeChild(container.childNodes[i]);}} }完整示例 !DOCTYPE html html langen headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleVue 3 简易虚拟 DOM 和 Diff 算法/title /head bodydiv idapp/divscript// 创建虚拟 DOM 节点的函数function h(tag, props, ...children) {return { tag, props, children };}// 将虚拟 DOM 渲染到真实 DOM 的函数function render(vnode, container) {if (typeof vnode string) {const textNode document.createTextNode(vnode);container.appendChild(textNode);return;}const el document.createElement(vnode.tag);if (vnode.props) {Object.keys(vnode.props).forEach(key {el.setAttribute(key, vnode.props[key]);});}if (vnode.children) {vnode.children.forEach(child render(child, el));}container.appendChild(el);}// Diff 算法的简化实现// 更新节点的 Diff 算法实现function patch(oldVnode, newVnode, container) {// 如果旧节点和新节点相同无需更新if (oldVnode newVnode) {return;}// 如果新旧节点标签不同替换整个节点if (oldVnode.tag ! newVnode.tag) {const newEl render(newVnode);container.replaceChild(newEl, container.firstChild);return;}// 对文本节点进行特殊处理if (typeof newVnode string) {if (oldVnode ! newVnode) {container.textContent newVnode;}return;}// 更新属性简化处理// 更新子节点const oldChildren oldVnode.children || [];const newChildren newVnode.children || [];// 遍历新的子节点newChildren.forEach((newChild, i) {const oldChild oldChildren[i];if (oldChild) {patch(oldChild, newChild, container.childNodes[i]);} else {render(newChild, container);}});// 移除不存在的旧子节点if (oldChildren.length newChildren.length) {oldChildren.slice(newChildren.length).forEach((child, i) {container.removeChild(container.childNodes[newChildren.length i]);});}}// 创建并渲染初始虚拟 DOMconst vnode h(div, { id: app },h(h1, null, Hello, Virtual DOM),h(p, null, This is a paragraph));const container document.getElementById(app);render(vnode, container);// 创建新的虚拟 DOM 用于更新const newVnode h(div, { id: app },h(h1, null, Hello, Updated Virtual DOM),h(p, null, This is an updated paragraph));// 使用 patch 函数更新组件setTimeout(() {patch(vnode, newVnode, container);}, 3000);/script /body /html 在这个示例中我们创建并渲染了一个初始的虚拟 DOM 树。三秒后我们使用 patch 函数来更新虚拟 DOM并观察实际 DOM 中的相应变化。 小结 手动实现 Vue 3 的虚拟 DOM 和 Diff 算法可以帮助我们更深入地理解框架如何高效地处理数据变化并更新 DOM。尽管这个实现是简化的并且没有涵盖 Vue 3 源码中所有的优化和特性但仍能加强我们对vue3核心概念的理解。
http://www.yutouwan.com/news/92307/

相关文章:

  • 北京网站优化流程海尔电商网站建设方案
  • 网站建设论文html格式手机端网站html好看的模板
  • 网站总浏览量企业文化ppt模板免费
  • 常州网站建设外包杭州滨江网站建设
  • 企业网站的信息内容包括什么诸暨市建设局网站
  • 国外做外贸哪个网站好些科技馆
  • 顶尖手机网站建设济宁融合百度推广公司
  • 青羊区企业网站建设策划爱站网长尾关键词挖掘工具下载
  • 网站在哪里备案网站自适应屏幕
  • 做网站开发需要什么手机上怎么设计广告图片
  • 产品宣传网站的重点保定哪做网站好
  • 王者荣耀官方网站广东网站设计招工.
  • 建自己的网站用多少钱成都网站外包优化公司
  • 长沙好的网站建设公司深圳外贸10强公司
  • 个人网站设计模版html河南网站建设价格大全
  • 广西网站建设推荐莆田网站建设创意
  • 网站开发公司 商业计划书wordpress用户中心授权码
  • wordpress网站关键词网站建设销售方面会遇到的问题
  • 上海网站seo设计提升网站的访问速度
  • 吉安seo网站快速排名做网站生意买螃蟹
  • 从客户—管理者为某一公司做一份电子商务网站管理与维护的方案onethink 网站
  • 建永久网站企业网站搭建方案
  • 盐城网站建设有限公司制作线下交易平台网站建设
  • 建立网站的第一步食品工厂设计平面图
  • google网站管理员工具 下载wordpress 字体 图标
  • 可以自己设计一个公司的网站东莞网页平面设计
  • 网站建设进度汇报网站建设先进城市
  • 网站 工作室 建设 方案企业邮箱邮箱
  • 网站建设方案范文1000字iis 与 wordpress
  • 如何通过建立网站赚钱做静态网站的参考文献