我的小程序“豆子碎片”,迎来了它的第三次重构。
这一次,它是在服务器到期、上一个雄心勃勃的版本彻底停摆后,从废墟里重新生长出来的。它的第二段生命,曾寄托着一个完整的平台梦。我开发了创作者后台、公开的 API、实时的 MQTT 通知,并设计了一套用“豆子点数”兑换人民币的激励循环。然而现实很骨感:小程序广告收益微薄且不透明,难以维系激励体系;无论用户还是创作者都动力不足;个人开发者的权限也处处受限。这个复杂的平台循环,运行不久就悄然停转了。
几个月后,服务器到期,我没有续费。那个承载着 API 和数据库的“平台”,在物理层面画上了句号。
但我舍不得让它就这样消失。这个从我个人技术笔记成长起来的小程序,投入了太多心血,像我的一个数字作品。我必须在新的约束下——近乎零成本、零维护——为它找到一条新的活路。
我的第一个决定,是做最彻底的产品减法。我砍掉了所有平台化的幻想,没有创作者上传、没有审核、没有激励系统。它回归了最初的模样:一个只属于我个人的、记录技术知识碎片的数字笔记本。原因很现实:一是已无精力维护复杂后台,二是小程序政策对个人开发者的内容上传限制越来越严。它不再是“平台”,重新变回一个单纯的“工具”。
产品形态回归简单,但最核心的技术问题随之而来:内容存哪?怎么更新?以前,文章存在数据库,有个后台来维护。现在服务器都没了,这条路断了。
一次偶然的灵感,让我找到了破局点:Git 仓库(比如 Gitee),不就是个现成的、免费的、极其稳定的文件服务器吗?
我立刻动手改造。整个技术栈被彻底重构,走向了完全的静态化与无服务化。
创作回归本质:我不再需要后台。打开任何编辑器,用 Markdown 格式写好文章,这本身就是最舒适的写作。这种纯文本的创作方式,也让内容的版本管理和追溯变得无比清晰。
存储拥抱版本控制:文章就是普通的 .md 文件。我像提交代码一样,将它们 push 到 Git 仓库的指定目录。这个仓库,成了我免费、永不过期、还带完整版本历史的“云端数据库”和“后台”。为了能够被访问,代码也随之开源。
小程序变身静态渲染器:我删光了所有调用自家后端的代码。新的数据流变得异常清晰:
a. 先拉目录:我在仓库里放了一个 index.json 文件,它就是全站的文章索引,里面用结构化的数据记录了所有文章的标题、摘要、时间和对应的文件路径。小程序启动后,第一件事就是用 downloadFile 下载这个索引。
b. 再找内容:所有文章列表的展示、以及前端搜索,都变成了在本地对这个 index.json 文件进行查询和过滤。
c. 最后渲染:用户点击某篇文章,小程序就根据路径,去下载那个具体的 .md 文件,然后用我早已写好的 Markdown 解析器,将文本渲染成漂亮的页面。
于是,“豆子碎片”的第三个版本,演化成了一个完全由 Git 驱动的静态小程序。数据在云端(Git 仓库),逻辑在本地(小程序)。虽然我为此砍掉了所有动态、交互、平台化的功能,但最核心的东西从未改变:它依然是一个能优雅、可靠地展示我技术文章的地方。
看似是战略撤退,实则是架构新生。它失去了平台的复杂性,却换来了前所未有的健壮性。只要我的 Git 仓库还在,只要小程序的基础框架还能运行,它就能一直活着,安静地待在那里,承载我的思考。这次重构也让我对利用 Git 等现有服务构建轻量级应用有了更深的理解,相关的技术实践与思考,我在 云栈社区 的前沿板块也有过分享。
这第三次生命,不再关于扩张的野心,而是关于专注的可持续。它不再试图成为一个生态,而是安心做好一个纯粹的工具——一个完全属于我个人,零成本运行,并且会一直伴随我成长的技术笔记。这次重构,让我更深刻地理解了“少即是多”的力量,以及如何在技术的约束下,找到最本真、最持久的价值。
将个人项目的技术文档和思考过程记录下来并分享,本身也是一种收获。如果你也对这种极简、可持续的技术实践感兴趣,欢迎来 云栈社区 交流探讨。
附:项目详情
关于本次无服务器化改造更详细的技术实现与思考,可参阅我的博客:https://91demo.top/projects/visit/v3/