<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>DevTools on Liangweidong's blog</title><link>https://liangweidonggood.github.io/tags/devtools/</link><description>Recent content in DevTools on Liangweidong's blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 10 May 2021 00:00:00 +0800</lastBuildDate><atom:link href="https://liangweidonggood.github.io/tags/devtools/index.xml" rel="self" type="application/rss+xml"/><item><title>2021 年开源生态观察：从工具到平台，从代码到协作</title><link>https://liangweidonggood.github.io/p/2021-kaiyuan-shengtai-guancha/</link><pubDate>Mon, 10 May 2021 00:00:00 +0800</pubDate><guid>https://liangweidonggood.github.io/p/2021-kaiyuan-shengtai-guancha/</guid><description>&lt;img src="https://liangweidonggood.github.io/p/2021-kaiyuan-shengtai-guancha/image/cover.jpg" alt="Featured image of post 2021 年开源生态观察：从工具到平台，从代码到协作" /&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;数据来源周期&lt;/strong&gt;：2021 年 5 月，扫描 docs 源仓库下的 23 篇源文档，合并去重后得到 200+ 仓库的样本。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="一为什么值得关注"&gt;一、为什么值得关注
&lt;/h2&gt;&lt;p&gt;2021 年是开源生态一个微妙的&amp;quot;中段&amp;quot;——&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;前端&lt;/strong&gt;：Vue 3 刚刚稳定，React 18 还在 RC 阶段，&lt;strong&gt;前端框架的迭代节奏第一次慢了下来&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;云原生&lt;/strong&gt;：Kubernetes 1.21 刚发布，&lt;strong&gt;&amp;ldquo;上云&amp;quot;从一句口号变成默认假设&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI&lt;/strong&gt;：PyTorch 1.8 / TensorFlow 2.4 已经&amp;quot;水到渠成&amp;rdquo;，&lt;strong&gt;但 ChatGPT 还要再过 1 年 8 个月才登场&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;基础设施&lt;/strong&gt;：内网穿透、代理、IPTV 资源、社区电驴替代品……&lt;strong&gt;中国大陆开发者有自己独特的开源生态圈层&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果把 2021 年的 GitHub 仓库列表当成一个横截面去读，会发现很多几年后回看才会显现的趋势，&lt;strong&gt;早在 2021 年就已经埋下了种子&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="二样本结构"&gt;二、样本结构
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;维度&lt;/th&gt;
					&lt;th&gt;数量 / 占比&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;仓库总数&lt;/td&gt;
					&lt;td&gt;≈ 200（合并去重后）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;编程语言 Top 3&lt;/td&gt;
					&lt;td&gt;JavaScript / Python / Go&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;类别数&lt;/td&gt;
					&lt;td&gt;9 大类&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;大厂/官方项目占比&lt;/td&gt;
					&lt;td&gt;约 18%&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;九大类别分别是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;前端 / Node 生态&lt;/strong&gt;（Vue、Element、qiankun、uni-app）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;科学上网 / 内网穿透&lt;/strong&gt;（v2ray、trojan、frp、shadowsocks 全家桶）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;爬虫与数据采集&lt;/strong&gt;（scrapy、requests-html、电商爬虫合集）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;直播 / 视频资源&lt;/strong&gt;（iptv-org、tvlist-awesome、youtube-dl）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;运维 / 云原生&lt;/strong&gt;（kubernetes、runc、frp、winsw、harbor）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;开发工具&lt;/strong&gt;（nvm-windows、psf/black、drawio、WindTerm、ohmyzsh）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据库 / 消息&lt;/strong&gt;（TDengine、emqx、redis、QuickMsg smqtt）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可视化&lt;/strong&gt;（d3、Chart.js、metrics-graphics、Cesium）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;教学 / 学习路径&lt;/strong&gt;（es6tutorial、Hacking、IntelliJ-IDEA-Tutorial）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="三八大趋势观察"&gt;三、八大趋势观察
&lt;/h2&gt;&lt;h3 id="趋势-1云原生成为默认水电煤"&gt;趋势 1：云原生成为默认&amp;quot;水电煤&amp;quot;
&lt;/h3&gt;&lt;p&gt;2017-2020 是 Kubernetes 跑马圈地的年代，&lt;strong&gt;2021 年开始，k8s 真的成了基础设施的默认假设&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仓库里出现 &lt;code&gt;kubernetes/kubernetes&lt;/code&gt;（10w+ stars）作为&amp;quot;基础设施&amp;quot;被反复引用&lt;/li&gt;
&lt;li&gt;&lt;code&gt;goharbor/harbor&lt;/code&gt;（容器镜像注册中心）正式进入主流&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apache/incubator-brpc&lt;/code&gt;、&lt;code&gt;grpc/grpc&lt;/code&gt;、&lt;code&gt;protocolbuffers/protobuf&lt;/code&gt; 三件套把&amp;quot;远程调用&amp;quot;标准化&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Tencent/APIJSON&lt;/code&gt; 这种&amp;quot;零代码接口生成&amp;quot;工具开始走红——背后是 &lt;strong&gt;&amp;ldquo;我不想写 CRUD&amp;rdquo;&lt;/strong&gt; 的开发者心声&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;结论&lt;/strong&gt;：2021 年&amp;quot;上不上云&amp;quot;已经不是问题，&amp;ldquo;怎么上、用什么姿势上&amp;quot;才是。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="趋势-2内网穿透--代理生态自成体系"&gt;趋势 2：内网穿透 / 代理生态自成体系
&lt;/h3&gt;&lt;p&gt;这是 2021 年中文开源圈最独特的一道风景：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;类别&lt;/th&gt;
					&lt;th&gt;代表项目&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;路由器级代理&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;liangweidonggood/openwrt-fanqiang&lt;/code&gt;、&lt;code&gt;hq450/fancyss&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;协议实现&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;v2fly/v2ray-core&lt;/code&gt;、&lt;code&gt;trojan-gfw/trojan&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;桌面 GUI&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;2dust/v2rayN&lt;/code&gt;、&lt;code&gt;Qv2ray/Qv2ray&lt;/code&gt;、&lt;code&gt;Cenmrev/V2RayW&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;内网穿透&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;fatedier/frp&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;hosts 维护&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;googlehosts/hosts&lt;/code&gt;、&lt;code&gt;ineo6/hosts&lt;/code&gt;、&lt;code&gt;oldj/SwitchHosts&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;为什么值得关注&lt;/strong&gt;：这批项目在 GitHub 上聚集了&lt;strong&gt;中文世界最高质量的开源协作&lt;/strong&gt;——文档完整、社区活跃、维护及时、issue 响应快。任何一个想做&amp;quot;中文开发者社区运营&amp;quot;的人，都该认真研究这个生态。&lt;/p&gt;
