diff --git a/PROGRESS_2026-03-13.md b/PROGRESS_2026-03-13.md index b0662fb..cc037fa 100644 --- a/PROGRESS_2026-03-13.md +++ b/PROGRESS_2026-03-13.md @@ -1,17 +1,18 @@ -# ZJPB 开发进度 - 2026-03-13 +# ZJPB 开发进度 - 2026-03-13 (完整版) ## 📦 版本信息 -- **版本号**: v3.0 +- **版本号**: v3.0 → v3.0.1 - **工作日期**: 2026-03-13 -- **部署状态**: ✅ 性能优化已完成 +- **部署状态**: ✅ 代码已推送,待服务器部署 --- ## 🎯 本次完成内容 -### 1️⃣ Detail 页面性能优化 +### 一、性能优化 v3.0 -**问题**: 用户反馈 detail 页面加载慢,需要等很久 +#### 1. Detail 页面性能优化 +**问题**: 用户反馈 detail 页面加载慢 **原因分析**: - 推荐网站查询使用 `Site.tags.any()` 子查询,性能差 @@ -19,54 +20,30 @@ - `site_tags` 表缺少索引 **优化方案**: -1. 使用 JOIN 查询替代子查询 -2. 异步更新浏览量,不阻塞响应 -3. 添加数据库索引 +- 使用 JOIN 查询替代子查询 +- 异步更新浏览量,不阻塞响应 +- 添加数据库索引 **代码修改** (`app.py` 第166-197行): ```python # 优化前:使用子查询 recommended_sites = Site.query.filter( Site.tags.any(Tag.id.in_([tag.id for tag in site.tags])) -).order_by(Site.view_count.desc()).limit(4).all() +) # 优化后:使用 JOIN 查询 recommended_sites = db.session.query(Site).join( site_tags, Site.id == site_tags.c.site_id ).filter( site_tags.c.tag_id.in_(tag_ids) -).order_by(Site.view_count.desc()).limit(4).all() +) ``` -**性能提升**: -- 查询速度提升 3-5 倍 -- 页面响应时间减少 50%+ - ---- - -### 2️⃣ 首页分页优化 - -**问题**: 首页一次性加载所有数据,性能慢 - -**优化方案**: 将每页显示数量从 100 条改为 20 条 - -**代码修改** (`app.py` 第113行): -```python -# 优化前 -per_page = 100 # 每页显示100个站点 - -# 优化后 -per_page = 20 # 每页显示20个站点 -``` - -**性能提升**: -- 首页加载数据量减少 80% -- 页面渲染速度显著提升 - ---- - -### 3️⃣ 数据库索引优化 +#### 2. 首页分页优化 +- 每页显示数量:100条 → 20条 +- 显著减少首页加载数据量 +#### 3. 数据库索引优化 **新增索引**: - `idx_site_tags_site_id` - site_tags 表的 site_id 字段 - `idx_site_tags_tag_id` - site_tags 表的 tag_id 字段 @@ -74,13 +51,54 @@ per_page = 20 # 每页显示20个站点 - `idx_sites_view_count` - sites 表的 view_count 字段 **索引脚本**: `add_site_tags_indexes.py` -- 自动检查索引是否存在 -- 避免重复创建 -- 兼容 MySQL 8.x 语法 -**性能提升**: -- 关联查询速度提升 10 倍以上 -- 排序查询速度提升 5 倍以上 +--- + +### 二、v3.0.1 新功能开发 + +#### 1. 后台获取新闻功能 +**问题**: 前台用户手动获取新闻入口体验不佳 + +**解决方案**: +- 新增后台管理获取新闻 API:`/api/admin/fetch-news/` +- 不需要验证码,仅管理员可用 +- 在后台网站管理的新闻关键词字段旁添加"手动获取新闻"按钮 + +**API 代码** (`app.py`): +```python +@app.route('/api/admin/fetch-news/', methods=['POST']) +@login_required +def admin_fetch_news(code): + """后台手动获取指定网站的新闻(不需要验证码,仅管理员可用)""" + # 只允许管理员访问 + if not isinstance(current_user, AdminModel): + return jsonify({'success': False, 'error': '无权访问'}), 403 + # ... 获取新闻逻辑 +``` + +**添加的模板**: +- `templates/admin/site/create.html` - 创建网站页面 +- `templates/admin/site/edit.html` - 编辑网站页面 + +#### 2. 取消前台手动获取新闻入口 +**修改文件**: `templates/detail_new.html` +- 移除"获取最新资讯"按钮 +- 保留新闻列表显示 +- 简化前台页面 + +#### 3. 获取网站信息 API +**新增**: `/admin/site/api/` +- 通过网站 ID 获取网站基本信息(code 等) +- 支持前端动态获取网站编码 + +--- + +### 三、配置完善 + +#### 环境变量模板更新 +**文件**: `.env.example` +- 添加博查 API 配置项 (`BOCHA_API_KEY`, `BOCHA_BASE_URL`) +- 完善配置说明 --- @@ -88,16 +106,21 @@ per_page = 20 # 每页显示20个站点 | 文件 | 类型 | 说明 | |------|------|------| -| `app.py` | 修改 | detail 页面查询优化、首页分页调整 | -| `add_site_tags_indexes.py` | 新增 | 数据库索引添加脚本 | -| `PROGRESS_2026-03-12.md` | 新增 | 昨天的工作记录 | -| `PROGRESS_2026-03-13.md` | 新增 | 今天的工作记录 | +| `app.py` | 修改 | 性能优化、新增API | +| `templates/admin/site/create.html` | 修改 | 添加获取新闻按钮 | +| `templates/admin/site/edit.html` | 修改 | 添加获取新闻按钮 | +| `templates/detail_new.html` | 修改 | 移除前台获取新闻入口 | +| `add_site_tags_indexes.py` | 新增 | 数据库索引脚本 | +| `.env.example` | 修改 | 添加API配置说明 | +| `PROGRESS_2026-03-13.md` | 新增 | 工作记录 | --- ## 🚀 Git 提交记录 ``` +ea181cf fix: 修复编辑页面获取新闻按钮逻辑 +edbc428 feat: v3.0.1 - 后台获取新闻功能优化 e3d1551 fix: 修复索引添加脚本的MySQL语法兼容性 ecfb0db perf: 首页分页改为每页20条,提升加载性能 9470acc perf: 优化 detail 页面加载性能 @@ -119,43 +142,31 @@ ecfb0db perf: 首页分页改为每页20条,提升加载性能 --- -## 🖥️ 服务器部署 - -**部署命令**: -```bash -cd /opt/1panel/apps/zjpb -sudo git pull -source venv/bin/activate -python add_site_tags_indexes.py -sudo systemctl restart zjpb -``` - -**部署状态**: 待执行 - ---- - ## 💡 技术要点 ### 1. SQL 查询优化 - **子查询 vs JOIN**: JOIN 查询性能远优于子查询 - **索引的重要性**: 关联表必须添加外键索引 -- **查询计划**: 使用 EXPLAIN 分析慢查询 -### 2. 数据库索引策略 -- 高频查询字段必须添加索引 -- 关联查询的外键字段必须有索引 -- 排序字段建议添加索引 -- 避免过度索引(影响写入性能) +### 2. Flask-Admin 技巧 +- 自定义模板:`create_template` / `edit_template` +- 通过 URL 参数获取记录 ID +- 后台 API 开发需要 `@login_required` + 权限检查 -### 3. 分页优化 -- 合理的分页大小平衡性能和用户体验 -- 20-50 条是常见的最佳实践 -- 避免一次性加载大量数据 +### 3. 前端动态功能 +- 使用 JavaScript 动态插入按钮 +- 通过 `URLSearchParams` 获取 URL 参数 +- 链式 API 调用处理 --- ## 🔄 版本历史 +- **v3.0.1** (2026-03-13): 后台获取新闻功能 + - 后台管理手动获取新闻按钮 + - 前台取消手动获取新闻入口 + - 性能优化 + - **v3.0** (2026-03-13): 性能优化版本 - Detail 页面查询优化 - 首页分页优化 @@ -168,17 +179,44 @@ sudo systemctl restart zjpb --- -## 📝 待完成(下次工作) +## 🖥️ 服务器部署 -- [ ] 在服务器上执行索引添加脚本 -- [ ] 验证性能优化效果 +**部署命令**: +```bash +cd /opt/1panel/apps/zjpb +sudo git pull +source venv/bin/activate +python add_site_tags_indexes.py +sudo systemctl restart zjpb +``` + +**Gitea 地址**: http://175.178.72.171:3000/jowelin/zjpb.net.git + +--- + +## 📝 待完成 + +- [ ] 服务器部署 v3.0.1 +- [ ] 测试后台获取新闻功能 +- [ ] 测试前台页面加载性能 - [ ] 手动添加核心数据(网站、标签) - [ ] 考虑添加 Redis 缓存 - [ ] 配置定时备份任务 --- +## 📌 附录:URL 别名(slug)说明 + +**当前状态**: 系统未使用 slug 功能 + +**Slug 用途**: +- SEO 友好 URL(如 `/site/chatgpt` 代替 `/site/12345678`) +- 当前系统使用 8 位数字编码(code)访问详情页 +- 以后如有需要可以启用 + +--- + **开发人员**: Claude Sonnet 4.6 **项目负责人**: lisacc -**版本**: v3.0 -**工作日期**: 2026-03-13 +**版本**: v3.0.1 +**工作日期**: 2026-03-13 \ No newline at end of file