2026年5月 · 最近在干些什么
统计、表情、SEO、评论、MD
统计页 & 访客计数器
ASCII 热力图 & 世界地图 四月底脑子一热,决定给博客做个统计页面。最开始只想画个按小时分布的热力图,后来需求越加越多:按天柱状图、月度趋势、爬虫来源、访客忠诚度…… ASCII 世界地图。用了 DB-IP 的免费城市级 IP数据库(800 万行),通过一次文件扫描批量解析访客 IP的经纬度,然后用密度字符叠加到 map.txt 上。
访客计数器 GIF 用 Pillow 生成了一个 88×31 像素的 LED 七段数码管动画计数器。12 帧循环、扫描线滚动、辉光效果、呼吸灯。每次首页访问自动更新计数并重新生成图片。逻辑独立在 scripts/counter.py。
服务器资源监控 加了 psutil 读取 CPU、内存、磁盘、运行时长,没装 psutil 也有 ctypes 回退方案。
SEO 全面优化
HTML 4.01 Transitional DOCTYPE,<html lang="zh/en">
每页独立 <title>、自动生成 <meta description>(正文首段提取)、<meta keywords>(标签提取)
<link rel="canonical"> + <link rel="alternate" hreflang="..."> 中英互链
Open Graph + Twitter Card 完整标签
全站 <font size="6"> 自动包裹 <h1>、<font size="5"> 包裹 <h2>
面包屑导航(首页 > 博客 > 文章标题)
Sitemap 重写:14 → 47+ URL,含 changefreq / priority
security.txt + /.well-known/security.txt(RFC 9116)
IE 5.5 兼容性审查
五月初用 AI 做了全站兼容性审查,扫出 30+ 处不兼容项:rgba()、display:flex、box-sizing、overflow-x/y、placeholder、querySelector 等。形成审计文档和博文。核心 JS(留言板、编辑器)已做好 IE 5.5 双路径回退。
留言板改进
楼号系统:每条留言有绝对楼号 #N,灰色显示在右侧
回复引用:点击回复按钮插入 @xxx[#N],构建时自动剥离引用号
屏蔽词:data/runtime/banned_words.json 定义,自动替换为 <em>*</em>
changelog 转义:构建时 HTML 转义,防止 <font> 标签污染页面
文章评论系统
给每篇博文加了评论区,A+B 混合模式:CGI 处理提交 + 构建时注入已有评论。支持楼中楼(无限嵌套)、表情、IP 开关。提交后 302 跳回评论区锚点,后台异步构建。页面底部的 page-* 独立页面也有评论区。
邮件系统优化
后台异步发送:之前 @回复 发邮件是同步的,用户提交留言后要等邮件发完才能看到页面跳转。现在改成了独立进程后台发送(mailer.py)。
表情在邮件中渲染:[em07] 转成 <img> 标签指向服务器上的 GIF。
邮件 HTML 模板提取:邮件模板独立为 src/components/cgi/mailer-email.html,用 {变量} 占位符。
Markdown 博文支持
全站 50+ 篇博文和独立页面全部从 HTML 转为 Markdown。创建了 scripts/md2html.py 转换器——支持标题/粗体/斜体/代码/表格/脚注/引用/图片。构建时自动检测 .md 后缀并转换。旧的 HTML 源文件归档到 src/archive-html/。MD 和 HTML 可以混用。
Web 服务器优化
HTTP/1.1 + keep-alive(单连接复用)
ThreadingMixIn 多线程(请求并行,不再排队)
静态资源强缓存:Cache-Control: max-age=86400 + Expires: 2030
启动参数 nolog nocount
路由表重构,/.well-known/ 支持
项目结构整理
data/ 分层:runtime/(手工维护)build/(自动生成)comments/ logs/
assets/images/backgrounds → assets/images/bg
所有脚本迁移到 scripts/,.cmd 入口统一
changelog.txt → data/logs/changelog.log
外部资源本地化(mirror-external.py),去掉 preconnect 外链
counter.py、banned_words.py 等新脚本独立拆分
其他
统计页排除指定 IP(180.154.121.226)
404.html 统一为 HTML 4.01 标准
编辑器路径修正(pages/blog → blog)
全站图片 max-width:100%;height:auto; 防溢出
博文数量上升至 50+ 篇,sitemap 同步覆盖
RSS 改为从编译好的 dist 页面提取标题+副标题
留言板表情系统
像素风 GIF 表情 留言板加了 20 个像素风表情。点击输入框下方» 表情折叠面板, 展开选择,也支持手动输入 [em01] 到 [em20]。存储时以代码保存,网页和邮件中都会自动转成图片显示。 表情面板默认不加载图片(JS 延迟生成),省了 20 个初始 HTTP 请求。
表单紧凑化 留言板表单从分散的 label+input 改成了 HTML table 表格布局,Name/Email/内容/显示IP/发送按钮全部在一个 125px 宽的格子里。表情面板通过折叠节省空间,1px CSS 边框替换了原来的 2px 默认边框。
邮件系统优化
后台异步发送 之前 @回复 发邮件是同步的,用户提交留言后要等邮件发完才能看到页面跳转。现在改成了独立进程后台发送(mailer.py),通过 stdin 传递内容,subprocess.Popen 启动后立即返回。
表情在邮件中渲染 邮件正文里的 [em07] 现在会转成 <img> 标签指向服务器上的 GIF,收到邮件的人也能看到表情动画了。
日志系统重构
统一归类管理 之前各模块的日志散落在不同位置,现在全部归到 data/logs/ 下:
data/logs/
├── access/ ← 服务器访问日志(每日 .log,旧日志 .gz 压缩)
├── guestbook.log ← 留言板操作(@提及、SMTP 状态)
├── editor.log ← 编辑器操作(新建/编辑/删除、认证失败)
├── search.log ← 搜索关键词 + 结果数
├── toolbox.log ← 工具箱使用记录
├── build.log ← 构建记录(页面构建、全站重建)
└── error.log ← 跨模块错误
创建了统一的 logger.py 模块,所有 CGI 脚本通过它写入对应分类日志。
性能优化
外部徽章图片加了 loading="lazy",不阻塞首屏渲染
表情面板的 20 张 GIF 也改成了 loading="lazy",首屏请求减少 20 个
header 加了外部域名 preconnect 预连接提示
侧边栏评论区锁定 700px 宽度,防止长内容撑破布局
其他小改进
web 服务器改为白名单路由,敏感目录(data/、scripts/、src/)统一 403
全站添加 <!DOCTYPE html> 声明,告别 Quirks Mode
editor.py 增加操作审计(谁在什么时候改了什么文章)
构建脚本增量缓存改用 MD5 内容哈希,组件变化能正确触发全站重建
博客编辑器、搜索引擎、工具箱全部接入了统一日志
更新了 README 文档,补充了所有新增功能的说明
—— 写于 2026 年 5 月 2 日,劳动节快乐!
|