<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://sixiangjia.de/feed.xml" rel="self" type="application/atom+xml" /><link href="https://sixiangjia.de/" rel="alternate" type="text/html" /><updated>2026-07-23T23:40:07+08:00</updated><id>https://sixiangjia.de/feed.xml</id><title type="html">freedom</title><subtitle>An amazing website.</subtitle><author><name>Weiqing Liu</name><email>mailto:liuweiqing147@gmail.com</email></author><entry xml:lang="zh"><title type="html">知行合一不是想到就做,是认出来之后不再拖</title><link href="https://sixiangjia.de/lifestyle/yangming/" rel="alternate" type="text/html" title="知行合一不是想到就做,是认出来之后不再拖" /><published>2026-07-23T22:50:00+08:00</published><updated>2026-07-23T22:50:00+08:00</updated><id>https://sixiangjia.de/lifestyle/yangming</id><content type="html" xml:base="https://sixiangjia.de/lifestyle/yangming/"><![CDATA[<h2 id="脑子里有念头这件事本身没有问题">脑子里有念头,这件事本身没有问题</h2>

<p>人在清醒状态下,大脑中始终有声音。它可能是回忆刚才的对话,可能是担忧明天的会议,可能是评判路人的穿着,也可能什么都不是,只是一些零散的词语在飘。这些内容大多数时候不需要被特意关注,它们会自动浮现,也会自动消失。</p>

<p>这种现象不是病,不是缺陷,不是”静不下来”的表现。它有一个名称:大脑默认模式网络,英文缩写 DMN。它是大脑在没有外部任务时默认启动的一套神经系统,负责自我对话、情景回忆、社交预演等功能。在静息状态下,它消耗大脑总能耗的 60% 到 80%——这意味着,大脑在”什么都不做”的时候,其实一直在做一件事:产生念头。</p>

<p>所以念头多不是问题。就像心跳快一点不等于心脏病一样,念头多只是大脑的正常生理活动,不说明任何关于意志力或专注力的结论。</p>

<h2 id="那什么才是问题">那什么才是问题</h2>

<p>问题出在一种特定的时刻:当你意识到某件事值得做、应该做,但你始终没有启动它。</p>

<p>比如,”应该回复那封邮件”,这个想法出现了一次,然后消失了。第二天又出现了一次,又消失了。一周后它还在,每次出现都带着一种模糊的”我应该做”的感觉,但你始终没有打开邮箱。这时候,这个想法就不再是一个普通的念头——它已经变成了一个未完成的判断。</p>

<p>念头和判断的区别在于:念头是自动的,你不需要对它做任何事;判断是带有方向的,它要求行动。当一个判断反复出现却迟迟没有行动时,人就进入了一种中间状态——不是完全不知道,也不是真的在做。这种状态的持续时间可以很长,从几天到几年。它消耗的是远比念头本身更大的能量:不是 DMN 的能耗,是心理能耗。每一次念头出现又被搁置,都完成了一次微小的”对自我的背弃”。这种事做多了,人会开始不信任自己。</p>

<h2 id="王阳明在说什么">王阳明在说什么</h2>

<p>王阳明在《传习录》里有一句话,只有七个字:</p>

<blockquote>
  <p>知而不行,只是未知。</p>
</blockquote>

<p>这句话经常被理解成”你知道了就应该去做”。但它真正的意思,比这个更精确。他不是在鼓励行动,他是在对”知”本身做一个苛刻的定义:如果你没有做,我就判定你那不是真的知道。</p>

<p>这跟通常的理解是反过来的。通常的逻辑是:我先知道了,然后我还需要一些动力、一些自律、一些条件,才能去做。阳明的逻辑是:你没有做,就说明你的”知”没有完成。知行不是两件事。行不是知的后续,行是知的检验。”不能导出行动的认识,本质上不是认识,而是未经检验的念头。”</p>

<p>这就回到了上一节的区分。那些”应该回复邮件”“应该完成文章”“应该联系朋友”的想法——如果它们只是飘过,它们就只是念头。只有当你真的打开邮箱、真的写下第一行、真的发出那条消息时,它们才从念头变成了知。在此之前,无论它们在脑子里出现了多少次,都不构成知。</p>

<h2 id="念头的种类哪些需要理哪些不需要">念头的种类:哪些需要理,哪些不需要</h2>

<p>把上一节的意思用更区分的方式说清楚:大脑自动产生的内部言语,可以分为两种。</p>

<p>一种是念头。它是 DMN 的默认输出,随机、杂乱、无方向。它的特点是出现得很快,消失得也很快,主体的参与感很低。你不觉得它是”你想出来的”,它更像是一个路过的东西。对这类内容,正确的处理方式是不处理。让它来,让它走。不需要对它做任何事。</p>

<p>另一种是判断。它也是以念头的形式出现的,但它在反复出现的过程中,和主体的价值系统发生了连接。”应该做”这三个字,就是连接的标志。一个人可能同时有几十个念头,但其中只有一两个会被标记为”应该做”。这种标记不是逻辑推演的结果,它更像是一种本能——你不需要说服自己这件事值得做,你只是知道。</p>

<p>知行合一针对的,是后一种。它不要求一个人对每一个飘过的念头负责。它只要求一个人对”自己已经认出来的那些”负责。</p>

<h2 id="一个常见的错误解读以及一个替代方案">一个常见的错误解读,以及一个替代方案</h2>

<p>关于知行合一,最流行也最省事的解读是:想到就做。随便挑一个念头,不管是”学外语”“跑步”“写日记”还是”收拾桌子”,选一个,立刻执行。这个说法的逻辑基础是”念头太多导致行动力差”,治疗方案是”用行动打破念头”。</p>

<p>这个解读忽略了上一节的区分。它把念头和判断混在了一起。它给出的方案是用一种强迫性的行动去压制脑内的噪音——本质上是用新的行动噪音替代旧的念头噪音。短期内可能有效,但因为处理的对象本身不需要处理,效果不会持久。</p>

<p>一个更精确的替代方案是这样:不要求自己对所有念头做出反应。只有当同一个想法在一天内反复出现,并且每次出现时都能识别到”这件事应该做”的信号——此时启动一个最小量的行动,五分钟就够了。目的不是完成这件事,而是验证它。五分钟之后,如果还想继续,说明它确实是应该做的事,继续做。如果不想继续,说明它只是一个被误判为重要的念头,放下。</p>

<p>这个过程所做的不多,但恰好做了最重要的一步:在一个判断已经完成、只是被搁置的时刻,人为地中止了搁置。这就是知行合一的最小可执行版本。</p>

<h2 id="最后一段">最后一段</h2>

<p>王阳明不是冥想者,不是清谈家。他一生平叛、治匪、办学、改革盐政、编订乡约,是一个需要不断做出决策并承担后果的人。他提出”知而不行,只是未知”,针对的从来不是某种理想的认知状态,而是真实世界里每天都在发生的那种事:一个人知道该做什么,但始终没有迈出第一步。</p>

