<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>模板编译 on ZiYang FrontEnd Interview</title><link>https://fe-interview.pangcy.cn/tags/%E6%A8%A1%E6%9D%BF%E7%BC%96%E8%AF%91/</link><description>Recent content in 模板编译 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/%E6%A8%A1%E6%9D%BF%E7%BC%96%E8%AF%91/index.xml" rel="self" type="application/rss+xml"/><item><title>保留模板中HTML注释的方法</title><link>https://fe-interview.pangcy.cn/docs/framework/vue2/vue2-17/</link><pubDate>Tue, 04 Mar 2025 07:00:27 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/framework/vue2/vue2-17/</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;p>本题主要考核以下两个核心维度：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Vue 编译机制理解&lt;/strong>：考察对 Vue 模板编译流程的掌握程度，包括编译时配置选项对最终输出的影响&lt;/li>
&lt;li>&lt;strong>构建工具集成能力&lt;/strong>：检验是否了解 Vue 配置如何与 Webpack/Vite 等构建工具协同工作&lt;/li>
&lt;/ol>
&lt;p>具体评估点：&lt;/p>
&lt;ul>
&lt;li>编译器选项 &lt;code>comments&lt;/code> 的作用与配置位置&lt;/li>
&lt;li>生产环境构建时保留注释的特殊处理&lt;/li>
&lt;li>构建工具（webpack/vite）中 Vue 编译器的配置方式&lt;/li>
&lt;li>注释保留与其他优化流程（如代码压缩）的冲突处理&lt;/li>
&lt;/ul>
&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;ol>
&lt;li>Vue 模板编译器配置 &amp;gt; 构建工具集成 &amp;gt; 生产环境优化策略&lt;/li>
&lt;li>核心机制：Vue 模板编译时通过 &lt;code>compilerOptions&lt;/code> 控制 AST 转换&lt;/li>
&lt;/ol>
&lt;h3 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;/h3>&lt;p>Vue 的模板编译器在将模板转换为虚拟 DOM 渲染函数时，会通过 &lt;a href="https://github.com/vuejs/core/blob/main/packages/compiler-core/src/parse.ts" rel="external" target="_blank">parse 阶段&lt;svg width="16" height="16" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">&lt;path fill="currentColor" d="M14 5c-.552 0-1-.448-1-1s.448-1 1-1h6c.552 0 1 .448 1 1v6c0 .552-.448 1-1 1s-1-.448-1-1v-3.586l-7.293 7.293c-.391.39-1.024.39-1.414 0-.391-.391-.391-1.024 0-1.414l7.293-7.293h-3.586zm-9 2c-.552 0-1 .448-1 1v11c0 .552.448 1 1 1h11c.552 0 1-.448 1-1v-4.563c0-.552.448-1 1-1s1 .448 1 1v4.563c0 1.657-1.343 3-3 3h-11c-1.657 0-3-1.343-3-3v-11c0-1.657 1.343-3 3-3h4.563c.552 0 1 .448 1 1s-.448 1-1 1h-4.563z"/>&lt;/svg>&lt;/a> 生成抽象语法树（AST）。默认情况下，解析器会通过 &lt;code>ignoreComment&lt;/code> 参数过滤注释节点（&lt;code>NodeTypes.COMMENT&lt;/code>）。&lt;/p></description></item><item><title>Vue模板引擎的实现原理</title><link>https://fe-interview.pangcy.cn/docs/framework/vue2/vue2-18/</link><pubDate>Tue, 04 Mar 2025 07:00:27 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/framework/vue2/vue2-18/</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;p>本题主要考察以下核心能力维度：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>模板编译机制理解&lt;/strong>：能否系统描述Vue模板到渲染函数的完整编译链路&lt;/li>
&lt;li>&lt;strong>AST应用能力&lt;/strong>：是否掌握AST在模板解析中的核心作用及构建方法&lt;/li>
&lt;li>&lt;strong>性能优化意识&lt;/strong>：是否理解静态节点标记优化的原理及对渲染性能的提升作用&lt;/li>
&lt;li>&lt;strong>框架设计思维&lt;/strong>：能否阐述模板语法与虚拟DOM(Virtual DOM)的衔接机制&lt;/li>
&lt;/ol>
&lt;p>具体技术评估点：&lt;/p>
&lt;ul>
&lt;li>模板解析器构建AST的过程&lt;/li>
&lt;li>静态节点检测算法与提升策略&lt;/li>
&lt;li>渲染函数代码生成模式&lt;/li>
&lt;li>编译时优化与运行时优化的协同&lt;/li>
&lt;li>模板语法到虚拟DOM的转换规则&lt;/li>
&lt;/ul>
&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>模板解析 &amp;gt; 静态优化 &amp;gt; 代码生成 &amp;gt; 虚拟DOM映射&lt;/p>
&lt;h3 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;/h3>&lt;ol>
&lt;li>
&lt;p>&lt;strong>模板解析阶段&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>通过正则表达式和状态机将模板字符串解析为AST（Abstract Syntax Tree）&lt;/p>
&lt;/li>
&lt;li>
&lt;p>识别元素类型（元素节点/文本节点/表达式）、属性、指令等结构&lt;/p>
&lt;/li>
&lt;li>
&lt;p>示例AST节点结构：&lt;/p>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="6971466" class="language-javascript ">
 &lt;code>{
 type: 1, // 节点类型
 tag: &amp;#39;div&amp;#39;,
 attrsList: [{name: &amp;#39;v-if&amp;#39;, value: &amp;#39;isShow&amp;#39;}],
 children: [
 {type: 2, text: &amp;#39;{{message}}&amp;#39;}
 ]
}&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>静态优化阶段&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>深度遍历AST标记静态节点（static: true）&lt;/li>
&lt;li>静态节点特征：无动态绑定（v-if/v-for）、无插值表达式、无组件引用&lt;/li>
&lt;li>缓存静态子树，在patch阶段直接复用DOM节点&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>代码生成阶段&lt;/strong>：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>将AST转换为渲染函数字符串，通过new Function创建可执行函数&lt;/p>
&lt;/li>
&lt;li>
&lt;p>生成结构示例：&lt;/p>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="109af1d" class="language-javascript ">
 &lt;code>`with(this){return _c(&amp;#39;div&amp;#39;,{attrs:{&amp;#34;id&amp;#34;:&amp;#34;app&amp;#34;}},[...])}`&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;/li>
&lt;li>
&lt;p>_c对应createElement方法，生成虚拟DOM节点&lt;/p></description></item><item><title>组件模板单根限制与Vue3变化</title><link>https://fe-interview.pangcy.cn/docs/framework/vue2/vue2-20/</link><pubDate>Tue, 04 Mar 2025 07:00:27 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/framework/vue2/vue2-20/</guid><description>&lt;h2 id="组件模板单根限制与vue3变化">组件模板单根限制与Vue3变化 &lt;a href="#%e7%bb%84%e4%bb%b6%e6%a8%a1%e6%9d%bf%e5%8d%95%e6%a0%b9%e9%99%90%e5%88%b6%e4%b8%8evue3%e5%8f%98%e5%8c%96" 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="#%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;/h3>&lt;ol>
&lt;li>&lt;strong>虚拟DOM理解&lt;/strong>：通过模板单根限制考察对VDOM Diff算法底层机制的掌握&lt;/li>
&lt;li>&lt;strong>框架演进认知&lt;/strong>：评估对Vue2到Vue3架构改进方向的洞察力&lt;/li>
&lt;li>&lt;strong>渲染机制对比&lt;/strong>：考察对Patch过程与组件树结构关系的深度理解&lt;/li>
&lt;li>&lt;strong>框架设计思维&lt;/strong>：理解API限制与底层实现的因果关系&lt;/li>
&lt;/ol>
&lt;p>技术评估点：&lt;/p>
&lt;ul>
&lt;li>VDOM树形结构与Patch算法&lt;/li>
&lt;li>Fragment组件的实现原理&lt;/li>
&lt;li>模板编译阶段的AST处理&lt;/li>
&lt;li>动静结合的Diff优化策略&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 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;/h3>&lt;h4 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;/h4>&lt;p>虚拟DOM Diff &amp;gt; 模板编译 &amp;gt; Fragment组件 &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;p>Vue2的模板编译会将组件模板转换为&lt;code>render&lt;/code>函数，该函数必须返回单个VNode节点。当存在多个根节点时，虚拟DOM的diff算法（patch过程）将无法确定更新锚点。Vue2采用深度优先的递归diff策略，必须通过根VNode建立完整的组件树结构。&lt;/p>
&lt;p>Vue3通过引入Fragment节点类型实现多根支持。编译阶段自动检测根节点数量，当检测到多个根元素时，自动用Fragment包裹。新的快速Diff算法通过Block Tree结构标记动态节点，使得Fragment内的多个根节点可以独立进行靶向更新。&lt;/p>
&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>认为单根限制是HTML规范要求（实际是框架实现限制）&lt;/li>
&lt;li>错误理解编译后的render函数结构&lt;/li>
&lt;li>混淆模板语法限制与运行时机制&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h3 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;/h3>&lt;p>Vue2强制单根的核心原因是其虚拟DOM的diff算法需要明确的组件树入口节点。当存在多个根节点时，无法确定patch过程的起始位置，可能导致DOM更新错乱。Vue3通过重构虚拟DOM机制，引入Fragment作为逻辑包裹节点，在编译阶段自动处理多根模板，配合基于Block Tree的靶向更新策略，在保持性能的同时解除限制。&lt;/p>
&lt;p>具体演进：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Vue2&lt;/strong>通过&lt;code>_vnode&lt;/code>属性维护组件根节点，更新时必须基于单一VNode进行比对&lt;/li>
&lt;li>&lt;strong>Vue3&lt;/strong>将模板编译为包含Block节点的树结构，通过&lt;code>shapeFlag&lt;/code>标记动态节点类型&lt;/li>
&lt;li>&lt;strong>Patch阶段&lt;/strong>对Fragment采用特殊处理逻辑，追踪其children数组进行顺序diff&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h3 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;/h3>&lt;h4 id="编译差异示例">编译差异示例 &lt;a href="#%e7%bc%96%e8%af%91%e5%b7%ae%e5%bc%82%e7%a4%ba%e4%be%8b" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h4>


 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="4e66f1a" class="language-javascript ">
 &lt;code>// Vue2多根模板（非法）
&amp;lt;template&amp;gt;
 &amp;lt;div&amp;gt;A&amp;lt;/div&amp;gt;
 &amp;lt;div&amp;gt;B&amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

// Vue3等效编译输出
import { createVNode as _createVNode, Fragment as _Fragment } from &amp;#34;vue&amp;#34;

return (_openBlock(),
_createVNode(_Fragment, null, [
 _createVNode(&amp;#34;div&amp;#34;, null, &amp;#34;A&amp;#34;),
 _createVNode(&amp;#34;div&amp;#34;, null, &amp;#34;B&amp;#34;)
], 64)) // 64是shapeFlag的标识值&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;h4 id="优化策略">优化策略 &lt;a href="#%e4%bc%98%e5%8c%96%e7%ad%96%e7%95%a5" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h4>&lt;ol>
&lt;li>&lt;strong>静态提升&lt;/strong>：多根节点中的静态内容被提取到render函数外部&lt;/li>
&lt;li>&lt;strong>Block树缓存&lt;/strong>：动态节点位置信息被记录，避免全树遍历&lt;/li>
&lt;li>&lt;strong>补丁标记&lt;/strong>：使用二进制位运算快速判断节点类型&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h3 id="深度追问">深度追问 &lt;a href="#%e6%b7%b1%e5%ba%a6%e8%bf%bd%e9%97%ae" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>
&lt;p>&lt;strong>Vue3的Teleport组件如何影响DOM结构？&lt;/strong>
答：脱离当前组件DOM树，通过Portal机制挂载到目标节点&lt;/p></description></item><item><title>模板编译与虚拟DOM的协同机制</title><link>https://fe-interview.pangcy.cn/docs/framework/vue2/vue2-48/</link><pubDate>Tue, 04 Mar 2025 07:00:27 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/framework/vue2/vue2-48/</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;p>本题主要考察以下核心能力维度：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>编译器工作原理&lt;/strong>：理解模板字符串到AST的转换过程及优化策略&lt;/li>
&lt;li>&lt;strong>渲染机制设计&lt;/strong>：掌握虚拟DOM与真实DOM的映射关系及更新策略&lt;/li>
&lt;li>&lt;strong>性能优化思维&lt;/strong>：识别编译阶段优化与运行时优化的协同机制&lt;/li>
&lt;/ol>
&lt;p>具体技术评估点包括：&lt;/p>
&lt;ul>
&lt;li>AST转换过程中的静态节点标记&lt;/li>
&lt;li>渲染函数生成机制与createElement调用关系&lt;/li>
&lt;li>diff算法的同层比较策略与key的作用原理&lt;/li>
&lt;li>编译时优化（示例场景：当检测到&lt;code>&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;&lt;/code>这样无动态绑定的节点时，会在AST树中标记为静态节点）&lt;/li>
&lt;/ul>
&lt;h3 id="关键步骤">关键步骤 &lt;a href="#%e5%85%b3%e9%94%ae%e6%ad%a5%e9%aa%a4" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>&lt;strong>动态标记分析&lt;/strong>：编译器通过遍历AST检测动态绑定（如&lt;code>v-bind&lt;/code>、&lt;code>{{}}&lt;/code>插值）&lt;/li>
&lt;li>&lt;strong>代码生成策略&lt;/strong>：将动态节点转换为&lt;code>_c()&lt;/code>&lt;/li>
&lt;li>&lt;strong>性能收益&lt;/strong>：更新时直接复用静态子树，跳过diff计算&lt;/li>
&lt;/ol>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="f96bfbb" class="language-javascript ">
 &lt;code>// 编译生成的渲染函数示例
function render() {
 return _c(&amp;#39;div&amp;#39;, { attrs: { id: &amp;#34;app&amp;#34; } }, [
 _c(&amp;#39;p&amp;#39;, &amp;#39;静态节点&amp;#39;), // 静态节点会被提升
 _c(&amp;#39;span&amp;#39;, this.message) // 动态节点
 ])
}&lt;/code>
 &lt;/pre>
 &lt;/div>
&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>Vue模板编译通过&lt;strong>三阶段转换&lt;/strong>实现高效渲染：首先将模板解析为包含语义的AST，通过&lt;strong>静态分析&lt;/strong>标记不可变节点；接着生成包含&lt;code>createElement&lt;/code>调用的渲染函数；运行时通过&lt;strong>双缓存虚拟DOM&lt;/strong>配合&lt;strong>分层diff算法&lt;/strong>，在组件更新时：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>同层复用&lt;/strong>：仅比较相同层级的vnode&lt;/li>
&lt;li>&lt;strong>静态跳过&lt;/strong>：通过编译时标记直接跳过静态子树&lt;/li>
&lt;li>&lt;strong>Key优化&lt;/strong>：通过key比对实现列表元素最小更新&lt;/li>
&lt;/ol>
&lt;p>该机制使得Vue在保证声明式开发体验的同时，通过编译优化+智能diff策略达到接近手动优化的性能。&lt;/p>
&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;h3 id="编译优化示例">编译优化示例 &lt;a href="#%e7%bc%96%e8%af%91%e4%bc%98%e5%8c%96%e7%a4%ba%e4%be%8b" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>


 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="09c6990" class="language-javascript ">
 &lt;code>// 原始模板
&amp;lt;div&amp;gt;
 &amp;lt;span&amp;gt;静态节点&amp;lt;/span&amp;gt;
 &amp;lt;p&amp;gt;{{ dynamicText }}&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;

// 生成的AST优化标记
{
 tag: &amp;#39;div&amp;#39;,
 children: [
 { tag: &amp;#39;span&amp;#39;, isStatic: true }, 
 { tag: &amp;#39;p&amp;#39;, isStatic: false }
 ]
}

// 对应的渲染函数
function render() {
 return _c(&amp;#39;div&amp;#39;, [
 _c(&amp;#39;span&amp;#39;, &amp;#39;静态节点&amp;#39;), // 静态节点直接复用
 _c(&amp;#39;p&amp;#39;, this.dynamicText) 
 ])
}&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;h3 id="可扩展性建议">可扩展性建议 &lt;a href="#%e5%8f%af%e6%89%a9%e5%b1%95%e6%80%a7%e5%bb%ba%e8%ae%ae" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>&lt;strong>大流量场景&lt;/strong>：结合SSR服务端渲染时，预编译静态内容&lt;/li>
&lt;li>&lt;strong>低端设备&lt;/strong>：通过&lt;code>@vue/compat&lt;/code>关闭非必要特性减少运行时开销&lt;/li>
&lt;li>&lt;strong>超长列表&lt;/strong>：配合&lt;code>v-memo&lt;/code>缓存子树避免无效diff&lt;/li>
&lt;/ol>
&lt;h2 id="深度追问">深度追问 &lt;a href="#%e6%b7%b1%e5%ba%a6%e8%bf%bd%e9%97%ae" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="问题1为什么v-for需要key属性">问题1：为什么v-for需要key属性？ &lt;a href="#%e9%97%ae%e9%a2%981%e4%b8%ba%e4%bb%80%e4%b9%88v-for%e9%9c%80%e8%a6%81key%e5%b1%9e%e6%80%a7" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>&lt;strong>考察点&lt;/strong>：虚拟DOM复用策略中key的作用机制&lt;br>
&lt;strong>提示&lt;/strong>：通过key建立新旧vnode映射关系，避免错误复用DOM节点&lt;/p></description></item></channel></rss>