















底层的初始化、数据迁移以及多级缓存搞定后,博客的基础设施基本稳了。接下来,我把精力转回到了读者与作者端的前台体验——如何让随笔记录更轻快,以及如何让前台主题在拥有丰富交互的同时,保持极高的边缘缓存命中率。
写正经长文往往需要构思提纲、组织段落、排版配图,写一篇得花上几个小时甚至几天。这种较重的心理负担,很容易让人一拖再拖。
在日常生活中,我经常会有一些零碎的想法、随手拍的照片、一段代码片段,或者只是几句随感。这些内容发长文显得单薄,发在第三方社交平台又容易淹没在算法信息流里。
我希望博客里有一块轻量记录的自留地:
#话题 进行归类;基于这些需求,我开始动手开发 typecho-plugin-notes 插件。
在规划数据存储时,我坚持了一个原则:不修改 Typecho 的原生数据库 Schema。
这样能保证系统升级、备份和迁移时始终兼容原生 Typecho 生态,不会因为自定义数据表造成工具链断层。我和 AI 梳理后,复用了 Typecho 原生表结构:
typecho_contents):存放正文内容,标记 type = 'note',slug = 'note-{cid}',状态沿用原生字段;typecho_metas + typecho_relationships):自动提取正文中的话题存入元数据表,标记 type = 'note_topic';typecho_fields):使用 note_attachments 存放媒体附件的 JSON 数组,使用 note_likes 记录点赞数。在编辑笔记时,输入 #设计灵感 或带表情的 #☕️下午茶,保存时后端会自动通过正则扫描提取话题并存入元数据表,前台渲染时包装为高亮标签,点击即可按话题筛选相关动态。
上传的附件在读取时会按 MIME 类型自动分流:
+N 遮罩;<video> 和 <audio> 播放器,并支持后台实时预览;为了避免引入体积庞大的第三方 Lightbox 库,我集成了自己早前开源的轻量图片灯箱库 ViewImage.js(仅 2KB),支持手势缩放、键盘切换与毛玻璃背景过渡。

为了让发布随笔足够随手,我基于系统的 admin:page 钩子做了一个独立的单页管理后台(/admin/plugin/notes):
pageSize + 1 前看分页算法,省去了每次翻页都要执行的 SELECT COUNT(*) 全表扫描。有了微动态与长文后,新的挑战摆在了眼前:前台主题如何渲染?
在把博客搬上 Cloudflare 边缘节点后,很多人都会遇到一个困惑:为什么明明配好了 CDN 缓存规则,前台的缓存命中率依然不高?
深入排查传统的动态主题渲染机制,会发现几个天然冲突点:
为了解决这些问题,我对默认主题 Warm(typecho-theme-warm) 进行了彻底重构。
解决缓存污染最直接的办法就是:将评论区从 SSR 页面中彻底剥离,改为客户端异步 API 加载。
访客浏览器 → Cloudflare 平台 CDN (0ms CPU / 0 D1) → 瞬间呈现纯净的文章正文与评论区骨架容器;访客浏览器 → GET /api/comments?cid=... → 返回评论 JSON 渲染讨论区,并从前端 LocalStorage 自动回填昵称与邮箱。在 Post.astro 与 Page.astro 服务端渲染阶段,系统检测到当前主题支持异步评论组件时,会直接跳过所有评论相关的数据库查询:
<!-- Post.astro 渲染的评论区域仅输出一个纯净的挂载容器 -->
<section
class="warm-comments"
id="comments"
data-comments-root
data-cid={post.cid}
data-comment-component-load="dwell"
data-comment-initial-load="auto-first"
></section>
无论访客带着什么 Cookie,服务端输出的 HTML 都是完全一致的纯静态内容,可以安全地被 Cloudflare CDN 平台层和 L1~L3 深度缓存。
评论数据不需要在页面打开的第一时间就发起请求。Warm 主题支持三种加载策略:
dwell(悬停/触底按需加载,默认推荐):使用 IntersectionObserver 监听评论容器。只有当读者把文章阅读到接近底部,或者鼠标悬停在评论区域时,才会真正触发 API 请求;auto-first(自动加载首屏):页面就绪后在后台静默获取第一页;manual(手动点击):显示“加载评论”按钮,用户点击后再拉取。对于只读短文或快速划过的读者,完全零消耗评论 API 与 D1 读配额。
评论表单中“记住我的称呼和邮箱”功能完全移交至前端处理:
localStorage 中;auto-2 渐进式分页:在博客首页和笔记流中,第 1~2 页滚动触底时自动无感加载下一页,第 3 页起转为“点击加载更多”按钮,防止读者因快速翻页迷失位置;经过笔记插件与 Warm 主题的这轮重构:
前台的展示与缓存问题解决之后,每天管理员频繁登录的管理后台,又该如何加速并降低 D1 消耗呢?
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。