轻量级博客项目对比报告

热门轻量博客 × MiniBlog × WordPress | 基础功能 · 技术路线 · 1000 篇文章压力测试

基准环境:Docker 容器(统一 --cpus=4 --memory=2g),1000 篇中文 Markdown 语料(~12MB),自研 Python 并发压测引擎

概览:六个关键结论

下列结论均来自本报告在统一基准环境下的实测数据。

⚡ 最快响应
Hugo 静态站 ~0.3ms / MiniBlog ~1ms,比 WordPress(55ms)/Ghost(49ms) 快 50–180 倍;Hugo 为纯静态,无服务端动态开销。
🚀 最高吞吐
Hugo ~3.7万 rps、MiniBlog/HTMLy ~0.3万 rps;WordPress ~59、Ghost ~21 受 DB/Node 制约。
💾 最少磁盘 IO
Hugo 每次点击仅 1 次读系统调用;MiniBlog 3 次;Ghost 高达 1.8 万次(读 SQLite)。
🔍 搜索能力分化
Hugo 为静态站、无服务端搜索(靠浏览器端 index.json);MiniBlog 按文件名(即标题)匹配、无正文检索;HTMLy/Bludit 对中文失效;WordPress/Typecho 真全文;Ghost 仅按标题。
🧩 MiniBlog 综合评比
响应速度/吞吐/IO 仅次于 Hugo。得益于选用 APCu 文件缓存路线:无需编译文章(改变输入格式也能接近纯静态站性能),文章管理与备份方便;短板是无正文检索(文件名即标题可命中)。
🏆 弱服务器适配
在 1G 内存 + 150ms 垃圾网络下,MiniBlog 完整浏览(首页+文章)约 609ms,接近 Hugo(868ms)、远低于 WordPress(1465ms)/Ghost(962ms);无需构建又易管理,适合弱 IO 服务器。

热门轻量级博客项目(GitHub 热度)

综合网上检索与 GitHub 星标(截至 2026-07)。本报告对其中 7 个覆盖不同架构的代表项目做了深度部署与压测,并以 MiniBlog(本项目,AI 生成)与 WordPress 为对照锚点。

项目技术栈存储Stars
Hugo ★参测Go / SSG89,252
Ghost ★参测Node.js / SQLiteSQLite54,608
AstroTypeScript / SSG61,407
JekyllRuby / SSG51,604
HexoNode.js / SSG41,764
HaloJava / 应用MySQL39,428
GravPHP / Flat-File15,599
Typecho ★参测PHP / 轻量MySQL12,412
WordPress ★参测·锚点PHP / 重型 CMSMySQL21,301
WriteFreelyGo / 轻量SQLite/MySQL5,208
VanBlogGo / 轻量SQLite3,565
Bludit ★参测PHP / Flat-File1,461
HTMLy ★参测PHP / Flat-File1,351
PicoPHP / Flat-File3,903
MiniBlog ★参测·锚点PHP / Flat-File(本项目)1
架构分类:SSG 静态生成Node + SQLitePHP + MySQLPHP 无数据库(Flat-File)重型 CMS

一、基础功能对比

部署方式与文章发布方式,是轻量博客“轻”的核心体现。

项目语言/运行时存储缓存策略部署方式文章发布方式关键特征
MiniBlog PHP 8.3 无(平面文件) APCu + cache.json 文件缓存 Docker 镜像(PHP-Apache)上传即运行 写 Markdown 到 content 目录,自动索引 AI 生成;搜索按文件名(即标题),无正文检索
HTMLy PHP 8.3 无(Flat-File) 文件缓存 PHP 上传即运行 后台编辑器 / 直接放 .md 全文搜索对中文(CJK)因分词失效
Bludit PHP 8.3 无(JSON 平面文件) JSON 文件缓存 PHP 上传即运行 后台 Web 编辑器写 Markdown 搜索全量扫描 ~9.3MB/次,中文查询 0 命中
Typecho PHP 8.3 MySQL(轻量) MySQL 查询缓存 PHP + MySQL(安装向导建库) 后台编辑器 MySQL 全文检索,中文正常
WordPress PHP 8.3 MySQL MySQL + 对象缓存(插件) LAMP / Docker Gutenberg 编辑器 / WP-CLI / REST API 重型 CMS,功能最全
Ghost Node.js SQLite SQLite + 内存 Docker(Node) Koenig 编辑器 / Admin API 搜索仅标题(Content API)
Hugo Go 无(构建期) 静态产物 + 客户端索引(index.json) 构建为静态文件 → nginx/任意静态托管 写 Markdown + hugo build(CLI/CI) 静态站点生成器(SSG);搜索在客户端