<p>脑子里念头多是正常的。不需要治理它,也不需要服从它。需要做的只有一件事:下一次,当一个念头出现,而你明确感觉到这件事应该做——不要让它只做念头。</p>]]></content><author><name>Weiqing Liu</name><email>mailto:liuweiqing147@gmail.com</email></author><category term="lifestyle" /><category term="哲学" /><category term="阳明心学" /><category term="知行合一" /><category term="认知科学" /><summary type="html"><![CDATA[脑子里有念头,这件事本身没有问题]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://sixiangjia.de/assets/images/morandi.jpg" /><media:content medium="image" url="https://sixiangjia.de/assets/images/morandi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="zh"><title type="html">NFC 卡不完全指南：Classic、NTAG、Ultralight，你到底该用哪张？</title><link href="https://sixiangjia.de/tech/NFC-class/" rel="alternate" type="text/html" title="NFC 卡不完全指南：Classic、NTAG、Ultralight，你到底该用哪张？" /><published>2026-07-19T00:00:00+08:00</published><updated>2026-07-19T00:00:00+08:00</updated><id>https://sixiangjia.de/tech/NFC-class</id><content type="html" xml:base="https://sixiangjia.de/tech/NFC-class/"><![CDATA[<blockquote>
  <p>搞了块 NT3H2111 板子，能读不能写，修了一下午。修完发现 NFC 卡的类型比想象中复杂得多。干脆写下来，免得以后再来一遍。</p>
</blockquote>

<hr />

<h2 id="一张图看清-nfc-卡的类型">一张图看清 NFC 卡的类型</h2>

<p>逛淘宝买空白卡、查芯片选型时，你最常撞到这些名词：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>NFC 卡（13.56MHz，ISO 14443 Type A）
│
├── Mifare Classic 系列（M1 卡）
│   ├── Mifare Classic 1K (S50)   ← 最常见，16 扇区 × 4 块
│   └── Mifare Classic 4K (S70)   ← 大容量版，40 扇区
│
├── NTAG 系列（NFC Forum Type 2 Tag）
│   ├── NTAG213                     ← 144 字节用户区
│   ├── NTAG215                     ← 504 字节
│   ├── NTAG216                     ← 888 字节
│   └── NTAG I²C (NT3H2111/2211)   ← 带 I²C 接口，可接 MCU
│
├── Mifare Ultralight 系列
│   ├── Ultralight (MF0ICU1)       ← 老款，64 字节
│   ├── Ultralight C              ← 带 3DES 加密
│   └── Ultralight EV1            ← 带密码保护
│
├── Mifare Plus / DESFire 系列
│   ├── Plus S / Plus X           ← M1 升级版，向下兼容
│   └── DESFire EV1/EV2/EV3       ← 高安保，用在交通卡/银行卡
│
└── 其他
    ├── ICODE SLI (ISO 15693)      ← 远距离，图书馆/酒瓶
    ├── FeliCa (JIS X 6319)        ← 日本 Suica/八达通
    └── Topaz (Innovision/Broadcom) ← 极少见
</code></pre></div></div>

<hr />

<h2 id="每种卡怎么认出来">每种卡怎么认出来</h2>

<p>拿手机 NFC Tools Pro 或 NXP TagInfo 扫一下，看两个字段就能区分：</p>

<table>
  <thead>
    <tr>
      <th>显示</th>
      <th>卡片家族</th>
      <th>特征</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">NfcA, MifareClassic, NdefFormatable</code></td>
      <td><strong>Mifare Classic</strong></td>
      <td>私有协议，16 字节/块</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">NfcA, MifareUltralight, Ndef</code></td>
      <td><strong>NTAG / Ultralight</strong></td>
      <td>开放标准，4 字节/页</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">NfcA, MifareUltralight, NdefFormatable</code></td>
      <td><strong>NTAG（未初始化）</strong></td>
      <td>出厂空白，CC 全 0</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">NfcF</code></td>
      <td><strong>FeliCa</strong></td>
      <td>日本交通卡，国内少见</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">NfcV</code></td>
      <td><strong>ICODE / ISO 15693</strong></td>
      <td>远距离，图书馆</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">NfcB</code></td>
      <td><strong>SRIX / 身份证</strong></td>
      <td>14443-3B 帧格式</td>
    </tr>
  </tbody>
</table>

<blockquote>
  <p><strong>最核心的区分口诀</strong>：看到 <code class="language-plaintext highlighter-rouge">MifareClassic</code> → M1 卡。看到 <code class="language-plaintext highlighter-rouge">MifareUltralight</code> → NTAG 家族。两者完全不通用。</p>
</blockquote>

<hr />

<h2 id="三种最常见卡从里到外对比">三种最常见卡，从里到外对比</h2>

<h3 id="mifare-classic-m1">Mifare Classic (M1)</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>结构: 16 扇区 × 4 块（每块 16 字节，共 1KB）
      每个扇区的最后一块存密钥 A + 访问控制 + 密钥 B
      ┌────────┬────────┬────────┬────────┐
      │ Block0 │ Block1 │ Block2 │ Key+AC │  ← 扇区 0
      ├────────┼────────┼────────┼────────┤
      │ Block4 │ Block5 │ Block6 │ Key+AC │  ← 扇区 1
      ├────────┼────────┼────────┼────────┤
      │   …                  …      …    │
      └────────┴────────┴────────┴────────┘

安全: CRYPTO-1 算法，2008 年被完全破解。任何人用 Proxmark3 + mfoc
      几秒能拿到所有密钥。但门禁系统不管这个，还在大量用。

写入: 需要先 AUTH 认证（发 60/61 命令 + 密钥），再发 A0 WRITE
</code></pre></div></div>

<h3 id="ntag--ntag-ic">NTAG / NTAG I²C</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>结构: 线性页（每页 4 字节，从 Page 0 到 Page 255）
      Page 0-1: UID（7 字节）
      Page 2:   配置 + 锁
      Page 3:   Capability Container (CC)
      Page 4+:  用户数据区

安全: 默认无密码。支持 PWD_AUTH 可选开启（NTAG 213/215/216）。
      NTAG I²C Plus 额外支持 ECC 原始性签名。

写入: 不需要认证。直接发 A2 WRITE 指令（4 字节/页）。
      NT3H2111 出厂 CC 全 0 时需要先写 CC。
</code></pre></div></div>

<h3 id="mifare-ultralight">Mifare Ultralight</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>结构: 跟 NTAG 几乎一样（线性页），但容量更小（64 字节）。
      可以理解为"NTAG 的祖先"。

定位: 已经被 NTAG 全面替代。新项目不要选。
      除非你在修复一套十年前的公交充值系统。
</code></pre></div></div>

<hr />

<h2 id="这些卡之间能互写吗">这些卡之间能互写吗</h2>

<p><strong>不能。</strong> 虽然它们共用 13.56MHz 物理层和 ISO 14443-3A 防碰撞协议，但<strong>命令集完全不同</strong>：</p>

<table>
  <thead>
    <tr>
      <th>操作</th>
      <th>M1 卡的指令</th>
      <th>NTAG 的指令</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>读块</td>
      <td><code class="language-plaintext highlighter-rouge">30</code> (READ)</td>
      <td><code class="language-plaintext highlighter-rouge">30</code> (READ，参数不同)</td>
    </tr>
    <tr>
      <td>写块</td>
      <td><code class="language-plaintext highlighter-rouge">A0</code> (WRITE，16 字节/块)</td>
      <td><code class="language-plaintext highlighter-rouge">A2</code> (WRITE，4 字节/页)</td>
    </tr>
    <tr>
      <td>认证</td>
      <td><code class="language-plaintext highlighter-rouge">60</code> / <code class="language-plaintext highlighter-rouge">61</code> (AUTH A/B)</td>
      <td>无需认证</td>
    </tr>
    <tr>
      <td>增值/减值</td>
      <td><code class="language-plaintext highlighter-rouge">C1</code> / <code class="language-plaintext highlighter-rouge">C0</code></td>
      <td>不支持</td>
    </tr>
  </tbody>
</table>

<p>一张 NT3H2111 芯片内部根本没有 CRYPTO-1 加密引擎，接收到 <code class="language-plaintext highlighter-rouge">A0</code> 命令只会返回 NACK。</p>

<blockquote>
  <p><strong>类比</strong>：M1 是 Excel 格式 (.xlsx)，NTAG 是 CSV 格式 (.csv)。文件后缀不同，解析器不同，不能互相打开。</p>
</blockquote>

<hr />

<h2 id="mp3h1101--nt3h2111-的替代到底是什么">MP3H1101 → NT3H2111 的”替代”到底是什么</h2>

<p>有人看到 NXP 说”NT3H2111 替代 NT3H1101”，以为新产品该兼容所有旧协议。但替代的是<strong>产品定位</strong>，不是协议栈：</p>

<table>
  <thead>
    <tr>
      <th>维度</th>
      <th>NT3H1101（老）</th>
      <th>NT3H2111（新，替代）</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>NFC 协议</td>
      <td>NFC Forum T2T</td>
      <td>NFC Forum T2T（一样）</td>
    </tr>
    <tr>
      <td>I²C 接口</td>
      <td>✅</td>
      <td>✅</td>
    </tr>
    <tr>
      <td>SRAM buffer</td>
      <td>无</td>
      <td>64 字节（新增）</td>
    </tr>
    <tr>
      <td>Pass-through</td>
      <td>无</td>
      <td>✅（I²C ↔ NFC 直通）</td>
    </tr>
    <tr>
      <td>能量采集</td>
      <td>基础</td>
      <td>增强版</td>
    </tr>
    <tr>
      <td><strong>Mifare Classic 兼容</strong></td>
      <td>❌ 不支持</td>
      <td>❌ 不支持（还是不支持）</td>
    </tr>
  </tbody>
</table>

<p>NT3H2111 是”NTAG 标签 + I²C 双接口”这条产品线内的迭代。它替代的是 NT3H1101 在<strong>物联网数据共享 / 传感器标签 / 能量采集</strong>这些场景的位置，<strong>不是给 M1 卡做兼容</strong>。</p>

<hr />

<h2 id="m1-卡死了吗">M1 卡”死了”吗</h2>

<table>
  <thead>
    <tr>
      <th>维度</th>
      <th>状态</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>安全</strong></td>
      <td>死了。CRYPTO-1 2008 年破解，密码秒出。</td>
    </tr>
    <tr>
      <td><strong>NXP 官方</strong></td>
      <td>2015 年起建议新项目用 NTAG/Mifare Plus。但从未宣布停产。</td>
    </tr>
    <tr>
      <td><strong>市场</strong></td>
      <td>活得好好的。中国 50 万+ 门禁系统用 M1，替换成本不可承受。</td>
    </tr>
    <tr>
      <td><strong>出货量</strong></td>
      <td>仍在增长。饭卡、水卡、门禁卡、低端标签全部用 M1。</td>
    </tr>
    <tr>
      <td><strong>估计退役</strong></td>
      <td>2035~2040 年。除非国家强制淘汰。</td>
    </tr>
  </tbody>
</table>

<p><strong>做新项目</strong>：别选 M1，选 NTAG。<strong>对接存量系统</strong>：认命，用 M1 兼容卡。</p>

<hr />

<h2 id="m1-卡能写-url-吗">M1 卡能写 URL 吗</h2>

<p>技术上能，但体验很差。</p>

<table>
  <thead>
    <tr>
      <th>对比</th>
      <th>M1 卡</th>
      <th>NTAG / NT3H2111</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>需要格式化吗</td>
      <td>手工写 CC+NDEF TLV 到扇区</td>
      <td>A2 指令一次搞定</td>
    </tr>
    <tr>
      <td>手机自动弹通知</td>
      <td>⚠️ 大部分 Android 不弹</td>
      <td>✅ 100% 弹出</td>
    </tr>
    <tr>
      <td><strong>iPhone 兼容</strong></td>
      <td>❌ <strong>完全不支持</strong></td>
      <td>✅ 完美支持</td>
    </tr>
    <tr>
      <td>用户需要做什么</td>
      <td>自己打开 App 翻扇区</td>
      <td>贴上去自动弹</td>
    </tr>
  </tbody>
</table>

<blockquote>
  <p><strong>如果目标是”贴上去弹 URL”，NTAG 是唯一正确选择。</strong> iPhone 根本不认 M1 卡作为 NDEF 标签。</p>
</blockquote>

<hr />

<h2 id="手机-nfc-怎么做到同时兼容这么多类型">手机 NFC 怎么做到同时兼容这么多类型</h2>

<p>手机内置的 NFC 控制器（如红米 K80 用的 NXP PN557/PN80T）是<strong>可编程 RF 前端</strong>。每次贴卡时：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>手机发 ALL_REQ (26h) → 卡回答 ATQA →
    ATQA = 0x0004 → 走 Mifare Classic 协议栈
    ATQA = 0x0044 → 走 NTAG / Ultralight 协议栈
    ATQA = 0x0344 → 走 NTAG I²C Plus 协议栈
</code></pre></div></div>

<p>控制器内部是一个<strong>状态机</strong>，在几十微秒内根据 ATQA 值选择对应的命令集。PN532 模块也是同样原理——<strong>两者本质上是同一家 NXP 芯片的不同封装</strong>。</p>

<hr />

<h2 id="实战一张-nt3h2111-板子的救砖记录">实战：一张 NT3H2111 板子的救砖记录</h2>

<p>这是本文写作的起点。症状：</p>

<ul>
  <li>NT3H2111 板子，独立工作，无 MCU</li>
  <li>红米 K80 能读 UID，但写不进任何数据</li>
  <li>VOUT 稳定在 3.0V，排除了 RF 供电问题</li>
  <li>NXP TagInfo 显示 <code class="language-plaintext highlighter-rouge">NdefFormatable</code> + CC = <code class="language-plaintext highlighter-rouge">00 00 00 00</code></li>
</ul>

<p><strong>根因</strong>：NT3H2111 出厂 Page 3 (CC) 空白。NDEF API 判定”不是合法 NFC 标签”，拒收所有写入。</p>

<p><strong>解法</strong>：用 NFC Tools Pro 的”先进命令”发两条原始 A2 指令：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>A2:03:E1:10:6D:00      → 写 Page 3 (CC: NDEF v1.0, 436 字节可用)
A2:04:03:00:FE:00      → 写 Page 4 (空 NDEF TLV + Terminator)
</code></pre></div></div>

<p>返回 <code class="language-plaintext highlighter-rouge">0A</code>（ACK）即成功。扫第二遍，<code class="language-plaintext highlighter-rouge">NdefFormatable</code> 变成 <code class="language-plaintext highlighter-rouge">Ndef</code>，现在所有 NFC App 都能正常写入。</p>

<blockquote>
  <p><strong>公式</strong>：任何新的 NT3H2111 板子，焊完后第一条命令就是写默认 NDEF。以后交付使用时再也无需救砖。</p>
</blockquote>

<hr />

<h2 id="选卡决策树">选卡决策树</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>你想做什么？
│
├─ 写 URL / WiFi 配网 / App 跳转 / 设备配对
│   └─ 选 NTAG（NTAG213/215/216 或 NT3H2111）
│
├─ 复刻门禁卡 / 饭卡 / 水卡（存量系统）
│   ├─ 原卡是 M1 → 买 CUID 空白卡（¥5/张）
│   └─ 原卡是 NTAG → 买 NTAG213（¥2/张）
│
├─ 自己做物联网板子，需要 MCU 跟手机交换数据
│   └─ 选 NTAG I²C（NT3H2111/2211）
│
├─ 做校园卡/企业工卡（从零设计）
│   └─ 选 NTAG + 云端验证 ← 现代方案
│
├─ 做公交卡 / 支付卡
│   └─ 选 Mifare DESFire（需要跟公交公司/银联对接）
│
└─ 不知道，想玩
    └─ 淘宝搜 "NFC 空白卡组合包"，¥10 每种来一张
</code></pre></div></div>

<hr />

<h2 id="常用工具一表">常用工具一表</h2>

<table>
  <thead>
    <tr>
      <th>工具</th>
      <th>平台</th>
      <th>我用来干嘛</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>NFC Tools Pro</strong></td>
      <td>Android/iOS</td>
      <td>读写 NDEF、发原始 A2 指令救砖</td>
    </tr>
    <tr>
      <td><strong>NXP TagInfo</strong></td>
      <td>Android/iOS</td>
      <td>看 UID、CC、锁字节、ATQA，诊断首选</td>
    </tr>
    <tr>
      <td><strong>MCT (Mifare Classic Tool)</strong></td>
      <td>Android</td>
      <td>读/写 M1 卡扇区、导入导出 dump</td>
    </tr>
    <tr>
      <td><strong>NXP TagXplorer</strong></td>
      <td>Windows</td>
      <td>PC 端图形化读写 NTAG/M1，支持 PN532</td>
    </tr>
    <tr>
      <td><strong>NXP NFC Cockpit</strong></td>
      <td>Windows</td>
      <td>NTAG I²C Plus 专属调试</td>
    </tr>
    <tr>
      <td><strong>Python + nfcpy + PN532</strong></td>
      <td>全平台</td>
      <td>量产自动化刷卡</td>
    </tr>
  </tbody>
</table>

<hr />]]></content><author><name>Weiqing Liu</name><email>mailto:liuweiqing147@gmail.com</email></author><category term="tech" /><category term="NFC" /><category term="Mifare Classic" /><category term="NTAG" /><category term="Ultralight" /><summary type="html"><![CDATA[搞了块 NT3H2111 板子，能读不能写，修了一下午。修完发现 NFC 卡的类型比想象中复杂得多。干脆写下来，免得以后再来一遍。]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://sixiangjia.de/assets/images/morandi.jpg" /><media:content medium="image" url="https://sixiangjia.de/assets/images/morandi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="zh"><title type="html">Schadenfreude：当别人的不幸，让我们心里发笑</title><link href="https://sixiangjia.de/lifestyle/Schadenfreude/" rel="alternate" type="text/html" title="Schadenfreude：当别人的不幸，让我们心里发笑" /><published>2026-07-18T00:00:00+08:00</published><updated>2026-07-18T00:00:00+08:00</updated><id>https://sixiangjia.de/lifestyle/Schadenfreude</id><content type="html" xml:base="https://sixiangjia.de/lifestyle/Schadenfreude/"><![CDATA[<blockquote>
  <p>有一类词，翻译成中文总差点意思。
比如”尴尬”，比如”氛围感”，比如——Schadenfreude。</p>
</blockquote>

<h2 id="一个没有完美中文译名的词">一个没有完美中文译名的词</h2>

<p>德语 <strong>Schadenfreude</strong>，由两个词根拼成：<strong>Schaden</strong>（损害、灾祸）+ <strong>Freude</strong>（快乐、高兴）。字面意思就是”对他人灾祸的快乐”。</p>

<p>如果硬翻，能想到的版本有：</p>

<ul>
  <li>幸灾乐祸</li>
  <li>看见别人倒霉就开心</li>
  <li>损人利己的快意</li>
</ul>

<p>但这些中文表达，<strong>全都带着太重的道德评价</strong>。幸灾乐祸在汉语里一开口就是贬义，是被指责的对象。</p>

<p>而 Schadenfreude 不一样。它是德国人、英国人、美国人、西班牙人、日本人都会有的情感。它写进了维基百科，写进了牛津词典，写进了心理学的论文里。<strong>它不是少数人的阴暗角落，而是人类共有的情绪</strong>。</p>

<p>正因为它”普遍但不光彩”，才需要专门一个词来装它。</p>

<h2 id="一个从-19-世纪走出来的高频词">一个从 19 世纪走出来的高频词</h2>

<p>虽然这种情感古老得能追溯到《圣经》和古希腊戏剧，但 “Schadenfreude” 这个词被记录下来，最早能查到的是 18 世纪。</p>

<ul>
  <li><strong>1740 年代</strong>：德语出版物里开始出现这个词的雏形</li>
  <li><strong>19 世纪</strong>：随着德语区的文化影响力，Schadenfreude 进入了英语词典的”外来词附录”</li>
  <li><strong>2000 年后</strong>：随着互联网和全球化，Schadenfreude 一路逆袭，从冷门词变成日常词</li>
  <li><strong>2015 年</strong>：牛津大学出版社把它列入”年度候选词”——虽然没有夺冠，但能进决赛圈已经说明它的地位</li>
</ul>

<p>今天，Schadenfreude 已经是英语里<strong>几乎不需要斜体</strong>的德语借词。它的发音是 <code class="language-plaintext highlighter-rouge">ˈʃɑːdənfrɔɪdə</code>（英式）或 <code class="language-plaintext highlighter-rouge">ˈʃɑːdənfrɔɪdə</code>（美式），重音在第一音节。</p>

<h2 id="心理学家眼中的-schadenfreude">心理学家眼中的 Schadenfreude</h2>

<p>它不只是语言现象，更是被严肃研究过的情绪反应。</p>

<p><strong>Tiffany Ito 和她同事的实验</strong>（2004，纽约大学）：让志愿者观看同事”中彩票”或”摔跤跌倒”两种视频，同时用 fMRI 扫描大脑。结果发现——</p>

<ul>
  <li>看到别人中彩票：腹侧纹状体（reward circuitry，奖赏回路）激活</li>
  <li>看到别人跌倒：<strong>特别是当你不喜欢那个人的时候</strong>，腹侧纹状体也激活</li>
  <li>而且<strong>激活强度和”讨厌程度”成正比</strong></li>
</ul>

<p>换句话说，<strong>别人倒霉让你快乐的程度，取决于你对他的厌恶程度</strong>。</p>

<p>这解释了很多现实场景：</p>

<ul>
  <li>为啥同事被领导骂了，你心里偷偷爽？</li>
  <li>为啥情敌分手，你嘴上说”可惜”心里笑出声？</li>
  <li>为啥你讨厌的明星塌房，你会发朋友圈庆祝？</li>
</ul>

<p>不是因为你冷血，而是<strong>大脑的奖赏回路在特定条件下被触发了</strong>。</p>

<h2 id="东西方对它的态度差">东西方对它的态度差</h2>

<p>有趣的是，<strong>不同文化对 Schadenfreude 的容忍度不同</strong>。</p>

<p><strong>西方</strong>（尤其是英美、荷兰、北欧）：Schadenfreude 在民间接受度较高。说出来甚至能引发共鸣——”哈，你也有 Schadenfreude 吧？” 它被当作一种<strong>人性常态</strong>来谈。</p>

<p><strong>东亚文化</strong>（尤其受儒家影响的地区）：这种情感被严格压制。”幸灾乐祸”在汉语里几乎等于人品有问题。说出来会被群嘲甚至孤立。所以我们学会了<strong>在心里笑，不在脸上笑</strong>。</p>

<p>但<strong>压抑不等于消失</strong>。</p>

<p>心理学研究显示，越是文化上不鼓励某种情绪的人，越<strong>容易在私下体验</strong>这种情绪，只是更不愿意承认。东亚受访者在匿名问卷里承认 Schadenfreude 的比例，和西方受访者几乎一样高。</p>

<p><strong>它不是消失了，是被藏起来了。</strong></p>

<h2 id="它是恶还是人之常情">它是恶，还是人之常情？</h2>

<p>大多数心理学家给的答案是后者——<strong>人之常情，但需要被管理</strong>。</p>

<p>Schadenfreude 本身不是”坏”：</p>

<ul>
  <li>它可能源自<strong>社会比较</strong>——别人倒霉说明自己还行</li>
  <li>它可能源自<strong>公平感的恢复</strong>——讨厌的人被”天道”收拾了</li>
  <li>它甚至可能源自<strong>同理心的残余</strong>——我对他人的痛苦有反应，但那个反应被扭曲了</li>
</ul>

<p>但当它<strong>过头</strong>时，会滑向：</p>

<ul>
  <li><strong>恶意</strong>（看到别人真的受苦而狂喜）</li>
  <li><strong>冷漠</strong>（对他人的痛苦无感）</li>
  <li><strong>网络暴力</strong>（围观甚至制造他人灾难）</li>
</ul>

<p>区别在哪里？<strong>你有没有意识到这是 Schadenfreude</strong>。</p>

<p>一旦你能命名它，它就<strong>从你体内的一头小野兽，变成一只可观察的宠物</strong>。你仍然会被它逗笑，但你不再被它牵着走。</p>

<h2 id="一个用法示范">一个用法示范</h2>

<p>日常英语里，Schadenfreude 几乎是<strong>万能的社交润滑剂</strong>。</p>

<ul>
  <li>“我承认我有点 Schadenfreude 当年那个抄袭我论文的人被撤稿了。”</li>
  <li>“Don’t pretend you didn’t feel some schadenfreude when he slipped on stage.”</li>
  <li>“Social media is basically a giant schadenfreude machine.”</li>
</ul>

<p>把它用在合适的场合，反而是一种<strong>自我暴露式的真诚</strong>——”我承认我也有不光彩的一面”，比”我才不会幸灾乐祸呢”要可信得多。</p>

<h2 id="最后">最后</h2>

<p>Schadenfreude 是个好词。</p>

<p>不是因为我们能心安理得地品味它，而是因为<strong>它给一种普遍但被压抑的情感一个名字</strong>。</p>

<p>有一个名字，意味着你<strong>能谈论它、研究它、反思它</strong>。</p>

<p>下一次当你偷偷为某人的倒霉而开心时——别急着自责。<strong>承认它，了解它，看清它的来源</strong>。然后决定：是顺从它、表达它，还是放下它。</p>

<p>这才是 Schadenfreude 教给我们最重要的事。</p>

<hr />

<p><strong>后记</strong></p>

<p>中文学术圈有时把它翻译成”幸灾乐祸”，但也有人提议音译为”<strong>舍登弗罗伊德</strong>“。我个人觉得后者更传神——既保留了它的德语血统，又暗示了它和弗洛伊德研究的暗合。</p>

<p>你会怎么称呼它？</p>]]></content><author><name>Weiqing Liu</name><email>mailto:liuweiqing147@gmail.com</email></author><category term="lifestyle" /><category term="心理学" /><category term="自体心理学" /><category term="情感" /><summary type="html"><![CDATA[有一类词，翻译成中文总差点意思。 比如”尴尬”，比如”氛围感”，比如——Schadenfreude。]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://sixiangjia.de/assets/images/morandi.jpg" /><media:content medium="image" url="https://sixiangjia.de/assets/images/morandi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="zh"><title type="html">我们极度渴望”被看见”？</title><link href="https://sixiangjia.de/lifestyle/mirror/" rel="alternate" type="text/html" title="我们极度渴望”被看见”？" /><published>2026-07-17T00:00:00+08:00</published><updated>2026-07-17T00:00:00+08:00</updated><id>https://sixiangjia.de/lifestyle/mirror</id><content type="html" xml:base="https://sixiangjia.de/lifestyle/mirror/"><![CDATA[<p>你可能花了几周时间死磕一个底层逻辑，或者在团队中默默承担了无数琐碎的沟通与需求对接。当一切顺利运转时，这些隐性劳动仿佛空气般理所当然；只有在系统崩溃或环节脱节时，你的存在才会被突然标记。</p>

<p>这种长期处于”隐性”状态的体验，往往会催生一种内心的虚无。因为从心理学底层来看，<strong>人类终其一生都在追寻一种核心体验——被真正地”看见”。</strong></p>

<p>这种渴望和马斯洛金字塔里”尊重需求”那个层级紧密挂钩，但它比尊重更原始。尊重是社会地位的投影，”被看见”却是存在本身的确认——<em>“你是否真的存在于他人的世界里？你的存在是否留下了痕迹？”</em></p>

<hr />

<h2 id="1-寻找确认的本能自体心理学中的镜映">1. 寻找确认的本能：自体心理学中的”镜映”</h2>

<p>精神分析学家 <strong>海因茨·科胡特（Heinz Kohut）</strong> 在自体心理学中提出了一个核心概念：<strong>镜映（Mirroring）</strong>。</p>

<p>科胡特认为，婴儿并非生来就能感知到”自我”的完整存在。他们是通过照料者（通常是母亲）的眼睛，来完成最初的自我确认的。当婴儿微笑时，如果母亲也报以喜悦的微笑，婴儿的内在体验就是：<em>“我的存在引发了美好的回应，我是有价值的，我是真实存在的。”</em></p>

<blockquote>
  <p><strong>母亲的脸，就是婴儿心理上的第一面镜子。</strong></p>
</blockquote>

<p>这种对”镜子”的渴望并不会随着成年而消退。在成人世界里，我们依然需要外界的”镜映”来维持内心的秩序。当我们的努力、情绪或真实的个性向外界发出信号，并得到客观、准确且积极的回应时，我们虚幻的心理轮廓才会被赋予真实的”实体重量”。反之，如果长久得不到回音，个体的自我价值感就会面临瓦解的风险。</p>

<p>我甚至觉得，”镜映”的需求在数字时代变得更尖锐了。几百人的大群、几千条未读消息、朋友圈一刷即过的点赞——我们被”看见”的次数暴增了，但每一次看见的深度被碾压了。廉价的表情回复和机械的”收到”，不是镜映，是噪声。它们让你有了被回应的错觉，却没有任何人真正接收了你的信号。某种意义上，<strong>浅层互动泛滥之后，真正的”看不见”反而更痛了。</strong></p>

<hr />

<h2 id="2-真正的看见拒绝廉价的肥皂泡">2. 真正的看见，拒绝廉价的”肥皂泡”</h2>

<p>必须警惕的是，<strong>“被看见”绝不等于毫无根据的吹捧</strong>，或者漫无目的的情感投射。</p>

<p>廉价的赞美和空泛的社交客套，就像是用幻想吹出来的肥皂泡。它们或许能在阳光下折射出短暂的绚丽，但缺乏现实的根基，一戳即破。真正的强者和心智成熟的人，对这种”虚假的繁荣”有着本能的排斥。</p>

<p><strong>真正高质量的”镜映”，必须建立在客观现实与实质性成就的基础之上。</strong></p>

<p>它要求观察者具备极高的敏锐度和真诚：</p>

<ol>
  <li><strong>看见具体的成就</strong>——不是泛泛而谈的”你真聪明”，而是精准地指出对方在某个复杂系统优化中的严密逻辑。</li>
  <li><strong>看见枯燥的韧性</strong>——任何耀眼的高光时刻背后，都是漫长且无聊的基建工作。真正的看见，是认可对方在枯燥事务中扛住压力的执行力。</li>
  <li><strong>看见隐性的价值</strong>——识别出那些维系团队运转、却极易被视为理所当然的付出。</li>
</ol>

<p>只有当赞美与一个人真实的努力和成就严丝合缝地对接时，这种”看见”才具备直击人心的力量。</p>

<p>这里有一个容易被忽略的悖论：<strong>给出真正的镜映，对镜映者本人的要求，其实比对被镜映者的要求更高。</strong> 你得先放下自己的自恋，去真正理解对方的处境和逻辑。你得知道他到底死磕了什么、放弃了什么、那件事究竟难在哪。这不是一种廉价的社交礼仪，而是一种需要投入认知和情感的能力——你是真的听懂了、看懂了，然后才开口。</p>

<hr />

<h2 id="3-撕掉透明感成为彼此的实体化力量">3. 撕掉透明感：成为彼此的实体化力量</h2>

<p>在这个充满防御机制的社会里，很多人为了避免在深度关系中受伤，习惯性地给自己穿上”隐身衣”，用冷漠或圆滑的面具将真实的自我隔离。</p>

<p>但打破这种透明感，并不需要宏大的叙事。它往往发生在我们大方地给出真实反馈的瞬间。</p>

<p>当你明确地告诉一个同事：<em>“感谢你每次耐心收集需求、处理繁琐的交涉”</em>，你其实就是在扮演一面优质的镜子。你在用具体的语言告诉对方：你的辛苦不是毫无意义的空气，它实实在在地改善了我的世界，我懂得它的价值。</p>

<blockquote>
  <p><strong>人类最深层次的孤独，不是身处荒野，而是身处人群却无人照见真实的灵魂。</strong></p>
</blockquote>

<p>当我们学会剥离情绪的滤镜，用客观、具体且不吝啬的态度去认可他人真正的努力时，我们不仅赋予了他人存在的重量，也在这面镜子的反射中，照亮了我们自己。</p>

<hr />

<h2 id="延伸强者需要镜映吗">延伸：强者需要镜映吗？</h2>

<p>需要。科胡特自己说过——”只要我们还活着，我们就需要镜映，就像我们需要氧气一样。”</p>

<p>强者的特殊之处在于两件事：</p>

<ol>
  <li><strong>内化镜映</strong>——他们心里有一面自己打磨多年的镜子。失败时像调试 bug 一样复盘，成功时不等别人拍肩，自己先对自己说”这件事我漂亮地办成了”。这让他们能在漫长的无人问津期保持节奏。</li>
  <li><strong>现实是终极镜子</strong>——代码跑通没有报错、模型跑出好结果、方案在高压线上扛住了——这些冰冷但确凿的事实，比任何人的掌声都更有说服力。</li>
</ol>

<p>所以，强者不是不需要镜子。他们只是砸碎了哈哈镜和美颜镜，只在真正达成的那一刻，去照那面最清晰的现实之镜。</p>]]></content><author><name>Weiqing Liu</name><email>mailto:liuweiqing147@gmail.com</email></author><category term="lifestyle" /><category term="心理学" /><category term="自体心理学" /><category term="镜映" /><summary type="html"><![CDATA[你可能花了几周时间死磕一个底层逻辑，或者在团队中默默承担了无数琐碎的沟通与需求对接。当一切顺利运转时，这些隐性劳动仿佛空气般理所当然；只有在系统崩溃或环节脱节时，你的存在才会被突然标记。]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://sixiangjia.de/assets/images/morandi.jpg" /><media:content medium="image" url="https://sixiangjia.de/assets/images/morandi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="zh"><title type="html">什么？ LLM 能玩转《王者荣耀》，却在 ARC-AGI-3 全军覆没？</title><link href="https://sixiangjia.de/tech/llm-arc3/" rel="alternate" type="text/html" title="什么？ LLM 能玩转《王者荣耀》，却在 ARC-AGI-3 全军覆没？" /><published>2026-06-22T00:00:00+08:00</published><updated>2026-06-22T00:00:00+08:00</updated><id>https://sixiangjia.de/tech/llm-arc3</id><content type="html" xml:base="https://sixiangjia.de/tech/llm-arc3/"><![CDATA[<p>在大模型与通用人工智能（AGI）的研究中，存在一个极其反直觉的“能力倒挂”现象：</p>
<ul>
  <li><strong>在《王者荣耀》（Honor of Kings）中：</strong> 结合腾讯提出的 TiG（Think-In-Games）决策框架，大语言模型（LLM）在宏观决策、出装策略、兵线运营上的准确率可以达到 <strong>90% 以上</strong>，展现出卓越的战略规划能力。</li>
  <li><strong>在最新的 ARC-AGI-3（Abstraction and Reasoning Corpus）交互式推理基准中：</strong> 面对 $64 \times 64$ 的像素格子小游戏，各大顶尖大模型（包括 GPT-5 系列、Gemini 3 系列、Claude 4 系列）的得分<strong>全军覆没，几乎全部低于 1%</strong>。</li>
</ul>

<p>一个是高动态、多智能体、瞬息万变的 3D 竞技大作，一个是看似简单的二维网格推理解谜。为什么大模型在这两个战场表现出如此天差地别？</p>

<hr />

<h2 id="-一-核心多维对比">📊 一、 核心多维对比</h2>

<table>
  <thead>
    <tr>
      <th style="text-align: left">评估维度</th>
      <th style="text-align: left">《王者荣耀》决策机制</th>
      <th style="text-align: left">ARC-AGI-3 交互式推理</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><strong>底层核心挑战</strong></td>
      <td style="text-align: left">宏观状态的多维组合与长周期策略规划。</td>
      <td style="text-align: left">零样本（Zero-shot）下的全新归纳推理、概念抽象与实时试错。</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>数据环境</strong></td>
      <td style="text-align: left">互联网拥有数以亿计的攻略、国服流派演走向、技能机制说明。</td>
      <td style="text-align: left">每一个关卡都是全网从未出现过的、逻辑迥异的全新网格交互。</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>规则感知模式</strong></td>
      <td style="text-align: left"><strong>静态且已知。</strong> 技能伤害公式、推塔收益、野怪刷新时间等参数是写死的。</td>
      <td style="text-align: left"><strong>隐藏且动态。</strong> 模型必须在摸索中自己归纳出：这关的规则是“变色”、是“镜像”还是“重力下落”？</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>认知系统调用</strong></td>
      <td style="text-align: left"><strong>System 1 + 扩展的 System 2</strong>（背书 + 框架剪枝）。</td>
      <td style="text-align: left"><strong>纯粹的 System 2</strong>（完全依赖在线推理与物理模型重构）。</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>LLM 实际表现</strong></td>
      <td style="text-align: left">宏观策略比肩职业选手，微操可通过 API 或专用小模型辅助。</td>
      <td style="text-align: left">哪怕给长思维链（CoT）反复自我反思，依然陷入卡死或复读。</td>
    </tr>
  </tbody>
</table>

<hr />

<h2 id="-二-为什么大模型能称霸王者荣耀">🧠 二、 为什么大模型能称霸《王者荣耀》？</h2>

<p>大模型能在《王者荣耀》中大放异彩，并不意味着它具备了真正的“人类游戏直觉”，而是因为它的架构完美契合了复杂游戏的<strong>多阶段决策降维</strong>：</p>

<h3 id="1-互联网全量知识的开卷考试">1. 互联网全量知识的“开卷考试”</h3>
<p>大模型的预训练数据中，包含了全网最顶级的英雄出装、克制关系、阵容搭配和转线教学（例如：“面对兰陵王需要出肉装提防”、“几分几秒应该去开暴君”）。当大模型在游戏中读取当前的文字版局势（State）时，它本质上是在<strong>做海量攻略的语义匹配和检索</strong>。</p>

<h3 id="2-静态规则下的长周期规划long-horizon-planning">2. 静态规则下的长周期规划（Long-horizon Planning）</h3>
<p>在腾讯 TiG 等框架下，游戏内的底层微操（比如闪现躲技能、精准放指向性技能）通常被交给底层的强化学习小模型（如 PPO 训练的 Action 网络）去执行；而 LLM 则专门扮演<strong>主教练/军师</strong>的角色。由于《王者荣耀》的赢球逻辑（推塔）和基础数值是恒定不变的，LLM 只需要发挥其长文本的上下文能力，做好宏观局势分析即可，这正中其下怀。</p>

<hr />

<h2 id="-三-为什么大模型在-arc-agi-3-惨遭滑铁卢">🕳 三、 为什么大模型在 ARC-AGI-3 惨遭滑铁卢？</h2>

<p>ARC-AGI-3 是弗朗索瓦·肖莱（François Chollet）为了测试 AI 是否具备“真智能”而专门设计的终极考场。它彻底扒掉了大模型的“作弊外衣”：</p>

<h3 id="1-预训练知识的全面熔断">1. 预训练知识的“全面熔断”</h3>
<p>ARC-AGI-3 中的每个任务都刻意绕开了人类语言和既有的游戏概念。比如它会给出一个示例：</p>
<blockquote>
  <p>蓝格子在红格子左边时，绿格子变成两个；
紧接着要求你在一个全新的输入网格中，通过用鼠标点击、尝试、观察格子反馈，来自己猜出这关的过关规则。</p>
</blockquote>

<p>这里没有攻略可查，大模型脑子里的万亿级语料在这一刻直接变成了白纸。</p>

<h3 id="2-transformer-架构的硬伤无法实时写入新物理模型">2. Transformer 架构的硬伤：无法实时写入“新物理模型”</h3>
<p>当人类玩 ARC-AGI-3 时，我们先点一下屏幕，发现格子动了，我们会立刻在脑海里建立一个临时的物理模型：“哦！这个小块是有重力的。”如果下一次点击推翻了这个假设，我们会立刻<strong>修正</strong>脑海中的模型。</p>

<p>但大模型（Transformer）的知识是<strong>固化在模型权重中</strong>的。在推理（Inference）阶段，即便给它长思维链（CoT）进行反思，它也只能在 Context Window（上下文窗口）里像写流水账一样去模拟这个过程。它无法真正做到在交互中“实时学习、实时纠错、实时收敛出一个新的认知系统”。</p>

<hr />

<h2 id="-总结向着真正的-agi-演进">📝 总结：向着真正的 AGI 演进</h2>

<p>这个悖论告诉我们：</p>
<blockquote>
  <p>现阶段大模型表现出来的“强大”，很大程度上来源于对人类已有知识库的<strong>超大规模高效模仿与组合</strong>。</p>
</blockquote>

<p>玩转《王者荣耀》证明了大模型在已有复杂规则和丰富数据下的<strong>策略泛化极限</strong>；而折戟 ARC-AGI-3 则揭示了 AGI 真正的必经之路——AI 必须学会如何在  <code class="language-plaintext highlighter-rouge">数据贫瘠、规则未知、没有参考答案的全新环境中，像人类幼崽一样通过“自发探索 ➡️ 失败反思 ➡️ 建立新认知”</code> 的闭环去解决问题。这也是未来如 R1 等推理模型下一阶段必须要攻克的终极圣杯。</p>]]></content><author><name>Weiqing Liu</name><email>mailto:liuweiqing147@gmail.com</email></author><category term="tech" /><category term="LLM" /><category term="ARC-AGI-3" /><category term="游戏" /><category term="模型推理" /><summary type="html"><![CDATA[在大模型与通用人工智能（AGI）的研究中，存在一个极其反直觉的“能力倒挂”现象： 在《王者荣耀》（Honor of Kings）中： 结合腾讯提出的 TiG（Think-In-Games）决策框架，大语言模型（LLM）在宏观决策、出装策略、兵线运营上的准确率可以达到 90% 以上，展现出卓越的战略规划能力。 在最新的 ARC-AGI-3（Abstraction and Reasoning Corpus）交互式推理基准中： 面对 $64 \times 64$ 的像素格子小游戏，各大顶尖大模型（包括 GPT-5 系列、Gemini 3 系列、Claude 4 系列）的得分全军覆没，几乎全部低于 1%。]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://sixiangjia.de/assets/images/morandi.jpg" /><media:content medium="image" url="https://sixiangjia.de/assets/images/morandi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="zh"><title type="html">免费的暗中标价：中外“世界杯竞猜”的逻辑碰撞</title><link href="https://sixiangjia.de/finance/worldcup-gamble/" rel="alternate" type="text/html" title="免费的暗中标价：中外“世界杯竞猜”的逻辑碰撞" /><published>2026-06-20T00:00:00+08:00</published><updated>2026-06-20T00:00:00+08:00</updated><id>https://sixiangjia.de/finance/worldcup-gamble</id><content type="html" xml:base="https://sixiangjia.de/finance/worldcup-gamble/"><![CDATA[<p>小红书在世界杯期间推出了免费竞猜活动：<strong>一天内四场赛事结果全部预测正确，即可瓜分 10万 现金奖池。</strong> 这种“零金钱投入、猜对分现金”的玩法在国内被视为常规的营销福利；但在欧美市场，谷歌等巨头却绝不会效仿。</p>

<p>同样的活动，为何面临截然相反的定性？核心差异在于：<strong>中外两套体系对“免费”背后的代价，有着完全不同的判定标准。</strong></p>

<hr />

<h4 id="一-国内视角看似零门槛实则暗中标价">一、 国内视角：看似零门槛，实则暗中标价</h4>

<p>国内法律判定赌博的核心标尺是<strong>是否支付金钱</strong>。只要不掏钱下注，就是合法的有奖促销。但这让成本全部以隐性的方式转移到了用户身上：</p>

<ul>
  <li><strong>极高的注意力成本：</strong> 一天四场全中难度极大。为了提高胜率，用户必须反复打开 APP、查阅球队分析、蹲守赛程与结算。这种为了几块钱耗费大量整块时间的行为，本质是用不可再生的注意力，为平台的流量池打免费长工。</li>
  <li><strong>隐私数据的让渡：</strong> 参与答题、偏好球队、浏览轨迹等行为会被完整采集。用户默认用个人数据换取福利，长期面临隐私泄露与被精准营销收割的风险。</li>
  <li><strong>驯化投机心理：</strong> 这种高难度的免本金竞猜，极易用“差点全中”的错觉制造心理依赖，模糊娱乐与博弈的边界，让人无意识地沉迷其中。</li>
</ul>

<h4 id="二-欧美视角没有真正的免费隐性对价即交易">二、 欧美视角：没有真正的免费，隐性对价即交易</h4>

<p>欧美监管体系的底层认知是：<strong>对价不只有现金，任何对平台有商业价值的付出（看广告、贡献流量、留存数据），都属于法定意义上的“有偿交换”。</strong></p>

<ul>
  <li><strong>严苛的法律定性：</strong> 在欧美，如果参与抽奖/瓜分现金的前提是必须在 APP 内完成任务或互动，这就构成了“隐性对价”。该活动会被直接判定为受严格管制的体育博彩，无证运营将面临重罚。</li>
  <li><strong>跨国巨头的商业取舍：</strong> 谷歌等平台服务全球，面对各国对“隐性对价”的严苛限制，推出这类现金竞猜的合规风险极高。同时，利用小额现金诱导用户出让时间与数据的模式，在欧美也面临极大的舆论与商业伦理风险。</li>
</ul>

<hr />

<h4 id="三-核心逻辑对比表">三、 核心逻辑对比表</h4>

<table>
  <thead>
    <tr>
      <th>维度</th>
      <th>国内市场视角</th>
      <th>欧美市场视角</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><strong>成本/对价判定</strong></td>
      <td>仅认定<strong>现金</strong>为成本。</td>
      <td><strong>时间、隐私、APP互动</strong>均视为法定成本。</td>
    </tr>
    <tr>
      <td><strong>同类活动定性</strong></td>
      <td>合规的营销福利。</td>
      <td>涉嫌非法的体育博彩或彩票。</td>
    </tr>
    <tr>
      <td><strong>监管与平台导向</strong></td>
      <td>防范金钱赌博；平台以奖金换取流量。</td>
      <td>防范隐性剥削；强制平台提供无数据消耗的参与通道。</td>
    </tr>
  </tbody>
</table>

<h4 id="总结">总结</h4>

<p>建立成本意识是参与一切互联网活动的前提。免费从来不是馈赠，只是支付方式从现金变成了你的<strong>时间</strong>与<strong>数据</strong>。偶尔参与赛事预测作为消遣无可厚非，但务必看清隐藏的代价，不要被“零门槛”的噱头裹挟，更不值得为了极难达成的“四场全对”而过度消耗个人精力。</p>]]></content><author><name>Weiqing Liu</name><email>mailto:liuweiqing147@gmail.com</email></author><category term="finance" /><category term="世界杯竞猜" /><category term="免费的代价" /><category term="隐性对价" /><category term="法律定性" /><summary type="html"><![CDATA[小红书在世界杯期间推出了免费竞猜活动：一天内四场赛事结果全部预测正确，即可瓜分 10万 现金奖池。 这种“零金钱投入、猜对分现金”的玩法在国内被视为常规的营销福利；但在欧美市场，谷歌等巨头却绝不会效仿。]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://sixiangjia.de/assets/images/morandi.jpg" /><media:content medium="image" url="https://sixiangjia.de/assets/images/morandi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="zh"><title type="html">大模型经济学：从航运与钢铁的周期宿命，看AI算力的“低PE泡沫”终局</title><link href="https://sixiangjia.de/finance/llm_economics_analysis/" rel="alternate" type="text/html" title="大模型经济学：从航运与钢铁的周期宿命，看AI算力的“低PE泡沫”终局" /><published>2026-06-07T00:00:00+08:00</published><updated>2026-06-07T00:00:00+08:00</updated><id>https://sixiangjia.de/finance/llm_economics_analysis</id><content type="html" xml:base="https://sixiangjia.de/finance/llm_economics_analysis/"><![CDATA[<blockquote>
  <p><strong>摘要</strong>：在资本市场的历史长河中，没有什么比“繁荣时期的个位数市盈率（PE）”更具诱惑力，也更具毁灭性。本文通过复盘2021年航运业（马士基PE 3倍）与2007年钢铁工业的周期宿命，深入剖析当前AI算力产业链的“低PE泡沫”底层逻辑。</p>
</blockquote>

<hr />

<h2 id="一-历史的韵脚个位数pe的死亡诱惑">一、 历史的韵脚：个位数PE的“死亡诱惑”</h2>

<p>要理解大模型经济学的宿命，必须先厘清资本在周期顶点是如何形成估值幻觉的。传统的预期泡沫（如2000年互联网泡沫）表现为“高PE”，市场炒作的是虚无缥缈的远期叙事，一旦核心公司的愿景破灭，估值多米诺骨牌会瞬间倒塌。而航运、钢铁以及当下的AI算力产业链，呈现出的则是完全相反的<strong>“低PE泡沫”</strong>。</p>

<blockquote>
  <p><em>“低PE泡沫最危险的地方在于：微观数据完美无瑕，盈利增长会给你足够的信心，在遭遇小幅下跌时不断加仓。毕竟，谁能拒绝一个毛利率高达80%、市盈率仅有个位数的行业？”</em></p>
</blockquote>

<p>当行业处于爆发期，需求呈现指数级增长，而供给由于物理限制（船舶建造周期、高带宽内存HBM扩产周期、晶圆厂建设周期）只能线性增加。供需极度错配导致产品价格飙升，企业利润呈现爆发式增长。因为利润分母（E）增加得太快，导致市盈率（P/E）在股价高位时看起来反而极低。投资人往往在此时陷入“结构性改变”的信仰，误以为高利润将永远持续，却遗忘了周期律的核心：<strong>高利润必然吸引超额投资，而超额投资必然导致产能过剩。</strong></p>

<hr />

<h2 id="二-供给端的牛鞭效应与需求端的商品化降级">二、 供给端的“牛鞭效应”与需求端的“商品化降级”</h2>

<p>大模型经济学当前的死穴，正在于供需两侧正在发生的诡异剪刀差。</p>

<h3 id="1-供给端的五亿探长效应与成本失控">1. 供给端的五亿探长效应与成本失控</h3>
<p>在AI算力产业链发展初期，台积电和英伟达作为唯一的“守门员”，严格控制着货源、利润率与定价权。然而，随着算力竞赛进入白热化，从GPU代工、HBM存储、液冷系统到CPO光模块，每一个细分赛道的供应商都开始出现资本支出（Capex）的疯狂扩张。整个供应链为了在狂欢中分一杯羹，都在层层加码、拼命扩产。这种失控的扩产和层层涨价，直接导致云厂商（Hyperscalers）建设每千瓦时（GW）算力集群的边际成本呈指数级上升，这为后续的资本回报率会师蒙上了阴影。</p>

<h3 id="2-需求端的消费降级与模型商品化model-commoditization">2. 需求端的“消费降级”与模型商品化（Model Commoditization）</h3>
<p>与供给端近乎疯狂的投入相比，需求端正在悄然发生质变。在应用层，AI正在从一种“具有神学色彩的颠覆性工具”迅速退化为一种“生产线上的标准件商品”。</p>

<p>深度用户和开发者的实际体验清晰地表明：对于日常90%的代码编写、自动化脚本运维和常规文本逻辑处理，免费模型的Token份额或者经过极致蒸馏的开源模型，其能力已经完全跨过了及格线。在真实的商业环境中，AI正在表现出一个残酷的规律：<strong>系统开发成本极高，但使用成本和迁移成本极低。</strong></p>

<h4 id="-大模型经济学的边际效用递减机制">💡 大模型经济学的边际效用递减机制</h4>
<p>假设顶级商业模型（耗资数十亿美元训练）的极限推理能力为 $I_{top}$，而开源/蒸馏模型的推理能力为 $I_{open}$。在实际应用场景中：</p>

\[ΔI = I_{top} - I_{open} 	o 0\]

<p>（即在90%的日常任务中，二者的体感差异正在收敛）</p>

<p>然而，维持顶级模型推理所需的Token工厂运营成本和硬件摊销成本 $C_{top}$ 却远高于开源模型的部署成本 $C_{open}$。当大厂把大量的算力用于应付庞大的惯性订阅用户时，由于物理算力瓶颈无法一蹴而就，厨房（服务器集群）做不过来，最终导致模型频繁出现“降智”或响应变慢，从而引发了 <strong>“Token质量下降 vs 算力消耗增加”</strong> 的怪异剪刀差。</p>

<hr />

<h2 id="三-周期错配的经典对比历史与当下的对照">三、 周期错配的经典对比：历史与当下的对照</h2>

<p>为了更直观地看清低PE泡沫的终局，我们可以将历史上著名的周期性行业泡沫与当下的AI算力产业链进行严密的指标对比：</p>

<table>
  <thead>
    <tr>
      <th style="text-align: left">行业与典型周期点</th>
      <th style="text-align: left">核心驱动叙事</th>
      <th style="text-align: left">繁荣期的估值特征</th>
      <th style="text-align: left">致命的隐形供给端</th>
      <th style="text-align: left">泡沫破裂的“死穴”</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td style="text-align: left"><strong>2021年 航运业</strong><br />(马士基/中远海控)</td>
      <td style="text-align: left">全球供应链重组与疫情封锁，高运价成为结构性常态。</td>
      <td style="text-align: left">市盈率（PE）跌至 <strong>3-5 倍</strong>，账面现金极其充裕。</td>
      <td style="text-align: left">全球在建集装箱船订单创历史新高，新船在2-3年后集中交付。</td>
      <td style="text-align: left">全球供应链复苏，海外消费需求萎缩，运价雪崩。</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>2007年 钢铁工业</strong><br />(宝钢/米塔尔)</td>
      <td style="text-align: left">新型工业化与城镇化大潮，全球基础建设对钢材具有刚性需求。</td>
      <td style="text-align: left">市盈率（PE）处于 <strong>6-8 倍</strong>，毛利率创历史新高。</td>
      <td style="text-align: left">地方政府与企业疯狂盲目扩产，高炉产能无节制开工。</td>
      <td style="text-align: left">宏观调控收紧，基建增速放缓，全行业陷入产能严重过剩。</td>
    </tr>
    <tr>
      <td style="text-align: left"><strong>2026年 AI算力/半导体</strong><br />(英伟达/存储/光模块)</td>
      <td style="text-align: left">第三次工业革命，Token需求呈指数级升高，全人类脑力劳动大替代。</td>
      <td style="text-align: left">硬件厂商远期PE被强劲的利润分母压至历史相对低位。</td>
      <td style="text-align: left">全产业链（晶圆、HBM、液冷、网络交换机）大举举债或扩产。</td>
      <td style="text-align: left">模型端收入增长放缓，无法 justify 每年高达上万亿的 Capex 投入。</td>
    </tr>
  </tbody>
</table>

<hr />

<h2 id="四-崩塌的传导链条当成长股被打回周期股">四、 崩塌的传导链条：当成长股被打回周期股</h2>

<p>大模型经济学的多米诺骨牌将如何倒下？这绝不是因为AI技术本身失败了（正如2001年互联网没失败、2021年全球化没失败一样），而是由于资本回报的账目无法对齐。其传导路径如下：</p>

<ol>
  <li><strong>现金流反哺链条的断裂</strong>：华尔街目前容忍大厂巨额Capex的前提，是寄希望于顶尖模型公司能通过软件订阅实现指数级营收。如果企业端因为KPI考核以及免费/开源模型的“真香定律”开始缩减Token预算，模型公司的增速就会大幅放缓。大厂的自由现金流（Free Cash Flow）将加速变负，无法再通过投资款转一圈后回流到自己的云服务营收中。</li>
  <li><strong>华尔街的灵魂拷问</strong>：当AMZN、META或MSFT等Hyperscalers面临信用违约掉期（CDS）飙升和负现金流的压力时，投资人会开始严厉质问大厂管理层：每一块买回来的GPU，其真实的投资回报率（ROI）到底是多少？一旦大厂顶不住压力宣布削减明年的资本支出，算力订单将面临断崖。</li>
  <li><strong>估值体系的瞬间重塑</strong>：这是最残酷的一步。原本享受着高科技成长股（Growth Stock）溢价的半导体产业链，会被市场在极短时间内重新定性为<strong>“强周期性硬件股（Cyclical Stock）”</strong>。在资本市场的字典里，周期股在业绩顶点是不能给高估值的。一旦定性改变，高位加满杠杆的资金将遭遇毁灭性的清算。</li>
</ol>

<hr />

<h2 id="五-结语与交易员的赛博生存法则">五、 结语与交易员的赛博生存法则</h2>

<p>历史不会重复，但总是押着相同的韵脚。大模型将毫无疑问地推动第三次工业革命，并最终彻底改变人类的脑力劳动形态。然而，科技革命的长期正确性，从来都不是二级市场硬件供应商免于资本周期惩罚的护身符。那些喝醉了酒、坚信“这次不一样”的信徒，最终都将淹没在产能过剩的洪流中。</p>

<p>面对这样的“低PE泡沫”，踏空和做空同样痛苦，因为在点中死穴之前，它强大的盈利能力足以消灭所有空头。最理性的生存法则，莫过于像一个清醒的狂欢者一样去 <strong>一边看空、一边做多</strong>(短期做多，长期看空)：</p>

<p><strong>可以坐在Party的桌子上继续跳舞，但双眼必须紧紧盯着DJ——只要他放着音乐准备收拾东西跑路，你也得跟着跑。</strong></p>

<hr />

<h2 id="参考资料">参考资料</h2>

<ol>
  <li><a href="https://x.com/ShanghaoJin/status/2061747648764530968">@ShanghaoJin on X</a></li>
</ol>]]></content><author><name>Weiqing Liu</name><email>mailto:liuweiqing147@gmail.com</email></author><category term="finance" /><category term="大模型经济学" /><category term="资本周期" /><category term="低PE泡沫" /><category term="资产周期" /><summary type="html"><![CDATA[摘要：在资本市场的历史长河中，没有什么比“繁荣时期的个位数市盈率（PE）”更具诱惑力，也更具毁灭性。本文通过复盘2021年航运业（马士基PE 3倍）与2007年钢铁工业的周期宿命，深入剖析当前AI算力产业链的“低PE泡沫”底层逻辑。]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://sixiangjia.de/assets/images/morandi.jpg" /><media:content medium="image" url="https://sixiangjia.de/assets/images/morandi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="zh"><title type="html">如何以“解耦”思维应对集体意识的霸凌</title><link href="https://sixiangjia.de/lifestyle/group-individual/" rel="alternate" type="text/html" title="如何以“解耦”思维应对集体意识的霸凌" /><published>2026-05-30T00:00:00+08:00</published><updated>2026-05-30T00:00:00+08:00</updated><id>https://sixiangjia.de/lifestyle/group-individual</id><content type="html" xml:base="https://sixiangjia.de/lifestyle/group-individual/"><![CDATA[<p>最近在思考一个略显沉重却极其普遍的现象：“集体意识对个体意识的霸凌”。</p>

<p>它极少表现为物理层面上的剑拔弩张，而是像空气一样无孔不入。它存在于职场上的“形式主义加班”，存在于过年回家亲戚口中的“按部就班”，也存在于互联网上非黑即白的“站队”。当你的个人选择偏离了大众预期，系统就会向你抛出一个冷冰冰的 Warning：“大家都这样，你为什么非要与众不同？”</p>

<p>面对这种无形的挤压，愤怒和内耗是人的本能。但如果我们暂且抛开情绪，用一种“架构师”的视角来重新审视这个现象，或许能找到一套更底层的破局逻辑。</p>

<h3 id="1-集体意识人类社会的默认操作系统">1. 集体意识：人类社会的“默认操作系统”</h3>

<p>要想理解霸凌，首先要理解系统。</p>

<p>集体意识并不是绝对的真理，它本质上是一套为了维持社会低耗运转而演化出的“默认操作系统（OS）”。这个系统的核心算法是<strong>追求稳定，降低方差</strong>。</p>

<p>试想一下，如果社会中的每一个个体都绝对特立独行，人与人之间的协作成本将高到系统崩溃。为了降低通信和试错成本，集体意识提供了一套庞大的“标准组件库”——常识、道德、习俗、社会时钟（比如三十而立、买房结婚）。</p>

<p>对于大多数人来说，直接调用这套“默认组件”是存活率最高、最省算力的生存策略。这也就解释了为什么集体意识会本能地排斥“异类”。因为任何具备高度独立思考能力的个体，在系统看来，都是可能引发运行不稳定的“高方差异常点”。系统对你的打压和同化，本质上是一种自我保护机制。</p>

<h3 id="2-辩证的张力没有集体的阻力个体的突破就没有价值">2. 辩证的张力：没有集体的阻力，个体的突破就没有价值</h3>

<p>当我们看透了系统的底层逻辑，就会发现，把个体与集体视作水火不容的死敌，是一种低维度的非黑即白。这里有一个乍听之下反直觉，但无比真实的结论：<strong>如果没有集体意识的巨大阻力，个体意识的突破将毫无价值。</strong></p>

<p>为什么？</p>

<p>在物理学中，飞机能够腾空而起，靠的不是顺风，而是逆风带来的强大升力；弹簧能够爆发出力量，是因为它曾被死死地向下压迫。社会的演进也是一样。如果一个系统没有任何规则和约束，所有人都在绝对自由地发散，那不叫“百花齐放”，那叫“布朗运动”（无序的随机热运动）。在绝对的无序中，你的“特立独行”只是一堆随机噪声，泛不起任何涟漪，也无法留下任何确定的结果。</p>

<p><strong>集体意识就像一面沉重、僵硬但边界清晰的墙。</strong> 它确实给你带来了极大的压迫感和“霸凌感”，但也正是这面墙，为你提供了反作用力与坐标系。</p>

<p>当你顶住这股由成千上万人汇聚而成的惯性阻力，在荒野中踩出一条新路，并最终验证了这条路的价值时，你的“个体意识”才真正完成了升华。你不仅证明了自己，你还硬生生地把系统原本的边界向外推了一寸。换句话说：<strong>你的锐度，只有在划破这层厚重的集体阻力时，才证明了它的锋利。没有这层阻力，你的突破也就失去了衡量其伟大程度的刻度尺。</strong></p>

<h3 id="3-个体的破局解法面向接口编程与内外解耦">3. 个体的破局解法：面向接口编程与内外“解耦”</h3>

<p>既然无法消灭系统，又不想被系统吞噬，甚至还要利用系统的阻力来打磨自己，个体该如何自处？对于我们来说，最实用的生存法则是实现“内外解耦”。</p>

<ul>
  <li><strong>对外提供标准 API（封装与兼容）：</strong>
在不涉及底线和核心利益的社会交往中，完全可以兼容集体意识的通信协议。长辈的唠叨、职场上的某些人情世故，该走流程走流程，该返回 <code class="language-plaintext highlighter-rouge">HTTP 200 OK</code> 就返回 200。这不叫虚伪，这叫降低系统的摩擦成本。不要把宝贵的 CPU 算力浪费在毫无意义的对抗上。</li>
  <li><strong>对内运行独立算法（沙箱隔离）：</strong>
对于你的核心价值观、重大的人生决策（去哪里发展、钻研什么技术、选择怎样的生活方式），必须建立严格的物理隔离。在这个“沙箱”里，你拥有绝对的最高权限，决不允许外部的集体意识进行写操作。</li>
  <li><strong>提升算力，获取系统豁免权 (Root Permission)：</strong>
这是一个极其现实的规则：集体意识是慕强的。系统的规则通常是用来约束普通进程的。当你的个体价值极高、不可替代性极强（无论是技术能力、认知深度还是财富积累）时，你会发现集体意识对你的包容度会呈指数级上升。在这个世界上，拥有硬实力的人，天然拥有重写甚至无视部分系统规则的 Root 权限。</li>
</ul>

<h3 id="结语">结语</h3>

<p>保持个体意识的清醒，注定是一场漫长且孤独的逆旅。我们之所以抵御集体意识的霸凌，不是为了标新立异，更不是为了摧毁系统，而是为了在喧嚣的世界上，保住那个能够独立思考的、真实的“自我”。</p>

<p>下一次，当集体意识试图将你格式化时，不妨在心里对自己说一句：<strong>“我的核心代码，拒绝被覆写；而你们的阻力，恰好是我测试性能的最佳环境。”</strong></p>]]></content><author><name>Weiqing Liu</name><email>mailto:liuweiqing147@gmail.com</email></author><category term="lifestyle" /><category term="集体意识" /><category term="个体意识" /><summary type="html"><![CDATA[最近在思考一个略显沉重却极其普遍的现象：“集体意识对个体意识的霸凌”。]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://sixiangjia.de/assets/images/morandi.jpg" /><media:content medium="image" url="https://sixiangjia.de/assets/images/morandi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="zh"><title type="html">Next.js 架构深水区：破解动态传染、客户端边界与 Server Actions 革命</title><link href="https://sixiangjia.de/tech/ssr-serveraction/" rel="alternate" type="text/html" title="Next.js 架构深水区：破解动态传染、客户端边界与 Server Actions 革命" /><published>2026-05-09T00:00:00+08:00</published><updated>2026-05-09T00:00:00+08:00</updated><id>https://sixiangjia.de/tech/ssr-serveraction</id><content type="html" xml:base="https://sixiangjia.de/tech/ssr-serveraction/"><![CDATA[<p>在上一篇文章中，我们探讨了 Next.js 的混合渲染哲学，了解了如何在同一个页面中穿插使用 Server Components 和 Client Components。</p>

<p>然而，当你的项目真正进入深水区：开始做用户鉴权、引入第三方重型图表库、或者试图优化首屏指标时，你大概率会撞上一堵无形的墙——页面莫名其妙退化成了全量 SSR、打包疯狂报错 <code class="language-plaintext highlighter-rouge">window is not defined</code>、API 路由写得让人怀疑人生。</p>

<p>今天，我们将剖析 Next.js 最底层、也最反直觉的几个架构设计，帮你彻底打通全栈任督二脉。</p>

<h2 id="一-警惕动态函数的全盘传染性">一、 警惕：动态函数的“全盘传染性”</h2>

<p>在 App Router 中，我们极度渴望享受 SSG（静态生成）带来的极致秒开体验。但很多开发者发现，自己辛辛苦苦写的静态页面，仅仅因为加了一行判断用户登录状态的代码，整个路由就“沦陷”成了缓慢的动态 SSR。</p>

<p>这就是 Next.js 中极其致命的<strong>动态传染机制</strong>。</p>

<h3 id="1-为什么会发生传染">1. 为什么会发生传染？</h3>

<p>如果你在组件树的<strong>任意一个角落</strong>（哪怕是最深层的一个微小组件），调用了 <code class="language-plaintext highlighter-rouge">cookies()</code>、<code class="language-plaintext highlighter-rouge">headers()</code> 或 <code class="language-plaintext highlighter-rouge">searchParams</code>，Next.js 在打包时就会陷入逻辑死锁。
因为这些数据<strong>只有在用户真实访问的那一刻才能确定</strong>。既然底层的积木缺了一块，上层的父组件、祖父组件自然也就无法在凌晨打包时拼接出完整的静态 HTML。最终，整个页面被迫退化为每次请求时临时生成的 SSR。</p>

<h3 id="2-破局之道suspense-隔离舱-partial-prerendering">2. 破局之道：Suspense 隔离舱 (Partial Prerendering)</h3>

<p>面对这种“一颗老鼠屎坏了一锅汤”的局面，难道我们就不能既享受静态骨架的速度，又拥有动态个性化的数据吗？</p>

<p>答案是 <strong><code class="language-plaintext highlighter-rouge">&lt;Suspense&gt;</code></strong>。这是对抗传染病的终极隔离服：</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">Suspense</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">react</span><span class="dl">'</span><span class="p">;</span>
<span class="k">import</span> <span class="nx">UserProfile</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">./UserProfile</span><span class="dl">'</span><span class="p">;</span> <span class="c1">// 里面使用了 cookies()</span>

<span class="k">export</span> <span class="k">default</span> <span class="kd">function</span> <span class="nf">Page</span><span class="p">()</span> <span class="p">{</span>
  <span class="k">return </span><span class="p">(</span>
    <span class="o">&lt;</span><span class="nx">div</span><span class="o">&gt;</span>
      <span class="p">{</span><span class="cm">/* 这里的文章主体部分依然会保持极致的纯静态 SSG 速度 */</span><span class="p">}</span>
      <span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="nx">十万字长文</span><span class="p">...</span><span class="o">&lt;</span><span class="sr">/h1&gt;</span><span class="err"> 
</span>      
      <span class="p">{</span><span class="cm">/* 建立动态隔离区 */</span><span class="p">}</span>
      <span class="o">&lt;</span><span class="nx">Suspense</span> <span class="nx">fallback</span><span class="o">=</span><span class="p">{</span><span class="o">&lt;</span><span class="nx">p</span><span class="o">&gt;</span><span class="nx">加载用户信息中</span><span class="p">...</span><span class="o">&lt;</span><span class="sr">/p&gt;}</span><span class="err">&gt;
</span>        <span class="o">&lt;</span><span class="nx">UserProfile</span> <span class="o">/&gt;</span>
      <span class="o">&lt;</span><span class="sr">/Suspense</span><span class="err">&gt;
</span>    <span class="o">&lt;</span><span class="sr">/div</span><span class="err">&gt;
</span>  <span class="p">);</span>
<span class="p">}</span>

</code></pre></div></div>

<p>通过 <code class="language-plaintext highlighter-rouge">&lt;Suspense&gt;</code>，Next.js 会把页面瞬间切分为两部分：外壳静态秒开，内部的动态组件则在后台静默渲染并通过流式传输（Streaming）无缝塞入页面。</p>

<h3 id="3-middleware中间件的免死金牌">3. Middleware（中间件）的“免死金牌”</h3>

<p>值得一提的是，如果你只是为了做路由拦截（例如：没登录不准进后台），<strong>千万不要在页面组件里去读 Cookie</strong>。
你应该把鉴权逻辑写在 <code class="language-plaintext highlighter-rouge">middleware.js</code> 中。Middleware 运行在边缘网络（Edge），它在请求到达“页面后厨”之前就已经完成了拦截。因此，<strong>在 Middleware 中处理 Cookie，绝不会破坏你页面的静态化优势。</strong></p>

<hr />

<h2 id="二-重新认识-use-client它不仅在浏览器运行">二、 重新认识 <code class="language-plaintext highlighter-rouge">'use client'</code>：它不仅在浏览器运行</h2>

<p>这是 Next.js 最大的一个命名误导。很多老手看到 <code class="language-plaintext highlighter-rouge">'use client'</code>（客户端组件），会理所当然地认为：“这段代码只会跑在浏览器里。”</p>

<p><strong>错！带有 <code class="language-plaintext highlighter-rouge">'use client'</code> 的组件，依然会在服务器上被执行（预渲染）。</strong></p>

<p>Next.js 的底线是“消灭白屏”。为了提供完整的首屏 HTML，服务器会把客户端组件的“静态外壳”也顺手渲染出来发给浏览器，随后浏览器再下载 JS 脚本对其实施<strong>水合（Hydration）</strong>，让按钮变得可点击。</p>

<h3 id="突破水合崩溃当老旧第三方库遇到-ssr">突破“水合崩溃”：当老旧第三方库遇到 SSR</h3>

<p>正是因为客户端组件也会在服务器跑一遍，当我们引入传统的富文本编辑器（如 UEditor）或图表库（如 ECharts）时，常常会遭遇惨烈的报错：<code class="language-plaintext highlighter-rouge">ReferenceError: window is not defined</code>。因为这些古老的库一启动就会去寻找浏览器的 <code class="language-plaintext highlighter-rouge">window</code> 对象，而 Node.js 服务器里根本没有这个东西。</p>

<p><strong>终极解法：物理级服务端隔离 (<code class="language-plaintext highlighter-rouge">next/dynamic</code>)</strong></p>

<p>不要只写 <code class="language-plaintext highlighter-rouge">'use client'</code>，你必须用官方的动态导入，强行剥夺该组件在服务端的“执行权”：</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="nx">dynamic</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">next/dynamic</span><span class="dl">'</span>

<span class="c1">// ssr: false 是一把物理锁，彻底禁止该文件在服务器端被加载和执行</span>
<span class="kd">const</span> <span class="nx">HeavyChart</span> <span class="o">=</span> <span class="nf">dynamic</span><span class="p">(()</span> <span class="o">=&gt;</span> <span class="k">import</span><span class="p">(</span><span class="dl">'</span><span class="s1">../components/EchartsWrapper</span><span class="dl">'</span><span class="p">),</span> <span class="p">{</span> 
  <span class="na">ssr</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span> 
  <span class="na">loading</span><span class="p">:</span> <span class="p">()</span> <span class="o">=&gt;</span> <span class="o">&lt;</span><span class="nx">p</span><span class="o">&gt;</span><span class="nx">图表引擎加载中</span><span class="p">...</span><span class="o">&lt;</span><span class="sr">/p&gt;</span><span class="err"> 
</span><span class="p">})</span>

<span class="k">export</span> <span class="k">default</span> <span class="kd">function</span> <span class="nf">Dashboard</span><span class="p">()</span> <span class="p">{</span>
  <span class="k">return</span> <span class="o">&lt;</span><span class="nx">HeavyChart</span> <span class="o">/&gt;</span>
<span class="p">}</span>

</code></pre></div></div>

<hr />

<h2 id="三-server-actions革掉前后端-api-联调的命">三、 Server Actions：革掉前后端 API 联调的命</h2>

<p>如果你还在 Next.js 里建 <code class="language-plaintext highlighter-rouge">api/xxx/route.js</code>，然后在前端用 <code class="language-plaintext highlighter-rouge">fetch</code> 或者 Axios 去请求，那你可能错过了 App Router 最震撼的杀手锏——<strong>Server Actions</strong>。</p>

<p>你可以直接在前端按钮的点击事件里，调用后端的数据库操作逻辑！</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// actions.js (后端逻辑，严格运行在服务器)</span>
<span class="dl">'</span><span class="s1">use server</span><span class="dl">'</span>
<span class="k">export</span> <span class="k">async</span> <span class="kd">function</span> <span class="nf">updateUser</span><span class="p">(</span><span class="nx">newName</span><span class="p">)</span> <span class="p">{</span>
  <span class="k">await</span> <span class="nx">db</span><span class="p">.</span><span class="nf">query</span><span class="p">(</span><span class="dl">'</span><span class="s1">UPDATE users SET name = ?</span><span class="dl">'</span><span class="p">,</span> <span class="p">[</span><span class="nx">newName</span><span class="p">]);</span>
  <span class="k">return</span> <span class="p">{</span> <span class="na">success</span><span class="p">:</span> <span class="kc">true</span> <span class="p">};</span>
<span class="p">}</span>

</code></pre></div></div>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// ProfileForm.js (前端组件)</span>
<span class="dl">'</span><span class="s1">use client</span><span class="dl">'</span>
<span class="k">import</span> <span class="p">{</span> <span class="nx">updateUser</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">./actions</span><span class="dl">'</span><span class="p">;</span>

<span class="k">export</span> <span class="k">default</span> <span class="kd">function</span> <span class="nf">Form</span><span class="p">()</span> <span class="p">{</span>
  <span class="k">return </span><span class="p">(</span>
    <span class="c1">// 就像调用本地的 JS 函数一样调用后端逻辑！</span>
    <span class="o">&lt;</span><span class="nx">button</span> <span class="nx">onClick</span><span class="o">=</span><span class="p">{()</span> <span class="o">=&gt;</span> <span class="nf">updateUser</span><span class="p">(</span><span class="dl">'</span><span class="s1">Frank</span><span class="dl">'</span><span class="p">)}</span><span class="o">&gt;</span><span class="nx">更新名字</span><span class="o">&lt;</span><span class="sr">/button</span><span class="err">&gt;
</span>  <span class="p">);</span>
<span class="p">}</span>

</code></pre></div></div>

<h3 id="魔法背后的原理rpc-远程过程调用">魔法背后的原理（RPC 远程过程调用）</h3>

<p>这并不是什么魔幻技术，而是编译器的“移花接木”。
打包时，Next.js 会在后台自动为你生成一个隐藏的 API 接口，并把你前端写的函数调用，偷偷替换成一个带有特殊 ID 的 <code class="language-plaintext highlighter-rouge">fetch(POST)</code> 请求。</p>

<p><strong>⚠️ 唯一铁律：动静分离</strong>
你<strong>绝对不能</strong>在一个带有 <code class="language-plaintext highlighter-rouge">'use client'</code> 的文件内部直接定义 <code class="language-plaintext highlighter-rouge">'use server'</code> 的函数。你必须像上面的例子一样，把服务端动作抽离成独立的 <code class="language-plaintext highlighter-rouge">.js</code> 文件再导出。否则，你的数据库密码可能就会被打包进浏览器的源码里！</p>

<hr />

<h2 id="结语思维的跨越">结语：思维的跨越</h2>

<p>从理解编译产物中的 <code class="language-plaintext highlighter-rouge">○ (Static)</code> 和 <code class="language-plaintext highlighter-rouge">ƒ (Dynamic)</code>，到掌握 <code class="language-plaintext highlighter-rouge">'use client'</code> 的真实序列化边界，再到用 Server Actions 击碎前后端的 API 壁垒。</p>

<p>现代的 Next.js 已经不再是一个简单的“React SSR 框架”，它是一台精密的全栈编译器。当你能像架构师一样，精确地掌控每一行代码是在凌晨打包时运行、是在边缘网络拦截、还是在用户浏览器的下一帧水合时，你就真正掌握了现代 Web 性能与体验的终极密码。</p>]]></content><author><name>Weiqing Liu</name><email>mailto:liuweiqing147@gmail.com</email></author><category term="tech" /><category term="Next.js" /><category term="React Server Components" /><category term="SSG" /><category term="SSR" /><category term="ISR" /><category term="Web Performance" /><summary type="html"><![CDATA[在上一篇文章中，我们探讨了 Next.js 的混合渲染哲学，了解了如何在同一个页面中穿插使用 Server Components 和 Client Components。]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://sixiangjia.de/assets/images/morandi.jpg" /><media:content medium="image" url="https://sixiangjia.de/assets/images/morandi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry xml:lang="zh"><title type="html">彻底搞懂 Next.js 渲染策略：从纯静态到动态的混合架构优化实践</title><link href="https://sixiangjia.de/tech/ssrcsrssg/" rel="alternate" type="text/html" title="彻底搞懂 Next.js 渲染策略：从纯静态到动态的混合架构优化实践" /><published>2026-05-08T00:00:00+08:00</published><updated>2026-05-08T00:00:00+08:00</updated><id>https://sixiangjia.de/tech/ssrcsrssg</id><content type="html" xml:base="https://sixiangjia.de/tech/ssrcsrssg/"><![CDATA[<p>在现代 Web 开发中，“首屏加载速度”和“SEO（搜索引擎优化）”往往是决定一个产品成败的关键。早期的单页应用（SPA）虽然带来了极佳的交互体验，但随之而来的白屏焦虑和 SEO 噩梦让开发者不得不重新思考架构。</p>

<p>Next.js 的出现，尤其是 App Router 架构的普及，彻底改变了游戏规则。它不再强迫我们在“纯静态”和“纯动态”之间二选一，而是提供了一套强大的 <strong>混合渲染（Hybrid Rendering）</strong> 方案。本文将带你理清 Next.js 的四种核心渲染模式，并探讨如何在实战中通过混合架构将页面速度优化到极致。</p>

<h2 id="一-快速厘清四大核心渲染模式">一、 快速厘清：四大核心渲染模式</h2>

<p>在动手优化之前，我们需要先对基础概念有一个清晰的物理认知：代码到底是在<strong>何时</strong>、<strong>何地</strong>运行的？</p>

<ol>
  <li><strong>CSR (客户端渲染 - Client-Side Rendering)</strong>
    <ul>
      <li><strong>运行地点：</strong> 用户的浏览器。</li>
      <li><strong>特征：</strong> 服务器只给一个 HTML 空壳和一堆 JS。浏览器下载完 JS 后自己“画”出整个页面。</li>
      <li><strong>优劣：</strong> 交互体验好，但首屏极慢，且搜索引擎爬虫抓取不到内容。</li>
    </ul>
  </li>
  <li><strong>SSG (静态站点生成 - Static Site Generation)</strong>
    <ul>
      <li><strong>运行地点：</strong> 编译打包时（Build Time）的服务器/CI流水线。</li>
      <li><strong>特征：</strong> 提前把数据拉好，渲染成定型的 HTML 静态文件。用户访问时直接分发。</li>
      <li><strong>优劣：</strong> 访问速度处于金字塔顶端（通常配合 CDN），极其节省服务器算力；但数据无法实时更新。</li>
    </ul>
  </li>
  <li><strong>SSR (服务端渲染 - Server-Side Rendering)</strong>
    <ul>
      <li><strong>运行地点：</strong> 用户请求时（Request Time）的服务器。</li>
      <li><strong>特征：</strong> 每次有用户访问，服务器就临时去查数据库、拼装 HTML 再发给浏览器。</li>
      <li><strong>优劣：</strong> 数据绝对实时，SEO 完美；但高并发时服务器压力大，且用户在 JS 下载水合（Hydration）完成前，页面“可见不可点”。</li>
    </ul>
  </li>
  <li><strong>ISR (增量静态再生 - Incremental Static Regeneration)</strong>
    <ul>
      <li><strong>特征：</strong> SSG 的变体。平时是静态 HTML，但在后台设定了一个过期时间（如 60 秒）。过期后有新访问，触发后台静默重新生成新的静态文件。完美平衡了速度与数据新鲜度。</li>
    </ul>
  </li>
</ol>

<hr />

<h2 id="二-核心破局app-router-下的混合渲染思路">二、 核心破局：App Router 下的混合渲染思路</h2>

<p>在早期的 Next.js（Pages Router）中，渲染模式通常是<strong>页面级别（Per-page）</strong>的——这个页面要么全是 SSG，要么全是 SSR。</p>

<p>但从 Next.js 13 的 App Router 开始，引入了 React Server Components (RSC)，渲染粒度精细到了<strong>组件级别</strong>。这意味着，<strong>在同一个页面中，你可以同时拥有静态的骨架和动态的交互器官</strong>。</p>

<h3 id="1-默认即静态-server-components">1. 默认即静态 (Server Components)</h3>
<p>在 App Router 中，如果你不写 <code class="language-plaintext highlighter-rouge">'use client'</code>，所有的组件默认都是跑在服务器上的，并且 Next.js 会尽可能地在编译时把它们打包成 <strong>纯静态 HTML (SSG)</strong>。</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// 默认的 Server Component (极速、静态、SEO友好)</span>
<span class="k">export</span> <span class="k">default</span> <span class="k">async</span> <span class="kd">function</span> <span class="nf">ArticlePage</span><span class="p">()</span> <span class="p">{</span>
  <span class="kd">const</span> <span class="nx">data</span> <span class="o">=</span> <span class="k">await</span> <span class="nf">fetch</span><span class="p">(</span><span class="dl">'</span><span class="s1">https://api.example.com/article</span><span class="dl">'</span><span class="p">);</span> <span class="c1">// 默认编译时抓取并缓存</span>
  <span class="kd">const</span> <span class="nx">article</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">data</span><span class="p">.</span><span class="nf">json</span><span class="p">();</span>
  
  <span class="k">return</span> <span class="o">&lt;</span><span class="nx">article</span><span class="o">&gt;</span><span class="p">{</span><span class="nx">article</span><span class="p">.</span><span class="nx">content</span><span class="p">}</span><span class="o">&lt;</span><span class="sr">/article&gt;</span><span class="err">;
</span><span class="p">}</span>
</code></pre></div></div>

<h3 id="2-动静隔离把状态往下推-client-components">2. 动静隔离：把状态往下推 (Client Components)</h3>
<p>当我们遇到需要监听 <code class="language-plaintext highlighter-rouge">onClick</code>、使用 <code class="language-plaintext highlighter-rouge">useState</code> 或 <code class="language-plaintext highlighter-rouge">useEffect</code> 的地方时，切忌在顶层组件直接加上 <code class="language-plaintext highlighter-rouge">'use client'</code>，这会导致整个页面退化为沉重的客户端渲染。</p>

<p><strong>正确的混合做法是“抽离叶子组件”：</strong> 把巨大的文章主体留在服务器组件里静态生成，只把需要交互的“点赞按钮”抽离成客户端组件。</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// components/LikeButton.js (客户端组件 - 动态器官)</span>
<span class="dl">'</span><span class="s1">use client</span><span class="dl">'</span>
<span class="k">import</span> <span class="p">{</span> <span class="nx">useState</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">react</span><span class="dl">'</span><span class="p">;</span>

<span class="k">export</span> <span class="k">default</span> <span class="kd">function</span> <span class="nf">LikeButton</span><span class="p">()</span> <span class="p">{</span>
  <span class="kd">const</span> <span class="p">[</span><span class="nx">likes</span><span class="p">,</span> <span class="nx">setLikes</span><span class="p">]</span> <span class="o">=</span> <span class="nf">useState</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
  <span class="k">return</span> <span class="o">&lt;</span><span class="nx">button</span> <span class="nx">onClick</span><span class="o">=</span><span class="p">{()</span> <span class="o">=&gt;</span> <span class="nf">setLikes</span><span class="p">(</span><span class="nx">likes</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)}</span><span class="o">&gt;</span><span class="nx">点赞</span> <span class="p">{</span><span class="nx">likes</span><span class="p">}</span><span class="o">&lt;</span><span class="sr">/button&gt;</span><span class="err">;
</span><span class="p">}</span>
</code></pre></div></div>

<p>然后将它缝合进静态页面中：</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// app/page.js (服务端组件 - 静态骨架)</span>
<span class="k">import</span> <span class="nx">LikeButton</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">./components/LikeButton</span><span class="dl">'</span><span class="p">;</span>

<span class="k">export</span> <span class="k">default</span> <span class="kd">function</span> <span class="nf">Page</span><span class="p">()</span> <span class="p">{</span>
  <span class="k">return </span><span class="p">(</span>
    <span class="o">&lt;</span><span class="nx">div</span><span class="o">&gt;</span>
      <span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="nx">这是一篇万字长文</span><span class="err">，</span><span class="nx">完全静态渲染</span><span class="p">...</span><span class="o">&lt;</span><span class="sr">/h1</span><span class="err">&gt;
</span>      <span class="p">{</span><span class="cm">/* 动态组件嵌入其中 */</span><span class="p">}</span>
      <span class="o">&lt;</span><span class="nx">LikeButton</span> <span class="o">/&gt;</span>
    <span class="o">&lt;</span><span class="sr">/div</span><span class="err">&gt;
</span>  <span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<hr />

<h2 id="三-实战极速优化的-4-个关键策略">三、 实战：极速优化的 4 个关键策略</h2>

<p>掌握了动静分离，我们在实际开发中可以通过以下策略进一步压榨性能：</p>

<h3 id="策略-1严格控制-use-client-的边界">策略 1：严格控制 <code class="language-plaintext highlighter-rouge">'use client'</code> 的边界</h3>
<p>永远把客户端组件推向 DOM 树的<strong>最末端</strong>。如果一个外层组件需要是客户端组件，尽量不要让它直接包含巨大的服务端组件，而是通过 <code class="language-plaintext highlighter-rouge">children</code> 属性传递，保持服务端代码的纯洁性。</p>

<h3 id="策略-2警惕意外的动态-ssr-退化">策略 2：警惕“意外”的动态 SSR 退化</h3>
<p>Next.js 极其智能但也极其敏感。如果在原本想做成纯静态的 Server Component 中使用了以下特性，Next.js 会被迫在打包时放弃静态化，转而在每次用户访问时动态渲染（SSR），导致速度下降：</p>
<ul>
  <li>读取了 <code class="language-plaintext highlighter-rouge">cookies()</code> 或 <code class="language-plaintext highlighter-rouge">headers()</code>。</li>
  <li>读取了动态路由的 <code class="language-plaintext highlighter-rouge">searchParams</code>（如 <code class="language-plaintext highlighter-rouge">?page=2</code>）。</li>
  <li>在 <code class="language-plaintext highlighter-rouge">fetch</code> 中配置了 <code class="language-plaintext highlighter-rouge">cache: 'no-store'</code>。
<strong>优化方案：</strong> 评估这些动态数据是否真的必须在服务端获取。如果可以，把它们移到下层的客户端组件中通过 JS 获取，让页面主体保持静态。</li>
</ul>

<h3 id="策略-3善用-isr-进行缓存控制">策略 3：善用 ISR 进行缓存控制</h3>
<p>对于文章列表、商品详情页，既不能忍受 SSR 的服务器压力，又不能接受 SSG 的数据陈旧。一定要为 <code class="language-plaintext highlighter-rouge">fetch</code> 加上 <code class="language-plaintext highlighter-rouge">next.revalidate</code> 选项：</p>
<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// 每 3600 秒在后台重新生成一次静态页面</span>
<span class="nf">fetch</span><span class="p">(</span><span class="dl">'</span><span class="s1">https://api...</span><span class="dl">'</span><span class="p">,</span> <span class="p">{</span> <span class="na">next</span><span class="p">:</span> <span class="p">{</span> <span class="na">revalidate</span><span class="p">:</span> <span class="mi">3600</span> <span class="p">}</span> <span class="p">})</span>
</code></pre></div></div>

<h3 id="策略-4使用-suspense-拥抱流式渲染-streaming">策略 4：使用 Suspense 拥抱流式渲染 (Streaming)</h3>
<p>如果页面中有一小块服务端数据读取极其缓慢（比如复杂的个性化推荐算法），不要让它阻塞整个页面的生成。用 <code class="language-plaintext highlighter-rouge">&lt;Suspense&gt;</code> 把它包裹起来。Next.js 会先瞬间把页面的外壳（Header、Footer）以静态 HTML 的形式发送给浏览器，然后再流式地把慢速数据推过去。</p>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">import</span> <span class="p">{</span> <span class="nx">Suspense</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">react</span><span class="dl">'</span><span class="p">;</span>
<span class="k">import</span> <span class="nx">SlowComponent</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">./SlowComponent</span><span class="dl">'</span><span class="p">;</span>

<span class="k">export</span> <span class="k">default</span> <span class="kd">function</span> <span class="nf">Page</span><span class="p">()</span> <span class="p">{</span>
  <span class="k">return </span><span class="p">(</span>
    <span class="o">&lt;</span><span class="nx">main</span><span class="o">&gt;</span>
      <span class="o">&lt;</span><span class="nx">h1</span><span class="o">&gt;</span><span class="nx">瞬间可见的标题</span><span class="o">&lt;</span><span class="sr">/h1</span><span class="err">&gt;
</span>      <span class="o">&lt;</span><span class="nx">Suspense</span> <span class="nx">fallback</span><span class="o">=</span><span class="p">{</span><span class="o">&lt;</span><span class="nx">p</span><span class="o">&gt;</span><span class="nx">正在计算推荐数据</span><span class="p">...</span><span class="o">&lt;</span><span class="sr">/p&gt;}</span><span class="err">&gt;
</span>        <span class="o">&lt;</span><span class="nx">SlowComponent</span> <span class="o">/&gt;</span>
      <span class="o">&lt;</span><span class="sr">/Suspense</span><span class="err">&gt;
</span>    <span class="o">&lt;</span><span class="sr">/main</span><span class="err">&gt;
</span>  <span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="结语">结语</h2>

<p>Next.js 的强悍之处，不在于它发明了哪一种新的渲染模式，而在于它提供了一个极其精密的“控制面板”。优秀的性能优化不再是盲目的压缩代码，而是像一位架构师一样，精确地审视页面上的每一个模块，回答这个问题：<strong>“这部分代码，到底应该在哪台机器上、哪个时间点运行？”</strong> 当你把 90% 的展示层交给极速的 SSG，把 10% 的交互层精准下放到 Client Components 时，你就掌握了现代前端性能优化的终极密码。</p>]]></content><author><name>Weiqing Liu</name><email>mailto:liuweiqing147@gmail.com</email></author><category term="tech" /><category term="Next.js" /><category term="React Server Components" /><category term="SSG" /><category term="SSR" /><category term="ISR" /><category term="Web Performance" /><summary type="html"><![CDATA[在现代 Web 开发中，“首屏加载速度”和“SEO（搜索引擎优化）”往往是决定一个产品成败的关键。早期的单页应用（SPA）虽然带来了极佳的交互体验，但随之而来的白屏焦虑和 SEO 噩梦让开发者不得不重新思考架构。]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://sixiangjia.de/assets/images/morandi.jpg" /><media:content medium="image" url="https://sixiangjia.de/assets/images/morandi.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>