Skip to content

Commit 3f954c2

Browse files
committed
docs: TODO update
1 parent 03173d3 commit 3f954c2

1 file changed

Lines changed: 89 additions & 176 deletions

File tree

docs/TODO.md

Lines changed: 89 additions & 176 deletions
Original file line numberDiff line numberDiff line change
@@ -1,212 +1,125 @@
11
## ⚠️ 需要注意的问题与建议
22

3-
1. 自定义规则的严格格式验证
3+
### 1. 错误处理标准化
4+
- 虽然各模块的错误处理都是必要的特定处理,但可以考虑创建一些通用的错误处理辅助函数
5+
- 主要用于减少样板代码,提高代码一致性
46

5-
---
7+
### 3. 资源管理优化
8+
- debug-ui.js需要实施统一的资源管理机制
9+
- 其他组件的资源管理相对良好
610

7-
## 🔄 代码重复问题修复计划
11+
---
812

9-
基于代码分析,发现以下代码重复问题需要重构:
13+
## 🔧 实际需要修复的问题
1014

11-
### 🔴 **高重复度 - 立即需要重构**
15+
### 🔴 **高优先级 - debug-ui.js资源管理**
1216

13-
#### 1. **错误处理模式重复**
14-
**问题分析**:
15-
以下错误处理模式在多个文件中重复出现:
16-
```javascript
17-
try {
18-
// 某些操作
19-
} catch (error) {
20-
console.error('错误信息:', error);
21-
sendDebugLog('错误信息', 'error');
22-
return 默认值;
23-
}
24-
```
17+
#### 问题分析:
18+
- **15+个事件监听器**未统一管理,存在内存泄漏风险
19+
- **1个setInterval**用于定期检查预加载状态,未被清理
20+
- **2个setTimeout**用于延迟执行和WebRTC检测,未被清理
21+
- 调试页面频繁打开关闭,资源泄漏累积严重
2522

26-
**重复文件**:
27-
- **popup.js** - 10+处相同的错误处理模式
28-
- **domain-rules-manager.js** - 4处类似的错误处理
29-
- **shared-utils.js** - 翻译获取的错误处理
30-
- **shared-update-checker.js** - 更新检查的错误处理
31-
- **toggle.js** - 页面初始化的错误处理
23+
#### 具体风险点:
24+
- 按钮事件监听器: showRulesBtn, clearLogsBtn, testHeaderBtn, fixPriorityBtn等
25+
- 过滤器复选框事件监听器
26+
- 缓存管理相关按钮事件监听器
27+
- 定期检查间隔器未被清理
3228

33-
**修复建议**: **创建通用的错误处理工具函数**
29+
#### 修复建议:
30+
- **立即实施resourceTracker系统**(参考popup.js的实现)
31+
- 创建统一的资源管理机制
32+
- 确保页面卸载时正确清理所有资源
3433

35-
### 🟡 **中重复度 - 建议重构**
34+
### 🟡 **中优先级 - 代码质量改进**
3635

37-
#### 2. **Chrome API调用模式重复**
38-
**问题分析**:
39-
Chrome Storage API调用模式在多个文件中重复:
36+
#### 1. 错误处理辅助函数
37+
虽然各模块的错误处理都是必要的,但可以创建一些辅助函数来减少样板代码:
4038
```javascript
41-
const result = await new Promise((resolve, reject) => {
42-
chrome.storage.local.get([key], (result) => {
43-
if (chrome.runtime.lastError) {
44-
reject(new Error(chrome.runtime.lastError.message));
45-
return;
46-
}
47-
resolve(result);
48-
});
49-
});
39+
// 建议创建的辅助函数
40+
const handleAsyncError = (error, context) => {
41+
console.error(`Error in ${context}:`, error);
42+
sendDebugLog(`Error in ${context}: ${error.message}`, 'error');
43+
return null; // 或默认值
44+
};
5045
```
5146

52-
**重复文件**:
53-
- **popup.js** - 多处Storage API调用
54-
- **background.js** - 类似的Storage API调用
55-
- **domain-rules-manager.js** - getCustomRules方法
56-
- **debug-ui.js** - 存储访问逻辑
57-
58-
**修复建议**: **抽象Chrome API调用为Promise化的工具函数**
59-
60-
### 🟢 **低重复度 - 可选重构**
61-
62-
#### 3. **日志记录模式重复**
63-
**问题分析**:
64-
类似的日志记录模式在多个文件中出现:
47+
#### 2. Chrome API调用辅助函数
48+
为减少Chrome API调用的样板代码:
6549
```javascript
66-
sendDebugLog(`${i18n.t('message_key')} ${variable}`, 'logType');
50+
// 建议创建的辅助函数
51+
const chromeStorageGet = async (keys) => {
52+
return new Promise((resolve, reject) => {
53+
chrome.storage.local.get(keys, (result) => {
54+
if (chrome.runtime.lastError) {
55+
reject(new Error(chrome.runtime.lastError.message));
56+
return;
57+
}
58+
resolve(result);
59+
});
60+
});
61+
};
6762
```
6863

