<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Proxy on ZiYang FrontEnd Interview</title><link>https://fe-interview.pangcy.cn/tags/proxy/</link><description>Recent content in Proxy on ZiYang FrontEnd Interview</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 06 Mar 2025 13:07:39 +0800</lastBuildDate><atom:link href="https://fe-interview.pangcy.cn/tags/proxy/index.xml" rel="self" type="application/rss+xml"/><item><title>Vue3与Vue2响应式原理差异</title><link>https://fe-interview.pangcy.cn/docs/framework/vue3/vue3-01/</link><pubDate>Tue, 04 Mar 2025 07:00:31 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/framework/vue3/vue3-01/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;ul>
&lt;li>&lt;strong>核心能力维度&lt;/strong>：框架机制理解、响应式原理深度、API设计思想&lt;/li>
&lt;li>&lt;strong>技术评估点&lt;/strong>：&lt;/li>
&lt;/ul>
&lt;ol>
&lt;li>对象属性检测的全面性（新增/删除属性）&lt;/li>
&lt;li>数组监听机制差异&lt;/li>
&lt;li>响应式初始化性能特征&lt;/li>
&lt;li>数据结构支持范围扩展&lt;/li>
&lt;li>依赖收集与触发效率优化&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点">关键知识点 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>Proxy拦截能力 &amp;gt; Object.defineProperty局限性 &amp;gt; 数组方法重写机制&lt;/p>
&lt;h4 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h4>&lt;ol>
&lt;li>
&lt;p>&lt;strong>检测能力&lt;/strong>：&lt;br>
Vue2通过&lt;code>Object.defineProperty&lt;/code>劫持已有属性，新增/删除属性需&lt;code>Vue.set&lt;/code>/&lt;code>Vue.delete&lt;/code>。Vue3的&lt;code>Proxy&lt;/code>代理整个对象，通过&lt;code>get&lt;/code>/&lt;code>set&lt;/code>/&lt;code>deleteProperty&lt;/code>拦截器自动捕获所有属性变动。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>数组处理&lt;/strong>：&lt;br>
Vue2重写数组原型方法（push/pop等）并手动触发更新，但无法检测索引赋值（&lt;code>arr[2]=x&lt;/code>）和&lt;code>length&lt;/code>修改。Vue3的Proxy可直接捕获数组索引赋值、方法调用及长度变化。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>性能优化&lt;/strong>：&lt;br>
Vue2在初始化时递归遍历所有属性设置getter/setter，深层对象性能损耗大。Vue3的Proxy采用惰性劫持，仅在访问时创建响应式关联，减少初始化开销。&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h4 id="常见误区">常见误区 &lt;a href="#%e5%b8%b8%e8%a7%81%e8%af%af%e5%8c%ba" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h4>&lt;ul>
&lt;li>误以为Proxy一定更快（大规模属性访问场景Proxy开销可能更大）&lt;/li>
&lt;li>忽略Vue3仍需&lt;code>ref&lt;/code>处理基础类型（Proxy无法代理原始值）&lt;/li>
&lt;li>混淆数组响应式实现方式（Vue3仍需要特殊处理部分数组操作）&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="问题解答">问题解答 &lt;a href="#%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>Vue3的Proxy方案相比Vue2有以下关键改进：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>属性检测&lt;/strong>：Proxy原生支持属性增删检测，无需特殊API，解决Vue2的动态属性追踪痛点。&lt;/li>
&lt;li>&lt;strong>数组处理&lt;/strong>：直接响应索引赋值和&lt;code>length&lt;/code>变化，无需重写数组方法，代码更简洁。&lt;/li>
&lt;li>&lt;strong>性能优势&lt;/strong>：惰性劫持减少初始化消耗，嵌套对象性能提升约50%（Vue官方数据）。&lt;/li>
&lt;li>&lt;strong>数据结构&lt;/strong>：支持Map/Set等ES6集合类型，扩展响应式系统适用范围。&lt;/li>
&lt;/ol>
&lt;p>改进意义在于提升开发体验（减少手动干预）、降低内存占用（统一依赖存储）、提高框架性能基准。&lt;/p>
&lt;hr>
&lt;h2 id="解决方案">解决方案 &lt;a href="#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>


 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="28ad678" class="language-javascript ">
 &lt;code>// Vue2数组处理示例 
const vm = new Vue({ 
 data: { 
 list: [1,2,3] 
 }, 
 methods: { 
 update() { 
 this.list[1]5 = 5; // 不触发更新 
 this.$set(this.list, 1, 5); // 必须使用API 
 } 
 } 
}); 

// Vue3等效实现 
const state = reactive({ list: [1,2,3] }); 
state.list[1] = 5; // 自动触发响应 &lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;p>&lt;strong>可扩展性建议&lt;/strong>：&lt;/p></description></item></channel></rss>