&lt;h3 id="趋势-3ssh-协议接管-git-工作流"&gt;趋势 3：SSH 协议接管 Git 工作流
&lt;/h3&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&amp;ldquo;GitHub 使用 ssh 协议&amp;rdquo;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这一段在 2021 年终于从&amp;quot;高手配置&amp;quot;变成&amp;quot;新人必学&amp;rdquo;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 推荐使用 Ed25519 算法，它比 RSA 更安全且性能更好&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh-keygen -t ed25519 -C &lt;span class="s2"&gt;&amp;#34;you@example.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 配置 ssh 走 443 端口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Host github.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Hostname ssh.github.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Port &lt;span class="m"&gt;443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; User git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; IdentityFile ~/.ssh/id_ed25519
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;you@example.com&lt;/code&gt;（示例邮箱）这种&amp;quot;个人邮箱 + ed25519 + 443 端口绕过&amp;quot;的组合在 2021 年是&lt;strong&gt;几乎每个中文开发者的标配&lt;/strong&gt;。SSH 协议从&amp;quot;运维专属&amp;quot;下沉到&amp;quot;日常开发&amp;quot;的标志性年份。&lt;/p&gt;
&lt;h3 id="趋势-4前端微服务--跨端框架并行"&gt;趋势 4：前端微服务 / 跨端框架并行
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;方向&lt;/th&gt;
					&lt;th&gt;代表项目&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;微前端&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;umijs/qiankun&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;跨端&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;dcloudio/uni-app&lt;/code&gt;、&lt;code&gt;umicro/uView&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;后台模板&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;Rudeus3Greyrat/vue3-element-admin&lt;/code&gt;、&lt;code&gt;ColorlibHQ/AdminLTE&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;桌面端&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;jgraph/drawio-desktop&lt;/code&gt;、&lt;code&gt;microsoft/terminal&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;注意 &lt;code&gt;vue3-element-admin&lt;/code&gt; 出现的年份——&lt;strong&gt;这恰好是 Vue 3 从 RC 转稳定的窗口期&lt;/strong&gt;。前端开发者一边学新框架，一边在生产环境上&lt;strong&gt;用 Vue 2 + Element 做后台&lt;/strong&gt;，这个双轨格局持续到 2023 年才彻底打破。&lt;/p&gt;
&lt;h3 id="趋势-5直播资源--iptv-自治社区"&gt;趋势 5：直播资源 / IPTV 自治社区
&lt;/h3&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;code&gt;iptv-org/iptv&lt;/code&gt;、&lt;code&gt;imDazui/Tvlist-awesome-m3u-m3u8&lt;/code&gt;、&lt;code&gt;ChendoChap/pOOBs4&lt;/code&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这一类项目属于&amp;quot;灰色但有真实需求&amp;quot;的典型：&lt;strong&gt;民间对电视直播、电竞主机破解、流媒体下载工具的旺盛需求，反过来推动了开源社区的活跃度&lt;/strong&gt;。&lt;code&gt;ytdl-org/youtube-dl&lt;/code&gt;、&lt;code&gt;soimort/you-get&lt;/code&gt; 这种下载工具的命运起伏，后来还和 DMCA 法案反复过招。&lt;/p&gt;
&lt;h3 id="趋势-6数据库--时序数据开始分化"&gt;趋势 6：数据库 / 时序数据开始分化
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;taosdata/TDengine&lt;/code&gt;：&lt;strong&gt;国产时序数据库&lt;/strong&gt;第一次进入主流视野&lt;/li&gt;
&lt;li&gt;&lt;code&gt;redis/redis&lt;/code&gt;：依然稳坐缓存王者&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uglide/RedisDesktopManager&lt;/code&gt;、&lt;code&gt;qishibo/AnotherRedisDesktopManager&lt;/code&gt;：&lt;strong&gt;桌面客户端百花齐放&lt;/strong&gt;——一个 Redis 客户端能跑出 5 个 fork，说明开发者对&amp;quot;图形化运维&amp;quot;的需求远未饱和&lt;/li&gt;
&lt;li&gt;&lt;code&gt;quickmsg/smqtt&lt;/code&gt;、&lt;code&gt;eclipse/paho.mqtt.javascript&lt;/code&gt;、&lt;code&gt;eclipse/mosquitto&lt;/code&gt;：&lt;strong&gt;MQTT 在 IoT 场景的协议栈成型&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="趋势-7可视化工具百花齐放"&gt;趋势 7：可视化工具&amp;quot;百花齐放&amp;quot;
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;场景&lt;/th&gt;
					&lt;th&gt;项目&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;数据可视化&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;d3/d3&lt;/code&gt;、&lt;code&gt;chartjs/Chart.js&lt;/code&gt;、&lt;code&gt;metricsgraphics/metrics-graphics&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;地图&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;CesiumGS/cesium&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;流程图&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;jgraph/drawio&lt;/code&gt; / &lt;code&gt;drawio-desktop&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2D 物理&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;jonobr1/two.js&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;3D&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;mrdoob/three.js&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;drawio&lt;/code&gt; 至今仍是流程图工具的事实标准之一，&lt;strong&gt;且能本地化部署 + 离线使用&lt;/strong&gt;——这个属性在 2021 年没人觉得是优势，到了 2024 年企业市场突然爆火。&lt;/p&gt;
