关于本站
255 分享站是建站的个人博客,专注于技术笔记、效率工具与资源分享。零 JavaScript 依赖,打开即读。
这是什么
255 分享站是我用来存放技术笔记、工具推荐与资源整理的地方。
写作的原则很简单:一篇只讲清一件事,尽量给出可以直接执行的命令、能够复制的代码。
为什么做成非交互式网站
这个站没有登录、没有评论框、没有点赞按钮,前台也没有注入任何一行 JavaScript。
样式全部内联在 HTML 里,深色模式交给 CSS 的 prefers-color-scheme 跟随系统。
所以打开就能读,不存在「等脚本执行完才显示内容」的白屏。
- 快 —— 首个字节就是完整内容,首屏只有一个请求
- 简单 —— 没有前端框架、没有运行时脚本、没有数据库查询,也没有「构建」这一步
- 稳 —— 一个 Go 程序,不依赖 npm 包,不依赖 PHP 扩展
- 好读 —— 正文宽度、字号、行高都按长文阅读调过,不是模板默认值
- 对搜索引擎友好 —— 内容以最终形态存在,爬虫不需要执行脚本
它是怎么跑起来的
和「提前把页面生成成 HTML 文件」的静态站不同,这里用的是伪静态: URL 保持静态形态,内容由 Go 在每次访问时实时渲染。
| 静态站 | 本站 | |
|---|---|---|
| URL 形态 | /posts/xxx/ |
/posts/xxx/(一样) |
| HTML 谁生成 | 构建时一次性生成 | Go 每次访问时实时渲染 |
| 改一篇文章 | 跑构建 → 同步文件 → 刷新 | 保存 → 刷新 |
| 部署物 | 一堆 HTML 文件 | 一个二进制文件 |
| 「构建失败」 | 有可能发生 | 不存在这一步 |
对访问者和爬虫来说两者没有区别,差别只在服务器端。 换来的是写作体验:改完就是最新的,不会出现「忘了重新构建」这回事。
技术上是怎么实现的
一个 Go 程序同时做前台和后台。 前台负责渲染页面,后台在 /admin/,
用来写文章、传图片、改站点设置 —— 两者共用同一个进程、同一份配置。
文章就是 Markdown 文件,放在 content/posts/ 下,元信息写在 frontmatter 里。
没有数据库,要备份就是把 content/ 和 images/ 两个目录拷走。
模板、样式和初始文章都编译进了二进制(Go 的 embed 机制)。
所以部署时只需要上传一个文件,不用 npm install,也不用担心少传了某个目录。
渲染结果有内存缓存,只有首次访问某篇文章才会真正解析一次 Markdown, 之后的请求只是拼接字符串。
程序只监听 127.0.0.1,外部流量由 nginx 反代进来 ——
端口不需要对公网开放,nginx 那边一条反代规则就完成了「伪静态」的效果。
备份与迁移
因为排除了数据库,整站的数据就是几个目录和文件:
content/posts/ 文章
images/ 图片
config.yaml 配置
data/state.json 后台密码
把这四样拷到另一台机器,放上同一个二进制,站点就整个搬过去了。
联系
有问题或者想交流,可以发邮件到 longjie@dhljhl.cn。