跳到内容
playerz.fun
返回

v2.0 更新日志:全面优化升级

2026 年 5 月 27 日 · 约 3 分钟阅读

写在前面

v1.0.1 上线一个月以来,博客运行基本稳定,但也积累了不少问题:主题切换形同虚设、API 没有任何安全防护、首页语言不统一……这次 v2.0 把能改的都改了。

后端升级

sql.js → better-sqlite3

v1 用的 sql.js 是纯内存数据库,每次写入都要全量序列化到磁盘,高并发时可能数据丢失或文件损坏。

v2 换成了 better-sqlite3,原生 C++ SQLite 绑定:

const db = new Database(DB_PATH);
db.pragma("journal_mode = WAL");
db.pragma("busy_timeout = 5000");

IP 频率限制

以前任何人都可以无限刷评论和点赞。现在加了内存级频率限制:

超限返回 429 Too Many Requests,配合定期清理过期记录,内存占用可控。

CORS 白名单 + SQL 注入防护

API 的 Access-Control-Allow-Origin* 改为白名单,只允许 playerz.fun 和 localhost。

数据库表名和列名改为白名单映射,杜绝模板字符串拼接带来的注入风险。

管理员评论系统

新增两个管理员接口(需密钥):

评论表新增 is_admin 字段,自动兼容旧数据。

前端修复

亮色/暗色主题

v1 的 light 和 dark 主题颜色完全一样(都是深色背景),主题切换按钮做了但没有任何效果。

v2 给亮色模式配了真正的浅色方案:

html[data-theme="light"] {
  --background: #f8f9fa;
  --foreground: #1a1a2e;
  --accent: #4f46e5;
  --muted: #e9ecef;
  --border: #dee2e6;
}

theme-color meta 也按 prefers-color-scheme 分别设置了两个颜色。

首页中文化

首页 hero 区域从英文改为中文,和全站保持一致:

编码、系统与设计的思考。 记录技术实践中的点滴。

结构化数据修复

首页 JSON-LD 的 @type 从固定的 BlogPosting 改为动态判断:有 pubDatetime 的页面用 BlogPosting,首页等无日期页面用 WebSite。不会再出现 datePublished: "undefined"

评论组件主题化

评论区的硬编码颜色(bg-[#1a1c2a]border-[#2a2a3a])全部替换为主题变量(bg-mutedborder-border),亮色/暗色模式下都能正确显示。

新功能

阅读时间估算

文章详情页现在显示「约 X 分钟阅读」,支持中英文混合计算:

const chineseChars = (cleanText.match(/[\u4e00-\u9fff]/g) || []).length;
const englishWords = englishText.split(/\s+/).filter(Boolean).length;
const minutes = chineseChars / 400 + englishWords / 220;

博主评论标识

通过管理员接口发的评论会带一个「博主」徽章,和普通用户评论区分开。

其他优化

项目改动
OG 图模板白底→深色风格,和网站一致
robots.txt屏蔽 /api//search、GPTBot
favicon.ico新增,不再 404
静态资源缓存/_astro/* 设为 immutable, max-age=1年
GitHub 链接指向正确的仓库地址
Pagefind 构建去掉冗余的 cp 回 public 步骤
about.md部署描述修正为 Cloudflare Tunnel

技术债务

还有一些已知待办:

留到下个版本处理。


这次改动涉及后端重写和前端多处调整,如果你发现了什么问题,欢迎在评论区告诉我。


评论

加载中...


上一篇
博客功能测试:从发布到上线的完整流程
下一篇
New-API 搭建:自建统一 LLM 网关