&lt;h3 id="趋势-8教学型仓库爆款公式"&gt;趋势 8：教学型仓库爆款公式
&lt;/h3&gt;&lt;p&gt;观察一下 2021 年教学型仓库的爆款公式：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;中文翻译&lt;/strong&gt;（&lt;code&gt;1c7/Crash-Course-Computer-Science-Chinese&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;路线图&lt;/strong&gt;（&lt;code&gt;tangyudi/Ai-Learn&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;awesome 系列&lt;/strong&gt;（&lt;code&gt;facert/awesome-spider&lt;/code&gt;、&lt;code&gt;rockerBOO/awesome-neovim&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;书单&lt;/strong&gt;（&lt;code&gt;itdevbooks/pdf&lt;/code&gt;、&lt;code&gt;forthespada/CS-Books&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;镜像 / fork + 注释&lt;/strong&gt;（veloren 这种大型游戏项目的 fork 笔记）&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;教学型仓库的核心竞争力不是&amp;quot;原创&amp;quot;，而是&amp;quot;&lt;strong&gt;整理 + 翻译 + 索引&lt;/strong&gt;&amp;quot;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="四值得跟踪的长寿项目"&gt;四、值得跟踪的&amp;quot;长寿&amp;quot;项目
&lt;/h2&gt;&lt;p&gt;在 200+ 仓库里，&lt;strong&gt;到今天（2026）仍然活跃&lt;/strong&gt;的不算多，下面这些是 5 年后还能更新、还在被引用的&amp;quot;长青树&amp;quot;：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;项目&lt;/th&gt;
					&lt;th&gt;2021 状态&lt;/th&gt;
					&lt;th&gt;2024 状态&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;microsoft/terminal&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Windows Terminal 1.x&lt;/td&gt;
					&lt;td&gt;已成 Windows 必装&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;jgraph/drawio&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;v14&lt;/td&gt;
					&lt;td&gt;仍是流程图首选&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;opencontainers/runc&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;容器底层&lt;/td&gt;
					&lt;td&gt;仍是 K8s 核心依赖&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;syncthing/syncthing&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;P2P 文件同步&lt;/td&gt;
					&lt;td&gt;安全圈的&amp;quot;瑞士军刀&amp;quot;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;scrapy/scrapy&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Python 爬虫事实标准&lt;/td&gt;
					&lt;td&gt;仍是大厂数据团队底座&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;kubernetes/kubernetes&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;1.21&lt;/td&gt;
					&lt;td&gt;已成云时代操作系统&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;grpc/grpc&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;跨语言 RPC 主流&lt;/td&gt;
					&lt;td&gt;服务网格的基础组件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;d3/d3&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;可视化鼻祖&lt;/td&gt;
					&lt;td&gt;仍被无数 BI 工具致敬&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="五总结"&gt;五、总结
&lt;/h2&gt;&lt;p&gt;回顾 2021 年的开源生态，&lt;strong&gt;真正留下的不是&amp;quot;最火的项目&amp;quot;，而是&amp;quot;沉淀下来的协作模式&amp;quot;&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;中文开发者社区的成熟&lt;/strong&gt;——ed25519 + SSH + v2ray 圈层的密度史无前例&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;云原生基础设施的稳态化&lt;/strong&gt;——K8s 不再是&amp;quot;前沿&amp;quot;，而是&amp;quot;默认&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;前端框架的过渡期&lt;/strong&gt;——Vue 3 / React 18 / 微前端三件事并行，谁也没赢&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;国产开源开始有国际影响力&lt;/strong&gt;——TDengine、Vue、uni-app 都走出了纯中文圈&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;教学型仓库的爆款公式被验证&lt;/strong&gt;——这个公式到 2024 年还在用&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;站在 2026 年（本文写于 2021，5 年后再回望）看 2021，最大的感慨是：&lt;strong&gt;那一年的 GitHub Trending 上根本看不到 LLM 相关项目&lt;/strong&gt;。开源世界改天换地的速度，比我们预想的还要快。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/facert/awesome-spider" target="_blank" rel="noopener"
 &gt;awesome-spider / facert&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/kubernetes/kubernetes" target="_blank" rel="noopener"
 &gt;kubernetes/kubernetes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/d3/d3" target="_blank" rel="noopener"
 &gt;d3/d3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/microsoft/terminal" target="_blank" rel="noopener"
 &gt;microsoft/terminal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/jgraph/drawio" target="_blank" rel="noopener"
 &gt;jgraph/drawio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/taosdata/TDengine" target="_blank" rel="noopener"
 &gt;taosdata/TDengine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/syncthing/syncthing" target="_blank" rel="noopener"
 &gt;syncthing/syncthing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/fatedier/frp" target="_blank" rel="noopener"
 &gt;fatedier/frp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/scrapy/scrapy" target="_blank" rel="noopener"
 &gt;scrapy/scrapy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/umijs/qiankun" target="_blank" rel="noopener"
 &gt;umijs/qiankun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/dcloudio/uni-app" target="_blank" rel="noopener"
 &gt;DCloud uni-app&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="六2024-视角5-年后回望趋势是否兑现"&gt;六、2024+ 视角：5 年后回望，趋势是否兑现？
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;本文写于 2021 年 5 月。&lt;strong&gt;2026 年回望，21 年埋下的 8 大趋势种子，4/8 已经结果，2/8 被证伪，2/8 仍在酝酿&lt;/strong&gt;。下面逐条对照。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="61-趋势-1-3-兑现度"&gt;6.1 趋势 1-3 兑现度
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;趋势 1（云原生成为默认水电煤）→ 完全兑现&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2024 年 K8s 1.30 已经是&amp;quot;装机必备&amp;quot;——&lt;code&gt;containerd&lt;/code&gt; 替代 &lt;code&gt;dockerd&lt;/code&gt; 在 2024 年完成（&lt;a class="link" href="https://www.docker.com/blog/docker-engine-is-being-deprecated-as-kubernetes-runtime/" target="_blank" rel="noopener"
 &gt;Docker Engine 退场&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;2025 年 &lt;code&gt;eBPF&lt;/code&gt; 成为云原生新底座（取代部分 iptables 场景）&lt;/li&gt;