二、技术路线对比

语言、存储、缓存策略决定性能上限与资源占用;右侧为实测资源与规模指标。

项目GitHub Stars磁盘占用常驻内存核心代码量导入 1000 篇耗时
MiniBlog 1 12 MB 37 MB 3,790 直接写文件(瞬时)
HTMLy 1351 25 MB 38 MB 20,427 直接写文件(瞬时)
Bludit 1461 24 MB 54 MB 17,045 直接写文件(瞬时)
Typecho 12412 14 MB + DB 16.8 MB 30 MB 36,130 21.3 s(脚本导入)
WordPress 21301 101 MB + DB 17.7 MB 90 MB 596,449 76 s(WP-CLI 导入)
Ghost 54608 49.3 MB (SQLite) 187 MB 85.6 s(Admin API 导入)
Hugo 89252 64 MB (public/) 24 MB 4.6 s(hugo build)
内存为容器常驻 RSS(压测稳态);代码量取各自核心源码目录行数(WordPress 含全部核心)。

三、项目压力对比(1000 篇文章)

统一用 Python 并发引擎(10 并发 / 300 请求)压测,消除 ab 对分块编码的兼容偏差。指标:页面响应时间、吞吐(RPS)、每次点击磁盘文件读写。

3.1 页面响应时间

单请求首页响应时间(均值,对数刻度)MiniBlog1.07 msHTMLy1.16 msBludit8.51 msTypecho31.96 msWordPress55.23 msGhost49.27 msHugo0.34 ms
文章页响应时间(均值,对数刻度)MiniBlog1.42 msHTMLy1.41 msBludit6.11 msTypecho7.48 msWordPress45.36 msGhost25.66 msHugo0.30 ms
项目首页 均值首页 p95文章页 均值列表2 均值分类 均值搜索 均值
MiniBlog 1.071.36 1.421.00 1.311.19
HTMLy 1.161.54 1.411.03 1.034.49
Bludit 8.519.51 6.118.15 8.26309.02
Typecho 31.9637.96 7.4832.16 31.5049.56
WordPress 55.2360.23 45.3656.08 56.4577.85
Ghost 49.2753.24 25.6650.43 28.2814.87
Hugo 0.340.50 0.300.34 0.340.40
单位 ms。MiniBlog/HTMLy/Hugo 处于亚毫秒~1ms 级;WordPress/Ghost 受运行时+DB 制约达数十 ms。

3.2 并发吞吐(Requests/sec)

并发吞吐(10 并发,300 请求,对数刻度)MiniBlog2,428 rpsHTMLy3,091 rpsBludit446 rpsTypecho92.80 rpsWordPress59.30 rpsGhost21.30 rpsHugo3,727 rps
项目首页列表2分类文章页搜索
MiniBlog 2,427.72,785.7 2,943.33,105.4 3,399.4
HTMLy 3,091.03,039.9 2,793.82,424.3 741.9
Bludit 445.7466.1 456.3606.3 11.0
Typecho 92.894.0 93.7389.8 64.1
WordPress 59.359.5 59.669.9 43.1
Ghost 21.320.5 39.443.1 68.8
Hugo 3,727.03,549.7 3,349.43,642.8 3,370.9
单机 10 并发。Hugo(静态)与 MiniBlog/HTMLy(无库 PHP)领先;带 DB/Node 的 Ghost/WordPress/Typecho 受存储层制约。

3.3 每次点击的磁盘文件读写

