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

52 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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。