&lt;li&gt;2026 年 K8s + AI/ML 编排（&lt;code&gt;kuberay&lt;/code&gt;、&lt;code&gt;kfserving&lt;/code&gt;）成为 AI 平台的事实标准&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;harbor&lt;/strong&gt; 在 2024-2025 仍是主流镜像仓库（虽然 OCI 标准化让 AWS ECR / 阿里 ACR / Harbor 可以互通）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;趋势 2（内网穿透 / 代理生态自成体系）→ 部分兑现 + 暗线影响&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2021 年 v2ray/frp 圈是中文开源最活跃的&amp;quot;地下&amp;quot;协作&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2022 年 10 月起，部分翻墙相关仓库被 GitHub 批量封禁&lt;/strong&gt;（包括很多教程仓库）&lt;/li&gt;
&lt;li&gt;2024-2025 主流路线从&amp;quot;自建代理&amp;quot;转向&amp;quot;专业机场&amp;quot; + WireGuard/Tailscale 替代&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;frp 本身反而更活跃&lt;/strong&gt;——企业内网穿透（堡垒机替代品）成为主流用法&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;tailscale / headscale&lt;/strong&gt; 等基于 WireGuard 的新方案在 2023-2025 大爆发&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;趋势 3（SSH 协议接管 Git 工作流）→ 完全兑现，但被 GitHub CLI 抢戏&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2024-2025 几乎所有 Git 操作默认走 SSH（ed25519 是绝对主流）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub CLI（&lt;code&gt;gh&lt;/code&gt;）&lt;/strong&gt; 2023-2025 大爆发，部分场景替代了 SSH 直连&lt;/li&gt;
&lt;li&gt;VSCode Remote SSH 2024-2026 仍是云开发标配&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="62-趋势-4-6-兑现度"&gt;6.2 趋势 4-6 兑现度
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;趋势 4（前端微服务 / 跨端框架并行）→ 兑现，但格局大变&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;qiankun&lt;/strong&gt; 在 2024-2025 仍占一席之地，但 &lt;strong&gt;微前端整体热度下降&lt;/strong&gt;——webpack 5 Module Federation 让&amp;quot;微前端&amp;quot;变成 webpack 标配功能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;uni-app / Taro&lt;/strong&gt; 双雄格局稳定，2024 年都加上了&amp;quot;AI 智能生成代码&amp;quot;功能&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vue 3 vs React 18&lt;/strong&gt; 在 2024-2025 决出胜负：&lt;strong&gt;React Server Components + Next.js 占据前端框架头部&lt;/strong&gt;，Vue 3 在国内继续强势但国际化落后&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Solid.js / Qwik&lt;/strong&gt; 等&amp;quot;细粒度响应式&amp;quot;框架在 2024-2025 出圈&lt;/li&gt;
&lt;li&gt;2026 H1：&lt;strong&gt;&amp;ldquo;前端框架&amp;quot;讨论热度整体下降&lt;/strong&gt;——AI 编码让&amp;quot;框架选择&amp;quot;变得没那么重要&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;趋势 5（直播资源 / IPTV 自治社区）→ 黯淡，但 youtube-dl 系活下来&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2021-2024 IPTV 社区&lt;strong&gt;基本被监管消灭&lt;/strong&gt;——GitHub 上主流 m3u 仓库要么归档、要么被 DMCA&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ytdl-org/youtube-dl&lt;/code&gt; 在 2020 RIAA 诉讼后转 &lt;code&gt;yt-dlp&lt;/code&gt;（社区 fork），&lt;strong&gt;2024-2026 仍是视频下载工具的事实标准&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;哔哩哔哩 bilix / lux / you-get 等中文工具&lt;/strong&gt;命运起伏&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Web 直播本身&lt;/strong&gt;反而大爆发——抖音 / TikTok / YouTube Shorts 让 IPTV 失去吸引力&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;趋势 6（数据库 / 时序数据开始分化）→ 完全兑现，且走得更远&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;TDengine 3.0&lt;/strong&gt;（2023-10 发布）在 2024-2026 持续扩大，国内时序库头名稳固&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IoTDB&lt;/strong&gt;（清华 Apache 孵化）在 2024-2025 进入 Apache TLP，国内时序库第二&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;InfluxDB / TimescaleDB&lt;/strong&gt; 仍在欧美主导&lt;/li&gt;
&lt;li&gt;2024-2026 新趋势：&lt;strong&gt;&amp;ldquo;云原生数据库&amp;rdquo;&lt;/strong&gt; 全面替代传统 DBA 模式——Aurora / PolarDB / TiDB Cloud / CockroachDB&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;向量数据库&lt;/strong&gt;（pgvector / Qdrant / Milvus）2024-2026 大爆发——LLM 时代的&amp;quot;数据库新物种&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redis&lt;/strong&gt; 2024 年完成&amp;quot;开源协议变更&amp;quot;风波（2024-03 起从 BSD 改 SSPL + RSAL）——&lt;strong&gt;国内 Redis 替代品（KeyDB / Dragonfly / 阿里 Tair）&lt;/strong&gt; 借机爆发&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="63-趋势-7-8-兑现度"&gt;6.3 趋势 7-8 兑现度
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;趋势 7（可视化工具百花齐放）→ 部分兑现，AI 改变格局&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;drawio&lt;/strong&gt; 2024-2026 仍是流程图首选（&lt;strong&gt;&amp;ldquo;本地部署&amp;quot;属性让它在企业市场爆火&lt;/strong&gt;——文章当时已提到）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;d3.js&lt;/strong&gt; 仍被无数 BI 工具致敬，但&lt;strong&gt;直接使用 d3 的项目少了&lt;/strong&gt;——大家都用 ECharts / AntV / Recharts 二次封装&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2024-2026 真正的大变化&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI 生成图表&lt;/strong&gt;（ChartGPT、Vizro、GenBI）开始挑战传统 BI&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cesium&lt;/strong&gt; 在数字孪生 / 智慧城市项目里 2024-2025 爆发&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;deck.gl&lt;/strong&gt;（Uber 出品）成为地理可视化新宠&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;白板工具&lt;/strong&gt;（tldraw、excalidraw、miro）2024-2026 集体 AI 化&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;趋势 8（教学型仓库爆款公式）→ 兑现 + AI 改变教学本身&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;中文翻译、路线图、awesome 系列、书单这 4 个公式&lt;strong&gt;到 2026 仍然有效&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2024-2026 最大的变化&lt;/strong&gt;：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;awesome 系列&lt;/strong&gt;被 AI 索引工具部分替代（GitHub trending + ChatGPT 搜索）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;路线图（roadmap.sh）&lt;/strong&gt; 在 2024-2025 仍是工程师入门第一站&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 编程教程&lt;/strong&gt;（&lt;code&gt;microsoft/generative-ai-for-beginners&lt;/code&gt;、&lt;code&gt;anthropics/prompt-eng-interactive-tutorial&lt;/code&gt;）2024-2026 成为新公式&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bilibili + YouTube 视频教程&lt;/strong&gt;对纯文字教学仓库的冲击越来越大&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LeetCode 中文站&lt;/strong&gt;在 2024 估值 25 亿美元（部分 IPO 消息）&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="64-21-年没看到的暗线5-年后的新增趋势"&gt;6.4 21 年没看到的暗线：5 年后的新增趋势
&lt;/h3&gt;&lt;p&gt;回看 2021 年的&amp;quot;九大类别&amp;rdquo;，&lt;strong&gt;有几个类别在 2026 年已经退出历史舞台&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;科学上网 / 内网穿透&lt;/strong&gt; → 萎缩（监管 + WireGuard 替代）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IPTV / 直播资源&lt;/strong&gt; → 大幅萎缩&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;桌面 GUI 代理&lt;/strong&gt;（v2rayN / Qv2ray）→ 退出主流&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;同时有几个 2021 年没出现、2026 年成为主流的类别&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;AI Agent / Harness&lt;/strong&gt;（参见 &lt;a class="link" href="https://liangweidonggood.github.io/p/github-trending-2026-06-03/" &gt;2026-06-03 Trending 周报&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;大模型本地部署&lt;/strong&gt;（Ollama / LM Studio / Jan）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 编程工具&lt;/strong&gt;（Cursor / Claude Code / Continue.dev）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;向量数据库&lt;/strong&gt;（pgvector / Qdrant / Milvus）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;国密合规基础库&lt;/strong&gt;（国密 SM2/SM3/SM4 算法的开源实现）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数字孪生 / 工业软件&lt;/strong&gt;（Cesium / Three.js / WebGL 在工业场景）&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="65-总结开源生态的-5-年大周期"&gt;6.5 总结：开源生态的 5 年大周期
&lt;/h3&gt;&lt;p&gt;把 2021-2026 这 5 年看成一个完整周期，&lt;strong&gt;开源世界发生了 3 件事&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;基础设施化&lt;/strong&gt;——K8s、向量库、AI 框架从&amp;quot;前沿&amp;quot;变成&amp;quot;水电煤&amp;quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;垂直化&lt;/strong&gt;——通用工具（jQuery 时代）→ 框架时代（Vue/React）→ 垂直工具时代（AI × 行业）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI 化&lt;/strong&gt;——2021 年 GitHub Trending 上看不到一个 LLM 项目，2026 年 LLM 项目占 Trending 70%+&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;5 年后回望，2021 年是&amp;quot;AI 革命前夜&amp;quot;&lt;/strong&gt;——云原生 + 微前端 + 时序数据库这些&amp;quot;非 AI 趋势&amp;quot;继续发展，但&lt;strong&gt;真正的范式转移是 2022-11 ChatGPT 发布后&lt;/strong&gt;才开始的。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="参考资料2024-补充"&gt;参考资料（2024+ 补充）
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://kubernetes.io/blog/2024/04/16/dockershim-historical-context/" target="_blank" rel="noopener"
 &gt;K8s 1.30 弃用 Dockershim 详解&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://redis.io/blog/redis-adopts-dual-source-available-licensing/" target="_blank" rel="noopener"
 &gt;Redis 开源协议变更公告&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/yt-dlp/yt-dlp" target="_blank" rel="noopener"
 &gt;yt-dlp 项目（youtube-dl 社区 fork）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://tailscale.com/kb/1019/install/" target="_blank" rel="noopener"
 &gt;Tailscale / Headscale 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://roadmap.sh/" target="_blank" rel="noopener"
 &gt;roadmap.sh 工程师学习路线图&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://cesium.com/learn/" target="_blank" rel="noopener"
 &gt;Cesium 数字孪生实战&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/pgvector/pgvector" target="_blank" rel="noopener"
 &gt;pgvector GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://iotdb.apache.org/" target="_blank" rel="noopener"
 &gt;Apache IoTDB 时序数据库&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Chrome DevTools 实用技巧：前端调试 / 性能分析 / 网络抓包 / 移动端调试 / 自动化</title><link>https://liangweidonggood.github.io/p/chrome-devtools-practical-2020/</link><pubDate>Mon, 15 Jun 2020 00:00:00 +0800</pubDate><guid>https://liangweidonggood.github.io/p/chrome-devtools-practical-2020/</guid><description>&lt;img src="https://liangweidonggood.github.io/p/chrome-devtools-practical-2020/image/cover.jpg" alt="Featured image of post Chrome DevTools 实用技巧：前端调试 / 性能分析 / 网络抓包 / 移动端调试 / 自动化" /&gt;&lt;h2 id="一为什么写这篇-devtools-实战"&gt;一、为什么写这篇 DevTools 实战