通过容器内 /proc/<pid>/io 精确计量。Docker overlay 建在内存盘上,真实块设备读写(read_bytes)恒为 0,故以 读系统调用次数(syscr)读取字节数(rchar,含 page cache) 衡量“每次点击产生的文件读写量”。

每次点击·读系统调用数(首页,对数刻度)MiniBlog3.00 次HTMLy12.00 次Bludit309 次Typecho5.00 次WordPress186 次Ghost18,388 次Hugo1.00 次
每次点击·读取字节数 rchar(首页,对数刻度)MiniBlog108 BHTMLy27,423 BBludit647,361 BTypecho282 BWordPress207,251 BGhost75,137,556 BHugo22,106 B
项目首页 读调用首页 读字节文章页 读调用搜索 读调用搜索 读字节
MiniBlog 3108 63 127
HTMLy 1227,423 1221 237,977
Bludit 309647,361 2793,276 9,274,366
Typecho 5282 55 336
WordPress 186207,251 201189 209,351
Ghost 18,38875,137,556 9,2072,369 9,634,174
Hugo 122,106 11 93,719
“读字节”单位 B。Hugo 每次点击仅 1 次系统调用(直接读静态文件);MiniBlog 借 APCu/缓存仅 3 次;Ghost 每次读 ~1.8 万次系统调用(频繁读 SQLite);Bludit 搜索需全量扫描 ~3276 次调用。

3.4 弱服务器模拟:完整浏览耗时(1G 内存 + 垃圾网络)

真实服务器“发请求→拿到文件”基线:mrga0.com 首页 TTFB 52–211ms(均值约 117ms)。 在 1G 内存 + 150ms 垃圾网络延迟下,模仿用户浏览“首页→文章页”的完整耗时 = 网络 RTT + 服务器处理(+ 慢盘读取)。

项目首页完整耗时(ms)文章页完整耗时(ms)浏览(首页+文章)慢盘建模附加(ms, 按 2MB/s)
MiniBlog 3003096090.1
HTMLy 689429111814
Bludit 5794461025324
Typecho 84444712910.1
WordPress 8755901465104
Ghost 50046296237569
Hugo 43343586811
弱服务器下完整浏览耗时(首页+文章,线性刻度)MiniBlog609 msHTMLy1,118 msBludit1,025 msTypecho1,291 msWordPress1,465 msGhost962 msHugo868 ms
弱服务器=1G 内存 + 150ms 网络延迟(客户端出口 netem,实测单请求 RTT≈300–430ms)。 “慢盘建模附加”= 每请求读取字节数(rchar) ÷ 2MB/s 机械盘带宽,为纯建模值(沙箱 overlay/tmpfs 无法真实节流磁盘);它揭示:Ghost 每次首页读 ~75MB→约 37s、Bludit ~0.6MB→约 324ms,而 MiniBlog/Hugo/Typecho 几乎不受影响。

方法学与局限性

  • 环境:所有系统以 Docker 容器运行,统一资源配额 --cpus=4 --memory=2g;PHP 系共用同一 bench-php:8.3 镜像(PHP 8.3 + Apache + opcache + APCu + MySQL 8.0)。
  • 语料:生成 1000 篇中文 Markdown 技术文章(5 大分类,约 12MB),分别导入各系统;Hugo 经 hugo build 产出静态站。
  • 压测:自研 Python 并发引擎(urllib,Connection:close,10 并发 × 300 请求),取代存在分块编码兼容问题的 ab,保证各系统测量口径一致。单请求延迟取预热后 60 次采样中位数附近统计。
  • IO 计量:读取容器 /proc/<pid>/io 的 rchar/wchar/syscr/syscw;因 overlay 在内存盘,read_bytes 恒 0,故以 syscr/rchar 表征“每次点击的磁盘文件读写”。
  • 搜索探针:以正文专属词与标题词分别检索,按返回结果中命中的文章 slug 数判断检索覆盖范围。
  • 局限:绝对 RPS 受单连接 TCP 开销影响存在运行间方差(同次运行内对比稳健);Bludit 搜索在本部署中对中英文均返回 0(疑似索引/分词问题),但其扫描代价已被 IO 实测捕捉;Ghost 搜索受 Content API 限制仅标题过滤。