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

四川成都网站建设有什么平台可以推广

四川成都网站建设,有什么平台可以推广,网站专题页面,中国十大建筑设计院Vue2:基于Object.defineProperty监听对象属性,需手动处理数组方法重写 Vue3:采用Proxy代理实现全量响应式,支持动态新增属性和深层嵌套对象监听 一、实现机制对比 1. Vue2:基于 Object.defineProperty • 原理&#…

Vue2:基于Object.defineProperty监听对象属性,需手动处理数组方法重写
Vue3:采用Proxy代理实现全量响应式,支持动态新增属性和深层嵌套对象监听

一、实现机制对比

1. Vue2:基于 Object.defineProperty
• 原理:通过递归遍历对象属性,为每个属性添加 getter/setter 拦截。

• 关键代码示例:

function defineReactive(obj, key) {let value = obj[key];Object.defineProperty(obj, key, {get() {console.log(`读取 ${key}:`, value);return value;},set(newVal) {console.log(`设置 ${key}:`, newVal);value = newVal;}});
}// 初始化响应式对象
const data = { a: 1 };
defineReactive(data, 'a');
data.a = 2; // 触发 setter
data.b = 3; // 新增属性,无响应式

• 核心问题:

• 无法检测动态新增/删除的属性:必须通过 Vue.setVue.delete 处理。

• 数组监听需特殊处理:重写数组方法(如 pushpop)以触发更新。

• 性能开销大:初始化时递归遍历所有属性,嵌套层级深时影响性能。

2. Vue3:基于 Proxy
• 原理:代理整个对象,拦截所有操作(包括动态属性、数组索引)。

• 关键代码示例:

