docs: 更新工作进度记录 v3.0.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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/<code>`
|
||||
- 不需要验证码,仅管理员可用
|
||||
- 在后台网站管理的新闻关键词字段旁添加"手动获取新闻"按钮
|
||||
|
||||
**API 代码** (`app.py`):
|
||||
```python
|
||||
@app.route('/api/admin/fetch-news/<code>', 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/<site_id>`
|
||||
- 通过网站 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
|
||||
Reference in New Issue
Block a user