从一张页面开始
个人网站不一定需要把所有事情放进同一个运行环境。文章、项目介绍和工具说明大部分时间不会变化,可以在发布时生成 HTML。访客打开页面,直接获得正文,不必先等待一个应用框架启动。这是本站采用静态页面的理由:让阅读先发生,让计算在需要时出现。
静态不意味着只有展示。工具可以在浏览器计算,运行数据可以由独立的采样任务产生,页面只负责读取允许展示的结果。关键在于分清三个时刻:写作时、采样时和访问时。
页面和数据有不同的节奏
文章在编辑后发布;数据按固定间隔更新;浏览器按自己的节奏重新读取。三个频率没有必要强行一致。把它们拆开,网站就不必为了显示一个新数值而重建全部页面,也不用为了发布一篇笔记而重启数据采集。
文章 → 构建 → 静态 HTML → 阅读
采样 → 校验 → 最近有效结果 → 只读展示
工具输入 → 浏览器计算 → 本地结果这个结构把复杂度放在产生数据的地方。页面不拥有管理权限,也不需要知道数据源的凭据。网站只展示结果,失败时告诉读者哪些信息已经不新鲜。
别把“打开了”当成“正确了”
返回成功状态,只说明页面可以读取。它不能证明数据是最新的,更不能证明一个后台任务真的完成了。因此展示中至少需要成功采样时间、单位、数据来源和失败状态。网页当前时间与采样时间也要分开;每次打开页面更新一个“刚刚”,只会制造新鲜的错觉。
在本站的 采样时间笔记 中,这个区别有更具体的例子。把来源和有效期说清楚,通常比再加一张漂亮卡片更有用。
让阅读内容拥有自己的生命周期
一篇文章从草稿开始,发布后可以继续修订。标题、摘要、标签、发布日期和更新日期由源内容维护;目录和搜索索引在构建时生成。没有必要引入一个始终运行的后台编辑系统。
{
"title": "一篇技术笔记",
"draft": false,
"tags": ["静态网站"],
"last_updated": "2026-10-08"
}这里的 JSON 是内容模型示例,不是私人运行数据。草稿应从页面、搜索、订阅与站点地图同时排除。只隐藏列表入口却留下文章地址,不能算草稿隔离。
简单结构也需要边界
公开文章和私人控制台应该分开。搜索索引只包含公开内容;公共离线缓存也只认识明确允许的静态资源。功能越多,越要避免把“一切缓存起来”作为默认策略。
这种结构不是适用于所有网站的唯一选择。需要实时协作、复杂权限或大量交互的产品有不同需求。对于这片数字空间,先让阅读舒服、工具可靠、数据有出处,是一个可持续的起点。相关的 本地工具笔记 记录了输入留在浏览器的具体取舍。