function reactive(obj) {return new Proxy(obj, {get(target, key) {console.log(`读取 ${key}:`, target[key]);const value = target[key];// 惰性代理嵌套对象return (typeof value === 'object' && value !== null) ? reactive(value) : value;},set(target, key, newVal) {console.log(`设置 ${key}:`, newVal);target[key] = newVal;return true;}});
}const data = reactive({ a: 1 });
data.a = 2;     // 触发 setter
data.b = 3;     // 动态新增属性,触发 setter
data.arr = [1, 2];
data.arr.push(3); // 直接操作数组,触发更新

• 核心优势:

• 动态属性支持:自动检测新增/删除的属性。

• 原生数组操作:无需重写方法,直接通过索引或原生方法触发更新。

• 惰性代理:仅在访问嵌套对象时创建代理,减少初始化开销。


二、关键场景对比

1. 动态属性处理
• Vue2:

this.$set(this.obj, 'newKey', 'value'); // 必须使用 Vue.set

• Vue3:

obj.newKey = 'value'; // 直接赋值即可触发响应式

2. 数组操作
• Vue2:

// 必须通过变异方法触发更新
this.list.splice(index, 1, newValue);

• Vue3:

list[index] = newValue; // 直接通过索引修改
list.push(4);           // 直接调用原生 push

3. 深层嵌套对象
• Vue2:初始化时递归遍历所有嵌套对象,转换为响应式。

data() {return {obj: {nested: { a: 1 } // 初始化时递归处理}}
}

• Vue3:按需代理,访问时创建响应式。

const obj = reactive({ nested: null });
obj.nested = { a: 1 }; // 赋值时自动代理嵌套对象

三、性能优化对比

维度Vue2Vue3
初始化速度立即递归所有属性,数据量大时慢按需代理,首次访问时处理,更快
内存占用每个属性创建闭包,内存消耗高共享 Proxy Handler,内存占用更低
更新触发依赖 Watcher 通知,可能触发冗余更新基于依赖追踪,精准触发相关组件更新
复杂数据结构仅支持 Object/Array支持 Map/Set/WeakMap 等 ES6 数据结构

四、API 设计与底层机制

1. 依赖收集
• Vue2:通过 Dep 类和 Watcher 实现。

class Dep {constructor() {this.subs = [];}depend() {if (Dep.target) this.subs.push(Dep.target);}notify() {this.subs.forEach(watcher => watcher.update());}
}

• Vue3:基于 WeakMapeffect 函数。

const targetMap = new WeakMap();
function track(target, key) {const effect = activeEffect;let depsMap = targetMap.get(target);if (!depsMap) targetMap.set(target, (depsMap = new Map()));let dep = depsMap.get(key);if (!dep) depsMap.set(key, (dep = new Set()));dep.add(effect);
}

2. 响应式 API 分层
• Vue3 提供多种 API:

reactive():深度代理对象。

shallowReactive():仅代理第一层属性。

ref():包装基本类型(通过 .value 访问)。

computed():独立计算属性。

3. 更新触发机制
• Vue2:同步触发 Watcher 更新,可能导致多次渲染。

• Vue3:异步批量更新,通过调度器合并多次变更,减少重复渲染。


五、设计哲学与总结

  1. 解决 Vue2 痛点:
    • 动态属性无需手动处理,减少开发心智负担。

    • 更好的性能表现,尤其在大型应用中。

  2. 扩展性与灵活性:
    • 独立的响应式系统,可与 Composition API 结合。

    • 支持更多数据类型,适应复杂场景。

  3. 未来友好:
    • 基于 Proxy 的实现更适应 ES6+ 标准。

    • 更易实现 Tree-shaking,优化打包体积。


总结:
Vue3 的响应式系统通过 Proxy 彻底解决了 Vue2 在动态属性、数组操作和性能上的瓶颈,同时提供更灵活的 API 和更精准的依赖追踪,是前端框架响应式设计的一次重大升级。


文章转载自:

http://01vY8w8i.mnmrx.cn
http://RQzRVwCe.mnmrx.cn
http://kcQqfouB.mnmrx.cn
http://ai7uMgNE.mnmrx.cn
http://yD9mPJom.mnmrx.cn
http://mHLDpmxD.mnmrx.cn
http://IAv9qdSQ.mnmrx.cn
http://04o9L2UM.mnmrx.cn
http://2THvpbOJ.mnmrx.cn
http://4eY5z5HQ.mnmrx.cn
http://iMglzgrY.mnmrx.cn
http://wFIxC0M6.mnmrx.cn
http://6qwL1hdY.mnmrx.cn
http://w08AGLbr.mnmrx.cn
http://blUCMlBO.mnmrx.cn
http://TYT2eDcu.mnmrx.cn
http://UD3JgeeK.mnmrx.cn
http://YDoCRxrX.mnmrx.cn
http://xysh8Byy.mnmrx.cn
http://7D2F043h.mnmrx.cn
http://oQjWqjKW.mnmrx.cn
http://97KV0AQ2.mnmrx.cn
http://Y7GYgMIY.mnmrx.cn
http://x67tMYOo.mnmrx.cn
http://rkuw0Ugw.mnmrx.cn
http://XxpF3YV9.mnmrx.cn
http://LcTMAAic.mnmrx.cn
http://jRIkCPdT.mnmrx.cn
http://uQIr44JX.mnmrx.cn
http://7lQdeaJ5.mnmrx.cn
http://www.dtcms.com/wzjs/634921.html

相关文章:

  • 建文帝网站建设app制作的网站
  • 百度网站建设在哪市场调研公司的最主要职能是
  • 视频网站的制作教程全案营销的案例及成功案例
  • 公司网站备案需要什么网站的域名用文字搜索怎么做
  • 北京婚恋网站哪家最好网页打不开无法访问此网站
  • 小说网站做封面要钱吗有哪些网页游戏网站
  • 南宁青秀万达网站建设做家教网站资质
  • 做网站好一点的公司沙市做网站weisword
  • 宝安做棋牌网站建设哪家技术好域名 备案号 网站的关系
  • 宁德蕉城住房和城乡建设部网站温州建设银行支行网站
  • 域名还没备案可以做网站吗重庆建筑信息网官网
  • 如何给网站续费东营网站建设制作
  • 制作企业网站的app新网站建设的工作
  • 佛山网站建设模板最新消息今天的新闻
  • 郑州h5网站建设价格怎么开发微信网站
  • 找网站做任务领q币网站营销的分类有哪些
  • 老域名做网站好吗一个网站是如何建设
  • 建设网站的一般过程专门做酒店的网站
  • 荆州哪有做网站的公司重庆网站目录
  • 房产网站加盟网站建设期末实践报告
  • 小语种网站建设要点一个网站绑定多个域名
  • 美食网站开发的难点成都专业小程序开发公司
  • 如何设置便于搜索引擎收录的网站结构wordpress 评论主题
  • 南京网站推广公司在线学做网站
  • intitle 律师网站建设的重要性网页链接制作生成
  • 怎么自己做论坛网站吗西安网站建设q.479185700強
  • 成都网站优化推广大图网
  • 厦门 网站建设公司电话广告牌模板图片
  • 南宁公司建站模板wordpress 主题 网址导航
  • 网站不备案做优化仙游哪里可以做网站的