如果你只看定义,很容易得到一个模糊结论:
但真正有价值的问题是: 同一个需求,用 Markdown 和 MDX 分别怎么写,代价分别是什么?
这篇文章不再只讲概念,直接用 4 组例子对比。
## 什么是缓存击穿
缓存击穿是指热点 key 在失效瞬间,大量请求直接打到数据库。
### 常见缓解方式
1. 热点 key 永不过期 + 主动刷新
2. 互斥锁
3. 多级缓存## 什么是缓存击穿
缓存击穿是指热点 key 在失效瞬间,大量请求直接打到数据库。
### 常见缓解方式
1. 热点 key 永不过期 + 主动刷新
2. 互斥锁
3. 多级缓存这个场景下两者几乎没有差别。
如果你没有交互、组件、动态数据需求,就用 Markdown,最稳定。
## 方案分析
### 优点
- 开发效率高
- 社区成熟
### 缺点
- 包体积增长快
- 架构边界容易失控<SwotAnalysis
title="使用 MDX 写技术内容"
itemsJson='[{"label":"Strengths","children":[{"label":"复用组件","desc":"图表、卡片、流程块一次开发,多篇复用"},{"label":"表达力强","desc":"一篇文章可同时包含文档与交互"}]},{"label":"Weaknesses","children":[{"label":"复杂度上升","desc":"构建链路与运行时依赖更重"},{"label":"编辑门槛提高","desc":"作者需要理解 JSX 基础"}]}]'
/>Markdown 只能表达“内容本身”;
MDX 可以把“展示组件”也纳入内容系统,跨文章统一视觉和结构。
## 发布流程
1. 写完正文
2. 本地预览
3. 运行 lint 与 build
4. 发布上线```infographic
infographic sequence-steps-simple
data
title 博客发布流程
items
- label Step 1
desc 写完正文
- label Step 2
desc 本地预览
- label Step 3
desc 运行 lint 与 build
- label Step 4
desc 发布上线
### MDX 实际渲染效果
```infographic
infographic sequence-steps-simple
data
title 博客发布流程
items
- label Step 1
desc 写完正文
- label Step 2
desc 本地预览
- label Step 3
desc 运行 lint 与 build
- label Step 4
desc 发布上线Markdown 的流程是“静态文本列表”;
MDX 可以把流程转成结构化展示组件,信息密度更高。
## 发布前检查清单
- [x] Front matter 完整
- [x] 标题层级正确
- [ ] 外链可访问
- [ ] 图片已压缩## 发布前检查清单
<ul>
{[
{ name: 'Front matter 完整', done: true },
{ name: '标题层级正确', done: true },
{ name: '外链可访问', done: false },
{ name: '图片已压缩', done: false },
].map((item) => (
<li key={item.name}>
[{item.done ? 'x' : ' '}] {item.name}
</li>
))}
</ul>Markdown 需要手写每一行;
MDX 可以基于数据生成内容,尤其适合教程步骤、参数矩阵、版本变更列表。
| 场景 | 建议 |
|---|---|
| 个人博客、日常技术记录、README | Markdown 优先 |
| 文档站需要统一卡片/告警/流程组件 | MDX 更合适 |
| 交互式教程、可视化内容、动态渲染 | MDX 必选 |
| 多人协作且作者不懂 JSX | Markdown 更稳妥 |
不要为了“看起来高级”强行上 MDX。
只有当组件复用和动态表达真的带来收益时,MDX 才值得。