Files
kefu/im/xxiaw列表优化记录-2026-09-01.md
2026-09-03 08:38:17 +08:00

2.5 KiB
Raw Permalink Blame History

xxiaw 列表页生产优化记录

日期:2026-09-01

目标页面:https://www.xxiaw.com/app_games/index3.html

原因

  1. gxl_mysql_news() 的分页分支先执行了一次列表 SQL,随后在普通栏目分支又执行了完全相同的 SQL,导致每次列表页请求重复查询。
  2. 站点的列表数据缓存配置为关闭状态,index3.html 每次访问都会进入完整 ThinkPHP 流程并查询数据库。
  3. gxl_news 已有联合索引 newslist(news_status, news_cid, news_addtime),能够覆盖当前栏目的筛选和排序,因此没有新增重复索引。

线上改动

  • /www/wwwroot/www.xxiaw.com/Lib/Common/Common/con_common.php
    • 删除分页分支中第一次、无条件执行的重复列表查询。
  • /www/wwwroot/www.xxiaw.com/Lib/XxiawListPageCache.php
    • 新增仅作用于无参数 GET /app_games/indexN.html 的页面缓存。
    • 新鲜缓存 60 秒,允许 300 秒旧缓存作为并发回退。
    • 使用每页文件锁和原子写入,避免高并发重复生成及半文件。
  • /www/wwwroot/www.xxiaw.com/index.php
    • 在 ThinkPHP 启动前加载列表页缓存。

缓存不会作用于带参数请求、POST/HEAD 请求、后台接口或其他栏目。

备份与回滚

部署前原文件备份:

/www/backup/xxiaw-list-opt-20260901

修正内部重写识别前的中间版本备份:

/www/backup/xxiaw-list-opt-20260901-144651

验证结果

  • PHP 5.6 对 4 个相关文件的语法检查全部通过。
  • 7 项缓存范围测试全部通过。
  • 首次生成请求:HTTP 200、MISS、源站本机总耗时 29.506 ms。
  • 随后 12 次缓存请求:全部 HTTP 200、HIT。
  • 缓存命中总耗时中位数 0.962 ms,范围 0.763–1.262 ms。
  • 优化前后页面标题一致,主列表 20 条链接及标题逐条一致。
  • 带参数的同一页面和其他栏目均无缓存标记,确认未越界。
  • MySQL 验证快照:Threads_running=1、Threads_connected=3。

仍存在的整机压力

检查期间服务器一度有约 2,876 条已建立 TCP 连接、4,015 条 orphan TCP,系统负载约 5.4;多个来源 IP 同时保持上百条到 80/443 端口的连接。公网响应仍可能因连接洪峰出现明显波动,这部分已经与本列表页 PHP/SQL 执行分离。

宝塔进程只做了单独重启,未重启 Nginx、PHP、MySQL 或服务器。宝塔端口 8686 正常监听;其入口启用了 User-Agent 校验,无浏览器标识的请求会返回 404,标准 Chrome 浏览器标识访问返回 HTTP 200。