ZBlogCMS 后台访问慢该怎么优化
照着这篇文章走一遍,你能定位出 ZBlog 后台慢的真正原因,并把打开后台首页的时间从十几秒压到一两秒以内。
第一步:先确认慢在哪一层,别急着改配置
这一步的目标是搞清楚「慢」发生在服务端还是浏览器端,避免瞎优化。
- 用 Chrome 打开
你的域名/zb_system/admin/index.php?act=admin,按 F12 → 切到 Network(网络)面板 → 勾选 Disable cache → 刷新页面。 - 点最上面那条
index.php请求,看右侧 Timing(计时)里的 Waiting for server response(TTFB)。
- TTFB 超过 1 秒:是 PHP 或数据库的问题,看第二步以后。
- TTFB 很快但页面整体加载慢:是前端资源(图片、外部 JS)的问题,检查是否引用了墙外的字体、统计脚本。
注意:一定要在无痕窗口测一次。装了浏览器的广告拦截插件,后台部分 AJAX 请求会被拦掉,导致页面一直转圈。
第二步:停用多余插件,用二分法排查
这一步的目标是找出拖慢后台的插件,结果通常最明显。
进后台左侧菜单「应用中心」→「插件管理」,把插件按「停用」按钮逐个关掉,每关一个就刷新一次后台首页,看秒数有没有掉下来。
重点怀疑这几类:
- 访问统计、IP 归属地类插件(每次打开后台都查一次库)
- 带「自动更新」「自动推送」字样的插件(后台每次加载都发外部请求)
- 长期没更新的老插件(ZBlog 1.7 及以上版本兼容性差)
注意:不要一次性全禁用,否则无法判断是哪个插件的锅;也不要在禁用后直接点「卸载」,先停用观察,确认没问题再卸载。
第三步:堵住后台对外网的等待请求
ZBlog 后台首页会向官方应用中心请求更新信息,服务器如果连不上(尤其国内部分机房到境外线路不稳),PHP 会一直等到超时才返回,这是后台卡十几秒的最常见原因。
在服务器上执行:
echo "127.0.0.1 app.zblogcn.com" >> /etc/hosts
Windows 服务器改 C:\Windows\System32\drivers\etc\hosts。改完刷新后台,速度通常会立刻回升。
注意:这会让「应用中心」里的在线主题、插件市场打不开。需要装新插件时,把这一行前面加
#注释掉,装完再加回来。
第四步:给文章表加索引、清理垃圾数据
这一步的目标是降低数据库查询耗时,文章上千篇后效果很明显。
用 phpMyAdmin 或命令行连上数据库,先看表前缀(默认 zbp_):
-- 加复合索引,覆盖后台文章列表的常用查询
ALTER TABLE zbp_post ADD INDEX idx_cate_status_time (log_CateID, log_Status, log_PostTime);
-- 清理草稿和待审核文章(log_Status:0 公开、1 草稿、2 待审核,先 SELECT 确认再删)
SELECT COUNT(*) FROM zbp_post WHERE log_Status IN (1,2);
-- 清理垃圾评论
DELETE FROM zbp_comment WHERE comm_IsChecking = 1;
-- 回收表空间
OPTIMIZE TABLE zbp_post, zbp_comment;
注意:
ALTER TABLE和DELETE前务必先备份数据库(后台「网站设置」→「数据备份」可以导出,或用mysqldump -u 用户名 -p 库名 > bak.sql)。删数据前一定先跑 SELECT 看条数。
第五步:打开 PHP OPcache 并升到 PHP 8
这一步的目标是让 PHP 不再每次请求都重新编译 ZBlog 的几千个 PHP 文件。
打开 php.ini,确认或添加:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
memory_limit=256M
改完执行 systemctl restart php-fpm(宝塔面板在「软件商店」→ PHP 设置 → 性能调整里也能开)。
注意:ZBlog 官方要求 PHP 7.4 以上,建议直接上 PHP 8.0/8.1,后台数据库操作能快 30% 以上。切换 PHP 版本前先确认主题和插件都兼容。
第六步:调大 MySQL 缓冲池
这一步的目标是让文章数据尽量走内存而不是磁盘。
编辑 my.cnf(宝塔在「数据库」→「性能调整」):
innodb_buffer_pool_size = 512M # 建议设为服务器内存的 50%~60%
slow_query_log = 1
long_query_time = 1
重启 MySQL 后观察慢查询日志,看还有哪些 SQL 在拖后腿。
第七步:清缓存、检查 CDN 是否缓存了后台
进后台首页,点顶部右侧的「清空缓存并重建模板」,清掉 data/cache 目录里的旧缓存。
如果你用了 CDN,去 CDN 控制台把后台目录加入不缓存规则:
/zb_system/*
/admin.php
注意:CDN 缓存后台页面会导致你看到的是几分钟前的旧数据,也常被误判成「后台卡」。后台目录必须完全绕过 CDN。
小结
- 先用 F12 看 TTFB,区分服务端慢还是前端慢,再动手。
- 后台卡十几秒,八成是应用中心的外部请求超时,改 hosts 阻断最快。
- 插件用二分法逐个停用排查,重点怀疑统计类和自动更新类。
- 文章表加
log_CateID + log_Status + log_PostTime复合索引,清掉草稿、待审文章和垃圾评论。 - 开 PHP OPcache、升到 PHP 8、调大
innodb_buffer_pool_size。 - 清空 ZBlog 缓存,并把后台目录从 CDN 缓存里排除。
原文链接:https://www.gj0.com/thread-727.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。