69-
**修复建议**: **标准化日志记录接口,支持模板化消息**
70-
71-
### 🚫 **不建议重构 - 保持现状**
72-
73-
#### 4. **翻译获取逻辑重复** - shared-utils.js:51-89
74-
**问题分析**:
75-
- **shared-utils.js** 中有 `getFallbackTranslation()``getUpdateTranslation()`
76-
- **shared-i18n-base.js** 中也有类似的 `getFallbackTranslation()` 方法
77-
- **shared-update-checker.js** 中有 `getLocalizedText()` 函数
78-
- 多个文件都在重复实现语言检测和翻译回退逻辑
64+
### 🟢 **低优先级 - 代码优化**
7965

80-
**不重构原因**:
81-
- **核心功能稳定**: 翻译系统是多个组件的核心依赖
82-
- **重构风险高**: 可能破坏现有的国际化功能
83-
- **复杂度高**: 涉及多个组件间的复杂交互
84-
- **测试成本高**: 需要全面测试所有语言切换场景
66+
#### 1. 常量提取
67+
- 将一些魔法数字和字符串提取为常量
68+
- 提高代码可维护性
8569

86-
**维护策略**: **保持现有架构,仅在必要时进行局部优化**
70+
#### 2. 函数参数验证
71+
- 为公共函数添加输入验证
72+
- 提高代码健壮性
8773

8874
---
8975

90-
## 🎯 代码重构优先级
91-
92-
### **立即重构** (本周内)
93-
1. **错误处理标准化** - 提升代码质量和维护性,影响范围广
76+
## 📌 修复优先级总结
9477

95-
### **计划重构** (下周内)
96-
2. **Chrome API调用抽象** - 减少样板代码,提升可靠性
97-
3. **日志记录标准化** - 改善调试体验
78+
### **立即行动** (本周内)
79+
1. **debug-ui.js资源管理** - 实施resourceTracker系统,解决内存泄漏问题
9880

99-
### **重构策略**
100-
- 建立标准化的错误处理工具
101-
- 抽象Chrome API调用为Promise化工具
102-
- 标准化日志记录接口
103-
- 保持向后兼容性,渐进式重构
104-
- **保持翻译系统现有架构不变**
81+
### **计划改进** (下周内)
82+
2. **创建错误处理辅助函数** - 减少样板代码,提高一致性
83+
3. **创建Chrome API辅助函数** - 简化API调用模式
10584

106-
### **预期收益**
107-
- 🔧 **维护性提升**: 减少重复代码,统一修改点
108-
- 🐛 **错误率降低**: 标准化处理减少边界情况遗漏
109-
- 📦 **包体积优化**: 消除重复代码,减少最终包大小
110-
- 🚀 **开发效率**: 复用组件,加快新功能开发
85+
### **可选优化** (有时间时)
86+
4. **常量提取和代码整理** - 提高代码质量
87+
5. **添加输入验证** - 增强健壮性
11188

11289
---
11390