&lt;/h2&gt;&lt;p&gt;Chrome DevTools（F12）是&lt;strong&gt;前端工程师的&amp;quot;瑞士军刀&amp;quot;&lt;/strong&gt;——调试 DOM / CSS、抓包分析、性能 profiling、移动端调试、自动化脚本、Storage 调试……&lt;strong&gt;全在一个面板里&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;本文整理 &lt;strong&gt;7 大场景&lt;/strong&gt; 的实战技巧，&lt;strong&gt;所有操作都用 DevTools 自身能力&lt;/strong&gt;，&lt;strong&gt;不涉及任何&amp;quot;内容解锁 / 反爬&amp;quot;功能&lt;/strong&gt;。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;范围说明&lt;/strong&gt;：本文仅讨论 DevTools 用于&lt;strong&gt;前端开发&lt;/strong&gt;、&lt;strong&gt;性能优化&lt;/strong&gt;、&lt;strong&gt;网络分析&lt;/strong&gt;、&lt;strong&gt;自动化测试&lt;/strong&gt;等正当用途。DevTools 是浏览器内置调试工具，&lt;strong&gt;与&amp;quot;破解 / 反爬&amp;quot;无关&lt;/strong&gt;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="二场景-1dom--css-调试"&gt;二、场景 1：DOM / CSS 调试
&lt;/h2&gt;&lt;h3 id="21-实时改-css"&gt;2.1 实时改 CSS
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. 打开任意网页
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. 鼠标右键 → &amp;#34;检查&amp;#34;（或按 F12）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Elements 面板左侧是 DOM 树
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. 选中一个元素 → 右侧 &amp;#34;Styles&amp;#34; 面板是它的所有 CSS
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. 任意属性可以：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - 取消勾选 = 临时禁用
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - 双击值 = 临时改值
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; - 加新属性 = 临时添加
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;实时改的样式&lt;strong&gt;只在你本地生效&lt;/strong&gt;，刷新页面会重置——&lt;strong&gt;这是验证 UI 调整的最快方法&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="22-改完记下来"&gt;2.2 改完记下来
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 右侧 Styles 面板 → 点击选择器链接
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 跳到 Sources 面板对应 CSS 文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 复制修改后的内容到本地项目
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="23-计算样式--box-model"&gt;2.3 计算样式 / Box Model
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Elements → Computed 面板：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 选中元素所有&amp;#34;最终生效&amp;#34;的 CSS（不是源码）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 包含继承值、用户代理默认值
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Box Model 图：可视化 margin / border / padding / content
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="24-强制伪类force-pseudo-class"&gt;2.4 强制伪类（Force Pseudo-class）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Elements 面板 → 选中元素 → :hov 按钮
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 勾选 :hover / :active / :focus / :visited
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 即使鼠标不在元素上也能看到 :hover 状态
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="三场景-2console-调试"&gt;三、场景 2：Console 调试
&lt;/h2&gt;&lt;h3 id="31-基础-api"&gt;3.1 基础 API
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 格式化输出
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;普通&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;信息&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;warn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;警告&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;错误&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;table&lt;/span&gt;&lt;span class="p"&gt;([{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Alice&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;},{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Bob&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;}]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Group 1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;inside group&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;groupEnd&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 计时
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;fetch&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/api/data&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;timeEnd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;fetch&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 断言
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;assert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;x 必须为正&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 对象展开
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;depth&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="32-引用前一次结果"&gt;3.2 引用前一次结果
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;$_&lt;/span&gt; &lt;span class="c1"&gt;// 上一次 console 输出的结果
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;$0&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="nx"&gt;$4&lt;/span&gt; &lt;span class="c1"&gt;// Elements 面板最近选中的 5 个元素
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// document.querySelector 的简写
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;$$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;div&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// document.querySelectorAll 的简写
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;$x&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;//div&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// XPath 选择
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="33-live-expression实时表达式"&gt;3.3 Live Expression（实时表达式）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Console 面板 → 点眼睛图标
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 输入 document.title
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 顶部实时显示当前 title（不打印）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 适合观察&amp;#34;页面是否被 XHR 改了状态&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="四场景-3断点调试sources"&gt;四、场景 3：断点调试（Sources）
&lt;/h2&gt;&lt;h3 id="41-三种断点"&gt;4.1 三种断点
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. 行断点：Sources 面板点击行号
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. 条件断点：右键行号 → &amp;#34;Add conditional breakpoint&amp;#34; → 写表达式
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. 事件断点：Sources → Event Listener Breakpoints → 勾选事件
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="42-调试控制"&gt;4.2 调试控制
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;F8 / F5 继续执行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;F10 / F6 单步跳过（Step Over）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;F11 / F7 单步进入（Step Into）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Shift + F11 单步退出（Step Out）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ctrl + F8 临时禁用所有断点
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="43-黑盒脚本blackbox"&gt;4.3 黑盒脚本（Blackbox）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Settings → Blackboxing → Add pattern
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 写 /node_modules/.*\.js$
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 调试时跳过第三方库（jQuery / React 源码）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 只调试自己写的代码
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="44-监听-xhr--fetch"&gt;4.4 监听 XHR / Fetch
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Sources → XHR/fetch Breakpoints → Add pattern
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 写 /api/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 每次请求 /api/xxx 都会自动断点到&amp;#34;发起请求&amp;#34;那一行
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="五场景-4network-抓包"&gt;五、场景 4：Network 抓包
&lt;/h2&gt;&lt;h3 id="51-基础"&gt;5.1 基础
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Network 面板：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- All / XHR / JS / CSS / Img / Media / Doc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 红色 = 失败
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Status / Method / Type / Size / Time / Waterfall
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 右键 → Copy → Copy as cURL（命令行重放）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="52-限流throttling"&gt;5.2 限流（Throttling）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Network 面板 → Throttling 下拉
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Online（默认）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Slow 3G
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Fast 3G
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Slow 4G
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Fast 4G
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Add custom...（自定义）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;用途&lt;/strong&gt;：模拟弱网环境，看页面加载逻辑、占位符、loading 状态。&lt;/p&gt;
&lt;h3 id="53-拦截请求block--override"&gt;5.3 拦截请求（Block / Override）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Block request URL：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Network 面板 → 右键请求 → Block request URL
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 输入匹配的 URL pattern（如 /api/track）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 此后该请求永远 404
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 用于：屏蔽埋点、屏蔽广告追踪、看页面&amp;#34;无脚本&amp;#34;渲染
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Override content：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Sources 面板 → Overrides 子标签 → Select folder for overrides
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 本地文件夹映射到页面
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 改本地文件 → 页面立即生效，**不刷新**（比 Live Reload 还快）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="54-har-导出--导入"&gt;5.4 HAR 导出 / 导入
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Network 面板 → 右键 → Save all as HAR with content
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 同事拿到 HAR → Network 面板 → 右键 → Import HAR file
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 复现你的网络环境（含响应体）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="六场景-5performance-性能分析"&gt;六、场景 5：Performance 性能分析
&lt;/h2&gt;&lt;h3 id="61-录制"&gt;6.1 录制
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Performance 面板 → 点录制按钮（或 Cmd/Ctrl + E）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. 正常操作页面（点击、滚动、加载）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. 再次点录制按钮停止
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. 自动生成火焰图 + Summary
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="62-看什么"&gt;6.2 看什么
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- FCP（First Contentful Paint） 首次内容绘制
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- LCP（Largest Contentful Paint） 最大内容绘制
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- TTI（Time to Interactive） 可交互时间
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- TBT（Total Blocking Time） 长任务阻塞
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- CLS（Cumulative Layout Shift） 布局偏移
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="63-找长任务"&gt;6.3 找长任务
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Main 线程的黄色/红色块 = 长任务（&amp;gt; 50ms）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 点击 → 下方 Summary 看哪个函数耗时
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 双击跳到 Sources 面板对应代码
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="64-lighthouse"&gt;6.4 Lighthouse
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Lighthouse 面板 → 选择 Performance / Accessibility / Best Practices / SEO
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ Generate report
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 100 分制报告 + 优化建议
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="七场景-6application-存储--缓存"&gt;七、场景 6：Application 存储 / 缓存
&lt;/h2&gt;&lt;h3 id="71-存储面板"&gt;7.1 存储面板
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Application 面板：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Local Storage key-value 持久存储
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Session Storage 关闭标签页清空
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- IndexedDB 大容量结构化数据
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Cookies HTTP-only 也能看
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Cache Storage Service Worker 缓存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- Service Workers 注册的 SW
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="72-清空存储"&gt;7.2 清空存储
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Application → Storage → Clear site data
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- 一次清空 LocalStorage / SessionStorage / Cookies / Cache / IndexedDB / SW
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="73-模拟离线"&gt;7.3 模拟离线
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Application → Service Workers → Offline 勾选
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 即使网络正常，页面也走 SW 缓存（验证离线体验）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="八场景-7移动端调试"&gt;八、场景 7：移动端调试
&lt;/h2&gt;&lt;h3 id="81-设备模式"&gt;8.1 设备模式
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. F12 → 点左上角&amp;#34;切换设备&amp;#34;图标（或 Cmd/Ctrl + Shift + M）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. 选预设设备（iPhone / iPad / Galaxy / Pixel）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. 或自定义分辨率、DPR
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. 顶部还有 Throttling 滑块（模拟低端机）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="82-真机调试usb"&gt;8.2 真机调试（USB）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Android：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. 手机开&amp;#34;开发者选项&amp;#34; + &amp;#34;USB 调试&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. USB 连电脑
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Chrome 地址栏 → chrome://inspect → 看到设备
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. 点 inspect → 弹出 DevTools（**调试的是真机上的页面**）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iOS：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. Mac Safari → Develop → [你的 iPhone] → 选择页面
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. 弹出 Web Inspector（**功能类似 Chrome DevTools**）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="83-远程调试真机网页"&gt;8.3 远程调试（真机网页）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. 电脑和手机连同一 Wi-Fi
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. 电脑 DevTools → Settings → Devices → Add custom device
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. 输入手机的 IP + 端口（手机开 Chrome → 设置 → 启用 USB 调试 + 端口转发）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. 电脑 DevTools 直接看到手机页面
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="九场景-8自动化--脚本"&gt;九、场景 8：自动化 / 脚本
&lt;/h2&gt;&lt;h3 id="91-snippet代码片段"&gt;9.1 Snippet（代码片段）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Sources 面板 → Snippets 子标签 → New snippet
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 写 JS 代码 → Ctrl + Enter 执行
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;→ 代码片段永久保存，下次 F12 还在
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;示例：批量改 DOM&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 改所有外部链接为新标签打开
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a[href^=&amp;#34;http&amp;#34;]&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;_blank&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;noopener noreferrer&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="92-recorder录制脚本"&gt;9.2 Recorder（录制脚本）
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DevTools → Recorder 面板（或 Performance → Record → Save as profile）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1. 点 Start recording
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2. 手动操作页面（点击、输入、滚动）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3. Stop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4. 自动生成 Playwright / Puppeteer 代码
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5. 复用 → CI 自动化
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="93-command-menu"&gt;9.3 Command Menu
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Cmd/Ctrl + Shift + P → 调出命令面板
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;常用：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;Show Coverage&amp;#34; 代码覆盖率（哪些 JS/CSS 没用到）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;Capture full size screenshot&amp;#34; 全页截图
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;Capture node screenshot&amp;#34; 选中节点截图
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;Show sensors&amp;#34; 模拟地理位置 / 设备方向
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- &amp;#34;Show rendering&amp;#34; 模拟视觉缺陷（色盲 / 视力模糊）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="十调试技巧速查"&gt;十、调试技巧速查
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;场景&lt;/th&gt;
					&lt;th&gt;面板&lt;/th&gt;
					&lt;th&gt;关键操作&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;改样式看效果&lt;/td&gt;
					&lt;td&gt;Elements / Styles&lt;/td&gt;
					&lt;td&gt;改属性、勾掉属性、:hov&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;看 JS 错误&lt;/td&gt;
					&lt;td&gt;Console&lt;/td&gt;
					&lt;td&gt;console.error 红色 / 点击跳转&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;调试 JS 逻辑&lt;/td&gt;
					&lt;td&gt;Sources&lt;/td&gt;
					&lt;td&gt;断点、单步、Watch&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;抓包看请求&lt;/td&gt;
					&lt;td&gt;Network&lt;/td&gt;
					&lt;td&gt;Filter、Copy as cURL、Throttle&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;性能分析&lt;/td&gt;
					&lt;td&gt;Performance / Lighthouse&lt;/td&gt;
					&lt;td&gt;录制、火焰图、FCP/LCP/CLS&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;改存储&lt;/td&gt;
					&lt;td&gt;Application&lt;/td&gt;
					&lt;td&gt;LocalStorage / Cookies / SW&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;移动端&lt;/td&gt;
					&lt;td&gt;Toggle device&lt;/td&gt;
					&lt;td&gt;选设备、Throttle&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;自动化&lt;/td&gt;
					&lt;td&gt;Snippets / Recorder&lt;/td&gt;
					&lt;td&gt;写代码 / 录操作&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="十一chrome-devtools-隐藏技巧-5-个"&gt;十一、Chrome DevTools 隐藏技巧 5 个
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ctrl + Click&lt;/strong&gt;（Mac Cmd + Click）Sources 文件名 → &lt;strong&gt;在文件树中定位&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Console 多行编辑&lt;/strong&gt; → 输入 &lt;code&gt;Shift + Enter&lt;/code&gt; 换行（不提交）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;拖拽 DOM 节点&lt;/strong&gt; → Elements 面板的 DOM 节点可以&lt;strong&gt;拖动&lt;/strong&gt;改位置（不持久）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;双击 Elements 标签&lt;/strong&gt; → 展开/折叠所有子节点&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;右键图片 → Copy image as data URI&lt;/strong&gt; → 一键复制 base64（适合做占位图）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="十二常见-5-个坑"&gt;十二、常见 5 个坑
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;改 CSS 不生效&lt;/strong&gt; → 用了 &lt;code&gt;!important&lt;/code&gt; 优先级覆盖、或选择器错了（用 Computed 面板看&amp;quot;实际生效的样式来源&amp;quot;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;断点不触发&lt;/strong&gt; → 异步代码用 &lt;code&gt;await&lt;/code&gt; 没断到，可能在 &lt;code&gt;setTimeout&lt;/code&gt; / 微任务里（&lt;strong&gt;断点放在 Promise 链的 &lt;code&gt;then&lt;/code&gt; 里&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network 没记录到请求&lt;/strong&gt; → 过滤框清空、或请求是 &lt;code&gt;sendBeacon&lt;/code&gt;（Network 仍会记录，但 Properties 看不到）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Performance 录制很慢&lt;/strong&gt; → 关闭其他标签页、Chrome 进程&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;移动端调试断连&lt;/strong&gt; → USB 接触不良 / 手机锁屏（设&amp;quot;充电时不锁屏&amp;quot;）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="十三参考资料"&gt;十三、参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://developer.chrome.com/docs/devtools/" target="_blank" rel="noopener"
 &gt;Chrome DevTools 官方文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://developer.chrome.com/docs/devtools/tips/" target="_blank" rel="noopener"
 &gt;Chrome DevTools Tips and Tricks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://devtoolstips.org/" target="_blank" rel="noopener"
 &gt;DevTools 中文文档（前端早茶）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://developer.chrome.com/docs/lighthouse/overview/" target="_blank" rel="noopener"
 &gt;Lighthouse 文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://web.dev/vitals/" target="_blank" rel="noopener"
 &gt;Web Vitals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>