统计、表情、优化
四月底脑子一热,决定给博客做个统计页面。最开始只想画个按小时分布的热力图,后来需求越加越多:按天柱状图、月度趋势、爬虫来源、访客忠诚度……
ASCII 世界地图。用了 DB-IP 的免费城市级 IP数据库(800 万行),通过一次文件扫描批量解析访客 IP的经纬度,然后用密度字符叠加到 map.txt 上。中国大陆、北美、欧洲的访客分别聚集在地图的不同位置,密度高的地方能看到 # 和 @ 级别的字符。
#
@
统计页还有一个 UA 考古面板,专门统计日志里的旧浏览器。
加了 psutil 读取 CPU、内存、磁盘、运行时长,没装 psutil 也有 ctypes 回退方案。每次打开统计页都能看到服务器当前状态,不用再 SSH 上去敲 top 了。
留言板加了 20 个像素风表情。点击输入框下方» 表情折叠面板, 展开选择,也支持手动输入 [em01] 到 [em20]。存储时以代码保存,网页和邮件中都会自动转成图片显示。
» 表情
[em01]
[em20]
表情面板默认不加载图片(JS 延迟生成),省了 20 个初始 HTTP 请求。
留言板表单从分散的 label+input 改成了 HTML table 表格布局,Name/Email/内容/显示IP/发送按钮全部在一个 125px 宽的格子里。表情面板通过折叠节省空间,1px CSS 边框替换了原来的 2px 默认边框。
之前 @回复 发邮件是同步的,用户提交留言后要等邮件发完才能看到页面跳转。现在改成了独立进程后台发送(mailer.py),通过 stdin 传递内容,subprocess.Popen 启动后立即返回。
邮件正文里的 [em07] 现在会转成 <img> 标签指向服务器上的 GIF,收到邮件的人也能看到表情动画了。
[em07]
<img>
之前各模块的日志散落在不同位置,现在全部归到 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"
<!DOCTYPE html>
» 当前站点架构更新分析... » 2026年5月 · ... » 哈基米观察日记 » 站点框架的缺陷分析与... » 脚本详解:build.ps1 » 文章归档
日常 更新日志 网站建设