114-
## 🔧 资源管理修复计划
115-
116-
基于代码分析,以下组件需要实施类似popup.js的资源管理修复:
117-
118-
### 🔴 **高优先级 - 立即需要修复**
119-
120-
#### 1. **debug-ui.js** - 调试界面
121-
**风险评估**: 🔴 **极高风险**
122-
- **问题分析**:
123-
- 15个事件监听器未统一管理 (`addEventListener` 调用)
124-
- 1个定时器 (`setTimeout`) 用于延迟初始化
125-
- 1个定期检查间隔器 (`setInterval`) 用于缓存状态检查
126-
- 调试页面频繁打开关闭,资源泄漏累积严重
127-
- **具体风险点**:
128-
- 按钮事件监听器: showRulesBtn, clearLogsBtn, testHeaderBtn, fixPriorityBtn等
129-
- 过滤器复选框事件监听器数组
130-
- 缓存管理相关按钮事件监听器 (6个)
131-
- setInterval定期检查未被清理
132-
- **修复建议**: **立即实施resourceTracker系统**
133-
134-
### 🟡 **中优先级 - 建议修复**
135-
136-
#### 2. **background.js** - 后台服务
137-
**风险评估**: 🟡 **中等风险**
138-
- **问题分析**:
139-
- 1个定时器 (`setTimeout`) 用于重试机制
140-
- 1个防抖定时器 (`setTimeout`) 用于UI更新
141-
- Chrome标签页监听器 (`chrome.tabs.onUpdated`) 长期运行
142-
- Service Worker有内置生命周期管理,但手动管理更安全
143-
- **具体风险点**:
144-
- 重试机制的定时器可能在Service Worker重启时泄漏
145-
- UI更新防抖定时器需要清理
146-
- 标签页监听器在Service Worker重启时需要重新注册
147-
- **修复建议**: **实施轻量级资源管理**
148-
149-
#### 3. **detect.js** - 检测页面
150-
**风险评估**: 🟡 **中等风险**
151-
- **问题分析**:
152-
- 2个定时器: 页面初始化延迟 + fetch超时控制
153-
- 1个页面加载事件监听器
154-
- 网络请求的AbortController管理
155-
- 页面相对简单但有网络请求资源管理需求
156-
- **具体风险点**:
157-
- fetch请求的AbortController和超时定时器
158-
- 页面初始化的延迟定时器
159-
- WebRTC连接检测的异步资源
160-
- **修复建议**: **重点关注网络请求资源管理**
161-
162-
### 🟢 **低优先级 - 可选修复**
163-
164-
#### 4. **toggle.js** - 切换功能
165-
**风险评估**: 🟢 **低风险**
166-
- **问题分析**:
167-
- 3个事件监听器: 语言切换按钮 + 主题切换按钮 + 系统主题变化
168-
- 代码结构简单,生命周期清晰
169-
- 主要是静态事件监听器,泄漏风险较低
170-
- **具体风险点**:
171-
- 动态创建的语言切换按钮事件监听器
172-
- 系统主题变化监听器 (`matchMedia.addEventListener`)
173-
- **修复建议**: **风险较低,可选择性修复**
174-
175-
#### 5. **domain-rules-manager.js** - 域名规则管理
176-
**风险评估**: 🟢 **极低风险**
177-
- **问题分析**:
178-
- 纯数据管理类,无事件监听器或定时器
179-
- 主要是缓存和规则处理逻辑
180-
- 资源管理风险几乎为零
181-
- **修复建议**: **无需修复**
91+
## 🎯 代码重构策略
18292

183-
---
93+
### **保持现有架构**
94+
- 翻译系统架构稳定,不建议大规模重构
95+
- 各模块间的职责划分清晰,保持现状
96+
- 重点关注资源管理和代码质量改进
18497

185-
## 📌 修复优先级总结
98+
### **渐进式改进**
99+
- 优先解决资源泄漏等实际问题
100+
- 逐步引入辅助函数,减少样板代码
101+
- 保持向后兼容性
186102

187-
### **立即行动** (本周内)
188-
1. **debug-ui.js** - 15个事件监听器 + 定时器/间隔器管理
189-
190-
### **计划修复** (下周内)
191-
2. **background.js** - Service Worker资源管理优化
192-
3. **detect.js** - 网络请求和定时器资源管理
193-
194-
### **可选修复** (有时间时)
195-
4. **toggle.js** - 简单事件监听器管理
196-
5. **domain-rules-manager.js** - 无需修复
197-
198-
### **修复策略**
199-
- 复用popup.js的resourceTracker系统设计
200-
- 针对不同组件的特点进行适配
201-
- 重点关注频繁使用的调试界面
202-
- Service Worker采用轻量级资源管理方案
103+
### **预期收益**
104+
- 🔧 **稳定性提升**: 解决内存泄漏问题
105+
- 🐛 **维护性改善**: 减少样板代码,统一错误处理
106+
- 📦 **性能优化**: 更好的资源管理,减少内存占用
107+
- 🚀 **开发体验**: 更清晰的代码结构,易于维护
203108

204109
---
205110

206-
## 📝 后续计划
111+
## 📝 实施计划
207112

208113
### 资源管理标准化
209-
- [ ] 创建可复用的resourceTracker模块
210-
- [ ] 建立资源管理最佳实践文档
211-
- [ ] 实施代码审查检查清单
212-
- [ ] 添加资源泄漏检测工具
114+
- [ ] 为debug-ui.js实施resourceTracker系统
115+
- [ ] 创建资源管理最佳实践文档
116+
- [ ] 建立代码审查检查清单
117+
118+
### 代码质量改进
119+
- [ ] 创建通用错误处理辅助函数
120+
- [ ] 创建Chrome API调用辅助函数
121+
- [ ] 提取常量和改进代码结构
122+
123+
### 监控和维护
124+
- [ ] 添加资源泄漏检测机制
125+
- [ ] 建立定期的代码质量检查流程

0 commit comments

Comments
 (0)