# 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。