<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Angular性能优化实践 on 雪狼的书斋</title>
    <link>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/</link>
    <description>Recent content in Angular性能优化实践 on 雪狼的书斋</description>
    <generator>Hugo</generator>
    <language>zh-hans</language>
    <atom:link href="/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>1.Angular应用“加速”秘籍：让你的用户不再等待！</title>
      <link>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/010-angular%E5%BA%94%E7%94%A8%E5%8A%A0%E9%80%9F%E7%A7%98%E7%B1%8D%E8%AE%A9%E4%BD%A0%E7%9A%84%E7%94%A8%E6%88%B7%E4%B8%8D%E5%86%8D%E7%AD%89%E5%BE%85/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/010-angular%E5%BA%94%E7%94%A8%E5%8A%A0%E9%80%9F%E7%A7%98%E7%B1%8D%E8%AE%A9%E4%BD%A0%E7%9A%84%E7%94%A8%E6%88%B7%E4%B8%8D%E5%86%8D%E7%AD%89%E5%BE%85/</guid>
      <description>&lt;p&gt;想象一下，你的网站是一家餐厅。一位饥肠辘辘的顾客（用户）推门而入。他是会立刻被引导入座、并看到一份精致的菜单（首屏秒开）？还是会在门口站半天，无人问津，最终不耐烦地离去？&lt;/p&gt;&#xA;&lt;p&gt;性能，就是你这家「线上餐厅」的服务质量和生命线。一个功能再强大、界面再华丽的应用，如果慢如蜗牛，那它在用户眼中，也只是一家体验糟糕的「苍蝇馆子」。&lt;/p&gt;&#xA;&lt;p&gt;在这个「耐心」比黄金还贵的时代，让用户等待，就等于把用户推给你的竞争对手。作为一名追求卓越的工程师，「快」，应该成为我们刻在骨子里的执念。本章，雪狼将为你献上一整本 Angular 应用的「加速秘籍」，从加载到交互，全方位提升你「餐厅」的「米其林星级」。&lt;/p&gt;&#xA;&lt;h2 id=&#34;性能优化的三大支柱&#34;&gt;性能优化的三大支柱&lt;a class=&#34;anchor&#34; href=&#34;#%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%96%e7%9a%84%e4%b8%89%e5%a4%a7%e6%94%af%e6%9f%b1&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;要打造极致的性能体验，我们需要从三个维度去系统地思考和优化。这就像支撑一座大厦的三根顶梁柱，缺一不可。&lt;/p&gt;&#xA;&lt;h3 id=&#34;支柱一加载性能--决定第一印象&#34;&gt;支柱一：加载性能 —— 决定「第一印象」&lt;a class=&#34;anchor&#34; href=&#34;#%e6%94%af%e6%9f%b1%e4%b8%80%e5%8a%a0%e8%bd%bd%e6%80%a7%e8%83%bd--%e5%86%b3%e5%ae%9a%e7%ac%ac%e4%b8%80%e5%8d%b0%e8%b1%a1&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;这是用户访问你的应用时，最先感受到的性能。它决定了你的「餐厅」门面是否光鲜，迎宾是否迅速。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;核心目标&lt;/strong&gt;：让页面&lt;strong&gt;尽快&lt;/strong&gt;变得可见和可交互。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;关键指标&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;FCP (First Contentful Paint)&lt;/strong&gt;：首次内容绘制。即浏览器首次渲染出任何文本、图片等内容的时间点。这是消除用户「白屏焦虑」的第一个里程碑。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;LCP (Largest Contentful Paint)&lt;/strong&gt;：最大内容绘制。即视口中最大的图像或文本块完成渲染的时间。它标志着页面的主要内容已对用户可见。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;TTI (Time to Interactive)&lt;/strong&gt;：可交互时间。即页面已经渲染完成，并能可靠地响应用户输入（如点击）的时间。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;核心秘籍（后续章节详解）&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;代码分割&lt;/strong&gt;与&lt;strong&gt;惰性加载&lt;/strong&gt;：别在开业时就把所有厨师、服务员、食材全堆在前厅。只加载当前页面必需的资源。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;打包体积优化&lt;/strong&gt;：精简你的 JavaScript 包，每一 KB 都弥足珍贵。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;图片与资源优化&lt;/strong&gt;：对图片、字体等资源进行压缩和格式转换。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;服务端渲染 (SSR)&lt;/strong&gt;：直接给用户一个「预制菜」，而不是让他看着你从和面开始。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;支柱二运行时性能--保证丝般顺滑&#34;&gt;支柱二：运行时性能 —— 保证「丝般顺滑」&lt;a class=&#34;anchor&#34; href=&#34;#%e6%94%af%e6%9f%b1%e4%ba%8c%e8%bf%90%e8%a1%8c%e6%97%b6%e6%80%a7%e8%83%bd--%e4%bf%9d%e8%af%81%e4%b8%9d%e8%88%ac%e9%a1%ba%e6%bb%91&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;当应用加载完成后，用户在其中进行各种操作（滚动、点击、输入）时的体验，就是运行时性能。它决定了你的「餐厅」服务是否「丝般顺滑」。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;核心目标&lt;/strong&gt;：确保应用对用户的操作能&lt;strong&gt;立即&lt;/strong&gt;给出反馈，动画流畅，无卡顿感。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;关键指标&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;INP (Interaction to Next Paint)&lt;/strong&gt;：下一次绘制的交互延迟。这是谷歌新推出的、即将取代 FID 的核心指标，衡量从用户交互到下一次屏幕更新的时间，直接反映应用的响应能力。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;TBT (Total Blocking Time)&lt;/strong&gt;：总阻塞时间。衡量在 FCP 和 TTI 之间，主线程被长任务阻塞的总时间。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;FPS (Frames Per Second)&lt;/strong&gt;：每秒帧率。动画或滚动时，低于 60fps 就会让用户感到卡顿。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;核心秘籍（后续章节详解）&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;变更检测策略优化 (&lt;code&gt;OnPush&lt;/code&gt; / Signals)&lt;/strong&gt;：别让你的服务员（变更检测）在餐厅里「无头苍蝇」般乱窜。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;长列表渲染优化 (&lt;code&gt;@for&lt;/code&gt; / 虚拟滚动)&lt;/strong&gt;：高效地管理你的「大菜单」。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2.Web Vitals与Angular：如何让你的应用在谷歌评分中“C位出道”</title>
      <link>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/020-web-vitals%E4%B8%8Eangular%E5%A6%82%E4%BD%95%E8%AE%A9%E4%BD%A0%E7%9A%84%E5%BA%94%E7%94%A8%E5%9C%A8%E8%B0%B7%E6%AD%8C%E8%AF%84%E5%88%86%E4%B8%ADc%E4%BD%8D%E5%87%BA%E9%81%93/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/020-web-vitals%E4%B8%8Eangular%E5%A6%82%E4%BD%95%E8%AE%A9%E4%BD%A0%E7%9A%84%E5%BA%94%E7%94%A8%E5%9C%A8%E8%B0%B7%E6%AD%8C%E8%AF%84%E5%88%86%E4%B8%ADc%E4%BD%8D%E5%87%BA%E9%81%93/</guid>
      <description>&lt;p&gt;在如今这个流量为王的时代，网站的「酒香」，也怕「巷子深」。如何让自己的网站在 Google 搜索结果中脱颖而出，获得更高的排名？除了优质的内容，你还必须通过一场由 Google 主持的、极其严格的「用户体验海选」。&lt;/p&gt;&#xA;&lt;p&gt;这场「海选」的核心评判标准，就是 &lt;strong&gt;核心 Web 指标（Core Web Vitals）&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;它们是 Google 用来量化你网站用户体验的三位「铁面评委」。今天，雪狼就化身「金牌导师」，为你深度解读这三位评委的「打分标准」，并传授一套专门针对 Angular 应用的「应试技巧」，助你的应用在这场海选中征服评委，最终「C 位出道」！&lt;/p&gt;&#xA;&lt;h2 id=&#34;认识三位评委lcp-inp-cls&#34;&gt;认识三位「评委」：LCP, INP, CLS&lt;a class=&#34;anchor&#34; href=&#34;#%e8%ae%a4%e8%af%86%e4%b8%89%e4%bd%8d%e8%af%84%e5%a7%94lcp-inp-cls&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-lcp-评委-largest-contentful-paint---视觉呈现导师&#34;&gt;1. LCP 评委 (Largest Contentful Paint) - 「视觉呈现」导师&lt;a class=&#34;anchor&#34; href=&#34;#1-lcp-%e8%af%84%e5%a7%94-largest-contentful-paint---%e8%a7%86%e8%a7%89%e5%91%88%e7%8e%b0%e5%af%bc%e5%b8%88&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;考核内容&lt;/strong&gt;：&lt;strong&gt;加载性能&lt;/strong&gt;。它测量的是页面主要内容（通常是最大的图片或文本块）加载完成并显示出来所需的时间。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;评委心声&lt;/strong&gt;：「别让我盯着白屏发呆！我要看干货，越快越好！」&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;高分标准&lt;/strong&gt;：&lt;strong&gt;低于 2.5 秒&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;2-inp-评委-interaction-to-next-paint---交互响应导师&#34;&gt;2. INP 评委 (Interaction to Next Paint) - 「交互响应」导师&lt;a class=&#34;anchor&#34; href=&#34;#2-inp-%e8%af%84%e5%a7%94-interaction-to-next-paint---%e4%ba%a4%e4%ba%92%e5%93%8d%e5%ba%94%e5%af%bc%e5%b8%88&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;考核内容&lt;/strong&gt;：&lt;strong&gt;响应速度&lt;/strong&gt;。它测量的是从用户进行交互（点击、输入等）到屏幕上出现下一个视觉反馈的全部时长。它代表了应用的「跟手程度」。（注意：它正在取代旧的 FID 指标）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;评委心声&lt;/strong&gt;：「我点了你，你倒是给点反应啊！别像个木头人！」&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;高分标准&lt;/strong&gt;：&lt;strong&gt;低于 200 毫秒&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;3-cls-评委-cumulative-layout-shift---舞台稳定导师&#34;&gt;3. CLS 评委 (Cumulative Layout Shift) - 「舞台稳定」导师&lt;a class=&#34;anchor&#34; href=&#34;#3-cls-%e8%af%84%e5%a7%94-cumulative-layout-shift---%e8%88%9e%e5%8f%b0%e7%a8%b3%e5%ae%9a%e5%af%bc%e5%b8%88&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;考核内容&lt;/strong&gt;：&lt;strong&gt;视觉稳定性&lt;/strong&gt;。它测量的是在加载过程中，页面内容非预期的「跳动」程度。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;评委心声&lt;/strong&gt;：「我正要点那个按钮，『pia』的一下广告弹出来，按钮被挤下去了！这种体验简直是灾难！」&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;高分标准&lt;/strong&gt;：&lt;strong&gt;低于 0.1&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;angular_web_vitals_images/judges.jpg&#34; alt=&#34;文生图：三位拟人化的评委坐在评委席。中间的LCP评委举着“2.5s”的牌子，表情严肃。左边的INP评委举着“200ms”的牌子，手指在敲桌子，显得不耐烦。右边的CLS评委戴着安全帽，举着“0.1”的牌子，看起来很注重稳定。舞台中央是Angular Logo，正在闪闪发光。风格：趣味漫画、卡通。&#34; /&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;angular-的应试宝典逐个击破&#34;&gt;Angular 的「应试宝典」：逐个击破&lt;a class=&#34;anchor&#34; href=&#34;#angular-%e7%9a%84%e5%ba%94%e8%af%95%e5%ae%9d%e5%85%b8%e9%80%90%e4%b8%aa%e5%87%bb%e7%a0%b4&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;攻略一冲刺-lcp-加载速度&#34;&gt;攻略一：冲刺 LCP (加载速度)&lt;a class=&#34;anchor&#34; href=&#34;#%e6%94%bb%e7%95%a5%e4%b8%80%e5%86%b2%e5%88%ba-lcp-%e5%8a%a0%e8%bd%bd%e9%80%9f%e5%ba%a6&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;LCP 的瓶颈，通常在于初始加载的 JavaScript 体积过大，或者关键资源（如主图）加载过慢。&lt;/p&gt;</description>
    </item>
    <item>
      <title>3.Angular惰性加载：提升首屏速度的“障眼法”</title>
      <link>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/030-angular%E6%83%B0%E6%80%A7%E5%8A%A0%E8%BD%BD%E6%8F%90%E5%8D%87%E9%A6%96%E5%B1%8F%E9%80%9F%E5%BA%A6%E7%9A%84%E9%9A%9C%E7%9C%BC%E6%B3%95/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/030-angular%E6%83%B0%E6%80%A7%E5%8A%A0%E8%BD%BD%E6%8F%90%E5%8D%87%E9%A6%96%E5%B1%8F%E9%80%9F%E5%BA%A6%E7%9A%84%E9%9A%9C%E7%9C%BC%E6%B3%95/</guid>
      <description>&lt;p&gt;想象一下，你要登上泰坦尼克号，开始一段豪华的海上旅程。但在登船时，船长却告诉你：「对不起，先生，我们必须等船上所有的货物 —— 包括要运往纽约、伦敦、甚至开罗的 —— 全部装载完毕后，才能启航。」 你会作何感想？&lt;/p&gt;&#xA;&lt;p&gt;听起来很荒谬，但这正是许多 Angular 应用正在做的事情。我们称之为&lt;strong&gt;饥饿加载（Eager Loading）&lt;/strong&gt;。在应用启动时，它会贪婪地、饥饿地将所有模块、所有组件、所有功能，无论用户是否需要，全部打包成一个巨大的 &lt;code&gt;main.js&lt;/code&gt; 文件，一次性塞给用户。&lt;/p&gt;&#xA;&lt;p&gt;结果就是，你的「泰坦尼克号」（应用）变得无比笨重，需要漫长的时间才能「离港」（完成首屏加载）。而在这场与用户耐心的赛跑中，你早已输在了起跑线上。&lt;/p&gt;&#xA;&lt;p&gt;今天，雪狼就来教你一手绝妙的「障眼法」 —— &lt;strong&gt;惰性加载（Lazy Loading）&lt;/strong&gt;，让你能把「巨轮」伪装成「快艇」，瞬间起航！&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是惰性加载--按需点餐的智慧&#34;&gt;什么是惰性加载？ —— 「按需点餐」的智慧&lt;a class=&#34;anchor&#34; href=&#34;#%e4%bb%80%e4%b9%88%e6%98%af%e6%83%b0%e6%80%a7%e5%8a%a0%e8%bd%bd--%e6%8c%89%e9%9c%80%e7%82%b9%e9%a4%90%e7%9a%84%e6%99%ba%e6%85%a7&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;与「自助餐」式的饥饿加载相反，惰性加载是一种「点单式」的智慧。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;饥饿加载&lt;/strong&gt;：你走进餐厅，还没坐下，餐厅就把菜单上所有的菜（包括你永远不会点的）全给你上了一遍，堆满了你的桌子。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;惰性加载&lt;/strong&gt;：你走进餐厅，服务员只递给你一本菜单（应用的核心外壳）。只有当你&lt;strong&gt;点&lt;/strong&gt;了某道菜（点击了某个功能的链接）时，厨房（服务器）才开始为你&lt;strong&gt;现做&lt;/strong&gt;这道菜（下载该功能的代码包）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;angular_lazy_load_images/eager_vs_lazy.jpg&#34; alt=&#34;文生图：一个对比图。左边“饥饿加载”，一个用户被山一样高的食物（代码）淹没，表情痛苦。右边“惰性加载”，一个用户优雅地看着菜单，服务员正端着他刚点的一盘精致菜肴走来。风格：对比鲜明的漫画。&#34; /&gt;&lt;/p&gt;&#xA;&lt;p&gt;它的核心思想，就是&lt;strong&gt;代码分割（Code Splitting）&lt;/strong&gt;。将庞大的应用，按功能或路由，拆分成一个个独立、小巧的代码块（Chunks），只在需要时才加载它们。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为何惰性加载是性能优化的第一杀手锏&#34;&gt;为何惰性加载是性能优化的「第一杀手锏」？&lt;a class=&#34;anchor&#34; href=&#34;#%e4%b8%ba%e4%bd%95%e6%83%b0%e6%80%a7%e5%8a%a0%e8%bd%bd%e6%98%af%e6%80%a7%e8%83%bd%e4%bc%98%e5%8c%96%e7%9a%84%e7%ac%ac%e4%b8%80%e6%9d%80%e6%89%8b%e9%94%8f&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;急剧缩小初始包体积&lt;/strong&gt;：这是最直接、最显著的好处。更小的 &lt;code&gt;main.js&lt;/code&gt; 意味着更快的下载、更快的解析、更快的首屏渲染。你的 LCP、FCP、TTI 指标会得到质的飞跃。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;更优的资源利用&lt;/strong&gt;：浏览器无需在启动时就为用户可能永远不会访问的「管理员后台」或「年度报表」功能，去浪费宝贵的 CPU 和内存。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;更高效的缓存&lt;/strong&gt;：每个功能模块的代码块可以被浏览器独立缓存。当你更新了「用户中心」功能时，用户只需重新下载「用户中心」那一个几十 KB 的小文件，而不是整个几 MB 的应用。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;如何施展障眼法从-loadchildren-到-loadcomponent&#34;&gt;如何施展「障眼法」：从 &lt;code&gt;loadChildren&lt;/code&gt; 到 &lt;code&gt;loadComponent&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#%e5%a6%82%e4%bd%95%e6%96%bd%e5%b1%95%e9%9a%9c%e7%9c%bc%e6%b3%95%e4%bb%8e-loadchildren-%e5%88%b0-loadcomponent&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;在现代 Angular 中，实现惰性加载的「咒语」已经全面升级，变得更加简单直接。&lt;/p&gt;&#xA;&lt;h3 id=&#34;方式一惰性加载一个独立组件-loadcomponent&#34;&gt;方式一：惰性加载一个独立组件 (&lt;code&gt;loadComponent&lt;/code&gt;)&lt;a class=&#34;anchor&#34; href=&#34;#%e6%96%b9%e5%bc%8f%e4%b8%80%e6%83%b0%e6%80%a7%e5%8a%a0%e8%bd%bd%e4%b8%80%e4%b8%aa%e7%8b%ac%e7%ab%8b%e7%bb%84%e4%bb%b6-loadcomponent&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;这是最细粒度的惰性加载，当你只需要懒加载一个作为路由入口的组件时使用。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-typescript&#34; data-lang=&#34;typescript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// app.routes.ts&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;routes&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;Routes&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;admin&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 当用户访问 /admin 时，才去下载并渲染 AdminComponent&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;loadComponent&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; () &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;import&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;./admin/admin.component&amp;#39;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;then&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AdminComponent&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;方式二惰性加载一组路由-loadchildren&#34;&gt;方式二：惰性加载一组路由 (&lt;code&gt;loadChildren&lt;/code&gt;)&lt;a class=&#34;anchor&#34; href=&#34;#%e6%96%b9%e5%bc%8f%e4%ba%8c%e6%83%b0%e6%80%a7%e5%8a%a0%e8%bd%bd%e4%b8%80%e7%bb%84%e8%b7%af%e7%94%b1-loadchildren&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;当你需要为一个完整的功能区（如「产品中心」）惰性加载其下属的所有路由时，可以使用 &lt;code&gt;loadChildren&lt;/code&gt;。它不再加载一个 &lt;code&gt;NgModule&lt;/code&gt;，而是直接加载一个包含 &lt;code&gt;Routes&lt;/code&gt; 数组的文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>4.变更检测策略：Angular性能优化的“葵花宝典”</title>
      <link>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/040-%E5%8F%98%E6%9B%B4%E6%A3%80%E6%B5%8B%E7%AD%96%E7%95%A5angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%9A%84%E8%91%B5%E8%8A%B1%E5%AE%9D%E5%85%B8/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/040-%E5%8F%98%E6%9B%B4%E6%A3%80%E6%B5%8B%E7%AD%96%E7%95%A5angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E7%9A%84%E8%91%B5%E8%8A%B1%E5%AE%9D%E5%85%B8/</guid>
      <description>&lt;p&gt;在 Angular 性能优化的武林中，流传着百般武艺：惰性加载、&lt;code&gt;@for&lt;/code&gt; 中的 &lt;code&gt;track&lt;/code&gt;、纯管道……但若论哪一本秘籍的威力最大、最能助你打通「任督二脉」，问鼎性能之巅，那无疑是变更检测策略中的 &lt;strong&gt;&lt;code&gt;OnPush&lt;/code&gt;&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;它，就是 Angular 性能优化领域的「葵花宝典」。&lt;/p&gt;&#xA;&lt;p&gt;这本宝典，威力无穷，能让你的应用「快如闪电」。但它也并非人人可练，若内功（对数据流的理解）不纯，心法（使用姿势）不当，极易「走火入魔」，陷入更深的困惑。今天，雪狼就为你完整解读这本宝典的奥义。&lt;/p&gt;&#xA;&lt;h2 id=&#34;默认之咒草木皆兵的-checkalways&#34;&gt;默认之「咒」：草木皆兵的 &lt;code&gt;CheckAlways&lt;/code&gt;&lt;a class=&#34;anchor&#34; href=&#34;#%e9%bb%98%e8%ae%a4%e4%b9%8b%e5%92%92%e8%8d%89%e6%9c%a8%e7%9a%86%e5%85%b5%e7%9a%84-checkalways&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;在修炼宝典之前，你需知晓你所要对抗的「心魔」是什么。Angular 的默认变更检测策略 &lt;code&gt;CheckAlways&lt;/code&gt;，就是一个「草木皆兵、宁枉勿纵」的偏执狂。&lt;/p&gt;&#xA;&lt;p&gt;它像一个极度缺乏安全感的将军，帐篷外任何一点风吹草动（任何异步事件），都会让他把全军将士（所有组件）都叫起来，从头到脚盘问一遍。这种策略保证了「万无一失」，但也造成了巨大的、不必要的内耗。当你的「军队」规模庞大时，这种无休止的盘问，就是卡顿和掉帧的根源。&lt;/p&gt;&#xA;&lt;h2 id=&#34;宝典心法onpush-的闭关誓言&#34;&gt;宝典心法：&lt;code&gt;OnPush&lt;/code&gt; 的「闭关」誓言&lt;a class=&#34;anchor&#34; href=&#34;#%e5%ae%9d%e5%85%b8%e5%bf%83%e6%b3%95onpush-%e7%9a%84%e9%97%ad%e5%85%b3%e8%aa%93%e8%a8%80&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;要修炼 &lt;code&gt;OnPush&lt;/code&gt;，你首先要在组件的「丹田」处（&lt;code&gt;@Component&lt;/code&gt; 装饰器），立下一个「闭关锁国」的誓言：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-typescript&#34; data-lang=&#34;typescript&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;@Component&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;//...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;changeDetection&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;ChangeDetectionStrategy.OnPush&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;})&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个誓言，是在告诉 Angular：「从此刻起，我（本组件）将与外界的凡俗杂事断绝。除非符合以下三大『天道』之一，否则，无论外界如何喧嚣（Zone.js 捕获了多少异步事件），都休想让我出关（进行变更检测）。」&lt;/p&gt;&#xA;&lt;h3 id=&#34;唤醒-onpush-组件的三大真言&#34;&gt;唤醒 &lt;code&gt;OnPush&lt;/code&gt; 组件的三大「真言」&lt;a class=&#34;anchor&#34; href=&#34;#%e5%94%a4%e9%86%92-onpush-%e7%bb%84%e4%bb%b6%e7%9a%84%e4%b8%89%e5%a4%a7%e7%9c%9f%e8%a8%80&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;一旦组件进入 &lt;code&gt;OnPush&lt;/code&gt; 的「闭关」状态，只有三句「真言」能将它唤醒：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;「父之赠」 —— &lt;code&gt;@Input&lt;/code&gt; 引用变更&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;这是最重要、最核心的一句真言。只有当父组件传递给它的 &lt;code&gt;@Input&lt;/code&gt; 属性，其&lt;strong&gt;引用&lt;/strong&gt;发生了变化时，它才会醒来。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;错误姿势&lt;/strong&gt;：&lt;code&gt;this.user.name = &#39;雪狼&#39;;&lt;/code&gt; （只改了属性，&lt;code&gt;user&lt;/code&gt;对象的地址没变，组件睡得很香，毫无反应）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;正确姿势&lt;/strong&gt;：&lt;code&gt;this.user = { ...this.user, name: &#39;雪狼&#39; };&lt;/code&gt; （创建了一个全新的 &lt;code&gt;user&lt;/code&gt; 对象，地址变了，组件被成功唤醒）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这句真言，强迫你走上「不可变数据」的光明大道。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;「己之呼」 —— 组件内部事件触发&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;当组件&lt;strong&gt;自己&lt;/strong&gt;的模板中，或其&lt;strong&gt;子孙&lt;/strong&gt;组件的模板中，有事件被触发时（如 &lt;code&gt;(click)&lt;/code&gt;），Angular 明白，这次交互很可能会改变组件自身的状态，所以它会主动唤醒该组件。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;「流之召」 —— &lt;code&gt;async&lt;/code&gt; 管道的新值&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;当你在模板中使用了 &lt;code&gt;async&lt;/code&gt; 管道，并且这个管道所订阅的 &lt;code&gt;Observable&lt;/code&gt; 发出了一个新值时，&lt;code&gt;async&lt;/code&gt; 管道这位「贴身信使」，会精准地将该组件标记为需要检查。这是 &lt;code&gt;async&lt;/code&gt; 管道的另一大美德。&lt;/p&gt;</description>
    </item>
    <item>
      <title>5.告别“卡顿”：Angular中如何优化大型列表渲染</title>
      <link>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/050-%E5%91%8A%E5%88%AB%E5%8D%A1%E9%A1%BFangular%E4%B8%AD%E5%A6%82%E4%BD%95%E4%BC%98%E5%8C%96%E5%A4%A7%E5%9E%8B%E5%88%97%E8%A1%A8%E6%B8%B2%E6%9F%93/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/050-%E5%91%8A%E5%88%AB%E5%8D%A1%E9%A1%BFangular%E4%B8%AD%E5%A6%82%E4%BD%95%E4%BC%98%E5%8C%96%E5%A4%A7%E5%9E%8B%E5%88%97%E8%A1%A8%E6%B8%B2%E6%9F%93/</guid>
      <description>&lt;p&gt;你的应用需要展示一个包含 10000 条联系人的通讯录。一个天真的想法是，直接用 &lt;code&gt;@for&lt;/code&gt; 循环，把这 10000 条数据全部渲染成 DOM 节点。&lt;/p&gt;&#xA;&lt;p&gt;这无异于打印一本一万页的电话黄页，然后「啪」的一声摔在用户面前。&lt;/p&gt;&#xA;&lt;p&gt;结果可想而知：浏览器会因为需要同时渲染和管理成千上万个 DOM 元素而「当场去世」 —— 内存爆炸、页面卡死、用户愤怒地关闭标签页。渲染大型列表，是所有前端框架都会面临的经典性能挑战。今天，雪狼就传授你几招「化繁为简」的绝学，让你能优雅地驯服这头「性能巨兽」。&lt;/p&gt;&#xA;&lt;h2 id=&#34;第一式入门心法-track--每一个-for-的标配&#34;&gt;第一式：入门心法 &lt;code&gt;track&lt;/code&gt; —— 每一个 &lt;code&gt;@for&lt;/code&gt; 的「标配」&lt;a class=&#34;anchor&#34; href=&#34;#%e7%ac%ac%e4%b8%80%e5%bc%8f%e5%85%a5%e9%97%a8%e5%bf%83%e6%b3%95-track--%e6%af%8f%e4%b8%80%e4%b8%aa-for-%e7%9a%84%e6%a0%87%e9%85%8d&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;这是基础，是内功，是你在使用 &lt;code&gt;@for&lt;/code&gt; 时，必须养成的「肌肉记忆」。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;痛苦之源&lt;/strong&gt;：如果没有 &lt;code&gt;track&lt;/code&gt;，每当你的列表数据发生任何一丁点变化（哪怕只是调换了两个元素的顺序），Angular 都会简单粗暴地销毁&lt;strong&gt;所有&lt;/strong&gt;的 DOM 元素，然后再重新创建它们。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;解救之道&lt;/strong&gt;：提供一个 &lt;code&gt;track&lt;/code&gt; 表达式，告诉 Angular 如何「识别」每一个列表项。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@for (item of items; track item.id) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;{{ item.name }}&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;div&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;track&lt;/code&gt; 表达式中，&lt;code&gt;item.id&lt;/code&gt; 应该返回一个唯一且稳定的标识符。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;效果&lt;/strong&gt;：现在，Angular 成了一位「火眼金睛」的管理者。当列表更新时，它能精确地知道哪些是新来的，哪些是离开的，哪些只是换了个位置。它只会对真正发生变化的 DOM 进行操作，大大减少了不必要的 DOM 销毁和创建。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;请记住：任何使用 &lt;code&gt;@for&lt;/code&gt; 循环的列表，都必须带上 &lt;code&gt;track&lt;/code&gt;。&lt;/strong&gt; 这是 Angular v17+ 的强制要求，也是性能的「本分」。&lt;/p&gt;&#xA;&lt;h2 id=&#34;第二式黑科技空间折叠--虚拟滚动&#34;&gt;第二式：黑科技「空间折叠」 —— 虚拟滚动&lt;a class=&#34;anchor&#34; href=&#34;#%e7%ac%ac%e4%ba%8c%e5%bc%8f%e9%bb%91%e7%a7%91%e6%8a%80%e7%a9%ba%e9%97%b4%e6%8a%98%e5%8f%a0--%e8%99%9a%e6%8b%9f%e6%bb%9a%e5%8a%a8&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;track&lt;/code&gt; 能解决数据更新时的卡顿，但它无法解决「初始渲染10000个 DOM」的性能原罪。要解决这个问题，我们需要祭出真正的「黑科技」 —— &lt;strong&gt;虚拟滚动 (Virtual Scrolling)&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>6.图片优化在Angular：如何让“图”飞起来，不拖累页面</title>
      <link>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/060-%E5%9B%BE%E7%89%87%E4%BC%98%E5%8C%96%E5%9C%A8angular%E5%A6%82%E4%BD%95%E8%AE%A9%E5%9B%BE%E9%A3%9E%E8%B5%B7%E6%9D%A5%E4%B8%8D%E6%8B%96%E7%B4%AF%E9%A1%B5%E9%9D%A2/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/060-%E5%9B%BE%E7%89%87%E4%BC%98%E5%8C%96%E5%9C%A8angular%E5%A6%82%E4%BD%95%E8%AE%A9%E5%9B%BE%E9%A3%9E%E8%B5%B7%E6%9D%A5%E4%B8%8D%E6%8B%96%E7%B4%AF%E9%A1%B5%E9%9D%A2/</guid>
      <description>&lt;p&gt;在 Web 世界里，图片是情感的载体，是吸引用户眼球的利器。但它也是一把双刃剑。一张未经优化的图片，就像一件沉重无比的实心橡木家具，能轻易让你精心设计的、本该轻盈灵动的「房间」（页面）变得拥挤、迟缓，甚至让「房客」（用户）因为搬运（加载）时间过长而拂袖而去。&lt;/p&gt;&#xA;&lt;p&gt;事实上，图片资源通常是拖慢网页速度的头号元凶。优化好它们，是性能优化里投资回报率最高的事情之一。今天，我们就来学习几招「炼金术」，让你页面上的「图」都能轻舞飞扬。&lt;/p&gt;&#xA;&lt;h2 id=&#34;原罪4000像素的原图直出&#34;&gt;原罪：4000像素的「原图」直出&lt;a class=&#34;anchor&#34; href=&#34;#%e5%8e%9f%e7%bd%aa4000%e5%83%8f%e7%b4%a0%e7%9a%84%e5%8e%9f%e5%9b%be%e7%9b%b4%e5%87%ba&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;犯罪现场&lt;/strong&gt;：设计师给了你一张 4000x3000 像素、5MB 大小的精美 &lt;code&gt;banner.png&lt;/code&gt;。你觉得很好看，直接在代码里写下了 &lt;code&gt;&amp;lt;img src=&amp;quot;assets/banner.png&amp;quot;&amp;gt;&lt;/code&gt;，而它在页面上实际显示的尺寸只有 1200x450 像素。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;恶果&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;带宽浪费&lt;/strong&gt;：用户被迫下载了一个比实际需要大十几倍的文件。在移动网络下，这简直是「谋财害命」。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;LCP 灾难&lt;/strong&gt;：作为页面的最大内容元素（LCP），这张巨图的下载和解码会耗费大量时间，导致页面核心内容迟迟无法展现。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;内存爆炸&lt;/strong&gt;：浏览器需要将这张 4000x3000 的大图解压到内存中，造成不必要的内存占用。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;strong&gt;第一诫：永远不要使用尺寸超过其显示尺寸的图片。&lt;/strong&gt; 在上传图片前，使用 Squoosh.app 或 PhotoShop 等工具，先将其裁剪到所需的最大显示尺寸。这是优化的第一步，也是最重要的一步。&lt;/p&gt;&#xA;&lt;h2 id=&#34;良材善用拥抱现代图片格式-webp&#34;&gt;良「材」善用：拥抱现代图片格式 WebP&lt;a class=&#34;anchor&#34; href=&#34;#%e8%89%af%e6%9d%90%e5%96%84%e7%94%a8%e6%8b%a5%e6%8a%b1%e7%8e%b0%e4%bb%a3%e5%9b%be%e7%89%87%e6%a0%bc%e5%bc%8f-webp&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;就像造家具有不同的木材，图片也有不同的「材质」（格式）。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;老三样&lt;/strong&gt;：JPEG（有损压缩，适合照片）、PNG（无损压缩，支持透明）、GIF（简单动画）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;新宠儿&lt;/strong&gt;：&lt;strong&gt;WebP&lt;/strong&gt;。这是由 Google 开发的现代图片格式，它集各家之所长，同时支持有损/无损压缩、透明度和动画。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;核心优势&lt;/strong&gt;：在肉眼可见的同等画质下，WebP 格式的图片体积通常比 JPEG 小 &lt;strong&gt;25-35%&lt;/strong&gt;，比 PNG 小 &lt;strong&gt;26%&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;策略&lt;/strong&gt;：优先使用 WebP。对于需要兼容非常老旧浏览器的场景，可以使用 &lt;code&gt;&amp;lt;picture&amp;gt;&lt;/code&gt; 元素做优雅降级：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;picture&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;source&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;srcset&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;image.webp&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;image/webp&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;img&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;image.jpg&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;alt&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;/&lt;span style=&#34;color:#f92672&#34;&gt;picture&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;浏览器会自动选择它支持的第一个格式进行加载。&lt;/p&gt;&#xA;&lt;h2 id=&#34;angular-的神兵利器ngsrc-指令&#34;&gt;Angular 的「神兵利器」：&lt;code&gt;ngSrc&lt;/code&gt; 指令&lt;a class=&#34;anchor&#34; href=&#34;#angular-%e7%9a%84%e7%a5%9e%e5%85%b5%e5%88%a9%e5%99%a8ngsrc-%e6%8c%87%e4%bb%a4&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;你以为 &lt;code&gt;&amp;lt;img src=&amp;quot;...&amp;quot;&amp;gt;&lt;/code&gt; 只是一个简单的属性？在现代 Angular 中，我们有了更强大的武器 —— 来自 &lt;code&gt;@angular/common&lt;/code&gt; 的 &lt;code&gt;NgOptimizedImage&lt;/code&gt; 指令，通过 &lt;code&gt;ngSrc&lt;/code&gt; 属性来使用。&lt;/p&gt;&#xA;&lt;p&gt;它不仅仅是 &lt;code&gt;src&lt;/code&gt; 的替代品，它是一位内置在框架里的「图片优化专家」。&lt;/p&gt;</description>
    </item>
    <item>
      <title>7.Angular打包优化：瘦身成功的秘密，让你的应用更轻盈</title>
      <link>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/070-angular%E6%89%93%E5%8C%85%E4%BC%98%E5%8C%96%E7%98%A6%E8%BA%AB%E6%88%90%E5%8A%9F%E7%9A%84%E7%A7%98%E5%AF%86%E8%AE%A9%E4%BD%A0%E7%9A%84%E5%BA%94%E7%94%A8%E6%9B%B4%E8%BD%BB%E7%9B%88/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/070-angular%E6%89%93%E5%8C%85%E4%BC%98%E5%8C%96%E7%98%A6%E8%BA%AB%E6%88%90%E5%8A%9F%E7%9A%84%E7%A7%98%E5%AF%86%E8%AE%A9%E4%BD%A0%E7%9A%84%E5%BA%94%E7%94%A8%E6%9B%B4%E8%BD%BB%E7%9B%88/</guid>
      <description>&lt;p&gt;你的应用写完了，功能完美，界面酷炫。你心满意足地敲下 &lt;code&gt;ng build&lt;/code&gt;，然后看到 &lt;code&gt;dist&lt;/code&gt; 文件夹里那个硕大无比的 &lt;code&gt;main.js&lt;/code&gt; 文件，心头一凉。它就像一个你精心打扮的出游者，却背上了一个塞满各种非必需品的、重达百斤的登山包。&lt;/p&gt;&#xA;&lt;p&gt;在 Web 的世界里，应用的「体重」（打包体积）至关重要。更重的「行李」意味着更长的「旅途时间」（加载速度），尤其是在网络不佳的移动端，用户可能在你的「行李」开箱之前，就已不耐烦地掉头离去。&lt;/p&gt;&#xA;&lt;p&gt;JavaScript 的「昂贵」之处不仅在于下载，更在于浏览器主线程需要花费时间去解析、编译和执行它。因此，为你的应用「瘦身」，是性能优化中最具价值的一环。&lt;/p&gt;&#xA;&lt;h2 id=&#34;angular-的全自动健身计划ng-build-的幕后工作&#34;&gt;Angular 的「全自动健身计划」：&lt;code&gt;ng build&lt;/code&gt; 的幕后工作&lt;a class=&#34;anchor&#34; href=&#34;#angular-%e7%9a%84%e5%85%a8%e8%87%aa%e5%8a%a8%e5%81%a5%e8%ba%ab%e8%ae%a1%e5%88%92ng-build-%e7%9a%84%e5%b9%95%e5%90%8e%e5%b7%a5%e4%bd%9c&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;首先，你要知道，当你运行 &lt;code&gt;ng build&lt;/code&gt;（默认使用 &lt;code&gt;production&lt;/code&gt; 配置）时，Angular CLI 已经为你这位「健身者」安排了一套极其有效的「全自动健身计划」。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;打包 (Bundling)&lt;/strong&gt;：将你成百上千个 &lt;code&gt;.ts&lt;/code&gt; 文件和第三方库，智能地合并成少数几个 JS 包，大大减少了网络请求的数量。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;压缩 (Minification &amp;amp; Uglification)&lt;/strong&gt;：剔除所有代码里的空格、换行、注释，并将变量名、函数名替换成简短的无意义字符（如 &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;b&lt;/code&gt;, &lt;code&gt;c&lt;/code&gt;）。这就像是给你的行李做了一次「真空压缩」。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;摇树优化 (Tree-shaking)&lt;/strong&gt;：这是最神奇的一步。编译器会像摇晃一棵大树，把枯枝败叶（未被使用的代码）全都摇下来。如果你引入了一个巨大的库，但只用到了其中的一个函数，Tree-shaking 会智能地分析 &lt;code&gt;import&lt;/code&gt;/&lt;code&gt;export&lt;/code&gt; 关系，确保最终打包进去的，只有你用到的那个函数及其依赖。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;预编译 (AOT Compilation)&lt;/strong&gt;：在打包时，就预先把所有 HTML 模板编译成高效的 JavaScript 代码。这样，浏览器在运行时就不再需要 Angular 编译器本身，不仅启动速度更快，也让编译器的代码可以从最终的包里被彻底移除，极大地减小了体积。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;你的主动锻炼高级瘦身秘诀&#34;&gt;你的「主动锻炼」：高级瘦身秘诀&lt;a class=&#34;anchor&#34; href=&#34;#%e4%bd%a0%e7%9a%84%e4%b8%bb%e5%8a%a8%e9%94%bb%e7%82%bc%e9%ab%98%e7%ba%a7%e7%98%a6%e8%ba%ab%e7%a7%98%e8%af%80&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;光靠「自动健身计划」还不够，要练出「魔鬼身材」，还需要你这位「健身者」的主动锻炼和「饮食控制」。&lt;/p&gt;&#xA;&lt;h3 id=&#34;第一招惰性加载--少食多餐的艺术&#34;&gt;第一招：惰性加载 —— 「少食多餐」的艺术&lt;a class=&#34;anchor&#34; href=&#34;#%e7%ac%ac%e4%b8%80%e6%8b%9b%e6%83%b0%e6%80%a7%e5%8a%a0%e8%bd%bd--%e5%b0%91%e9%a3%9f%e5%a4%9a%e9%a4%90%e7%9a%84%e8%89%ba%e6%9c%af&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;这依然是减少初始包体积的「核武器」，重要性再怎么强调也不为过。通过惰性加载，你将那些非首屏必需的功能模块，从你的「主餐」（&lt;code&gt;main.js&lt;/code&gt; 或其核心捆绑）中分离出去，变成用户「点餐」时才上的「配菜」。这能让你的应用「正餐」变得极小，实现「秒上」的效果。&lt;/p&gt;&#xA;&lt;h3 id=&#34;第二招包分析器--体脂检测的x-光&#34;&gt;第二招：包分析器 —— 体脂检测的「X 光」&lt;a class=&#34;anchor&#34; href=&#34;#%e7%ac%ac%e4%ba%8c%e6%8b%9b%e5%8c%85%e5%88%86%e6%9e%90%e5%99%a8--%e4%bd%93%e8%84%82%e6%a3%80%e6%b5%8b%e7%9a%84x-%e5%85%89&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;要想精准「减脂」，你得先知道「脂肪」堆在哪里。&lt;code&gt;webpack-bundle-analyzer&lt;/code&gt; 就是你进行「体脂检测」的那台「X 光机」。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;生成分析数据&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;ng build --stats-json&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;这个命令会在打包的同时，在 &lt;code&gt;dist/你的应用名/&lt;/code&gt; 目录下生成一个 &lt;code&gt;stats.json&lt;/code&gt; 文件。&lt;/p&gt;</description>
    </item>
    <item>
      <title>8.性能监控与诊断：Angular应用的“健康体检报告”</title>
      <link>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/080-%E6%80%A7%E8%83%BD%E7%9B%91%E6%8E%A7%E4%B8%8E%E8%AF%8A%E6%96%ADangular%E5%BA%94%E7%94%A8%E7%9A%84%E5%81%A5%E5%BA%B7%E4%BD%93%E6%A3%80%E6%8A%A5%E5%91%8A/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>/angular/angular%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96%E5%AE%9E%E8%B7%B5/080-%E6%80%A7%E8%83%BD%E7%9B%91%E6%8E%A7%E4%B8%8E%E8%AF%8A%E6%96%ADangular%E5%BA%94%E7%94%A8%E7%9A%84%E5%81%A5%E5%BA%B7%E4%BD%93%E6%A3%80%E6%8A%A5%E5%91%8A/</guid>
      <description>&lt;p&gt;你坚持健身，控制饮食，学习了各种养生技巧。但你怎么知道自己的身体是真的健康，还是处于「亚健康」状态？答案是：&lt;strong&gt;体检&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;性能优化也是同理。你应用了惰性加载、&lt;code&gt;OnPush&lt;/code&gt;、&lt;code&gt;track&lt;/code&gt;……一顿操作猛如虎。但你的应用真的变快了吗？快了多少？瓶颈又转移到了哪里？&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;没有数据的优化，都是「凭感觉耍流氓」。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;想要科学地、可持续地提升性能，你必须学会如何为你的 Angular 应用做一次全面的「健康体检」，并读懂体检报告。&lt;/p&gt;&#xA;&lt;h2 id=&#34;两种体检实验室lab-vs-真实世界field&#34;&gt;两种体检：实验室（Lab） vs. 真实世界（Field）&lt;a class=&#34;anchor&#34; href=&#34;#%e4%b8%a4%e7%a7%8d%e4%bd%93%e6%a3%80%e5%ae%9e%e9%aa%8c%e5%ae%a4lab-vs-%e7%9c%9f%e5%ae%9e%e4%b8%96%e7%95%8cfield&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;体检分为两种，两者互为补充，缺一不可。&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;实验室数据 (Lab Data)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;是什么&lt;/strong&gt;：在你自己的开发电脑上，在一个稳定、可控的环境中收集的性能数据。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;好比是&lt;/strong&gt;：在医院里做的「跑步机压力测试」。环境标准，结果可复现，便于对比两次「治疗」前后的效果。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;优点&lt;/strong&gt;：非常适合在开发阶段快速定位、调试和验证问题。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;常用工具&lt;/strong&gt;：Lighthouse, Angular DevTools, Chrome DevTools Performance。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;真实用户数据 (Field Data / RUM)&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;是什么&lt;/strong&gt;：从你遍布全球的、真实的用户那里收集来的性能数据。他们用着五花八门的设备、处在千奇百怪的网络环境中。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;好比是&lt;/strong&gt;：佩戴一个「24小时动态心电图」，记录你在真实生活中的各种数据。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;优点&lt;/strong&gt;：这才是&lt;strong&gt;性能的真相&lt;/strong&gt;。它可能会告诉你，你的应用在你的顶配 MacBook 上快如闪电，但在印度用户手里的低端安卓机上却慢到无法使用。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;常用工具&lt;/strong&gt;：Google 的 CrUX 报告（通过 PageSpeed Insights 查看），或自己动手植入监控探针。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;你的诊疗包实验室诊断工具&#34;&gt;你的「诊疗包」：实验室诊断工具&lt;a class=&#34;anchor&#34; href=&#34;#%e4%bd%a0%e7%9a%84%e8%af%8a%e7%96%97%e5%8c%85%e5%ae%9e%e9%aa%8c%e5%ae%a4%e8%af%8a%e6%96%ad%e5%b7%a5%e5%85%b7&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-lighthouse全科医生&#34;&gt;1. Lighthouse：「全科医生」&lt;a class=&#34;anchor&#34; href=&#34;#1-lighthouse%e5%85%a8%e7%a7%91%e5%8c%bb%e7%94%9f&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;这是你性能诊断的第一站。它内置于 Chrome 开发者工具的 &lt;code&gt;Lighthouse&lt;/code&gt; 标签页中。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;诊断方式&lt;/strong&gt;：一键点击 「Analyze page load」，它会模拟一个中端手机和中速网络，对你的页面进行一次全面的「体检」，并从性能、无障碍、最佳实践、SEO 四个维度给你的网站打分。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;报告解读&lt;/strong&gt;：它会直接告诉你 LCP、INP、CLS 等核心指标的得分，并给出非常具体、可操作的优化建议，比如「请为这张图片设置 priority 属性」、「请减少未使用的 JavaScript」等。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;2-angular-devtools-profiler心脏-b-超&#34;&gt;2. Angular DevTools Profiler：「心脏 B 超」&lt;a class=&#34;anchor&#34; href=&#34;#2-angular-devtools-profiler%e5%bf%83%e8%84%8f-b-%e8%b6%85&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;这是专门为 Angular 应用打造的「心脏专科」诊断工具。你需要从浏览器商店安装 &lt;code&gt;Angular DevTools&lt;/code&gt; 扩展。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
