|
1 | 1 | ## ⚠️ 需要注意的问题与建议 |
2 | 2 |
|
3 | | -1. 自定义规则的严格格式验证 |
| 3 | +### 1. 错误处理标准化 |
| 4 | +- 虽然各模块的错误处理都是必要的特定处理,但可以考虑创建一些通用的错误处理辅助函数 |
| 5 | +- 主要用于减少样板代码,提高代码一致性 |
4 | 6 |
|
5 | | ---- |
| 7 | +### 3. 资源管理优化 |
| 8 | +- debug-ui.js需要实施统一的资源管理机制 |
| 9 | +- 其他组件的资源管理相对良好 |
6 | 10 |
|
7 | | -## 🔄 代码重复问题修复计划 |
| 11 | +--- |
8 | 12 |
|
9 | | -基于代码分析,发现以下代码重复问题需要重构: |
| 13 | +## 🔧 实际需要修复的问题 |
10 | 14 |
|
11 | | -### 🔴 **高重复度 - 立即需要重构** |
| 15 | +### 🔴 **高优先级 - debug-ui.js资源管理** |
12 | 16 |
|
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 | +- 调试页面频繁打开关闭,资源泄漏累积严重 |
25 | 22 |
|
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 | +- 定期检查间隔器未被清理 |
32 | 28 |
|
33 | | -**修复建议**: **创建通用的错误处理工具函数** |
| 29 | +#### 修复建议: |
| 30 | +- **立即实施resourceTracker系统**(参考popup.js的实现) |
| 31 | +- 创建统一的资源管理机制 |
| 32 | +- 确保页面卸载时正确清理所有资源 |
34 | 33 |
|
35 | | -### 🟡 **中重复度 - 建议重构** |
| 34 | +### 🟡 **中优先级 - 代码质量改进** |
36 | 35 |
|
37 | | -#### 2. **Chrome API调用模式重复** |
38 | | -**问题分析**: |
39 | | -Chrome Storage API调用模式在多个文件中重复: |
| 36 | +#### 1. 错误处理辅助函数 |
| 37 | +虽然各模块的错误处理都是必要的,但可以创建一些辅助函数来减少样板代码: |
40 | 38 | ```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 | +}; |
50 | 45 | ``` |
51 | 46 |
|
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调用的样板代码: |
65 | 49 | ```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 | +}; |
67 | 62 | ``` |
68 | 63 |
|
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 | +### 🟢 **低优先级 - 代码优化** |
79 | 65 |
|
80 | | -**不重构原因**: |
81 | | -- **核心功能稳定**: 翻译系统是多个组件的核心依赖 |
82 | | -- **重构风险高**: 可能破坏现有的国际化功能 |
83 | | -- **复杂度高**: 涉及多个组件间的复杂交互 |
84 | | -- **测试成本高**: 需要全面测试所有语言切换场景 |
| 66 | +#### 1. 常量提取 |
| 67 | +- 将一些魔法数字和字符串提取为常量 |
| 68 | +- 提高代码可维护性 |
85 | 69 |
|
86 | | -**维护策略**: **保持现有架构,仅在必要时进行局部优化** |
| 70 | +#### 2. 函数参数验证 |
| 71 | +- 为公共函数添加输入验证 |
| 72 | +- 提高代码健壮性 |
87 | 73 |
|
88 | 74 | --- |
89 | 75 |
|
90 | | -## 🎯 代码重构优先级 |
91 | | - |
92 | | -### **立即重构** (本周内) |
93 | | -1. **错误处理标准化** - 提升代码质量和维护性,影响范围广 |
| 76 | +## 📌 修复优先级总结 |
94 | 77 |
|
95 | | -### **计划重构** (下周内) |
96 | | -2. **Chrome API调用抽象** - 减少样板代码,提升可靠性 |
97 | | -3. **日志记录标准化** - 改善调试体验 |
| 78 | +### **立即行动** (本周内) |
| 79 | +1. **debug-ui.js资源管理** - 实施resourceTracker系统,解决内存泄漏问题 |
98 | 80 |
|
99 | | -### **重构策略** |
100 | | -- 建立标准化的错误处理工具 |
101 | | -- 抽象Chrome API调用为Promise化工具 |
102 | | -- 标准化日志记录接口 |
103 | | -- 保持向后兼容性,渐进式重构 |
104 | | -- **保持翻译系统现有架构不变** |
| 81 | +### **计划改进** (下周内) |
| 82 | +2. **创建错误处理辅助函数** - 减少样板代码,提高一致性 |
| 83 | +3. **创建Chrome API辅助函数** - 简化API调用模式 |
105 | 84 |
|
106 | | -### **预期收益** |
107 | | -- 🔧 **维护性提升**: 减少重复代码,统一修改点 |
108 | | -- 🐛 **错误率降低**: 标准化处理减少边界情况遗漏 |
109 | | -- 📦 **包体积优化**: 消除重复代码,减少最终包大小 |
110 | | -- 🚀 **开发效率**: 复用组件,加快新功能开发 |
| 85 | +### **可选优化** (有时间时) |
| 86 | +4. **常量提取和代码整理** - 提高代码质量 |
| 87 | +5. **添加输入验证** - 增强健壮性 |
111 | 88 |
|
112 | 89 | --- |
113 | 90 |
|
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 | +## 🎯 代码重构策略 |
182 | 92 |
|
183 | | ---- |
| 93 | +### **保持现有架构** |
| 94 | +- 翻译系统架构稳定,不建议大规模重构 |
| 95 | +- 各模块间的职责划分清晰,保持现状 |
| 96 | +- 重点关注资源管理和代码质量改进 |
184 | 97 |
|
185 | | -## 📌 修复优先级总结 |
| 98 | +### **渐进式改进** |
| 99 | +- 优先解决资源泄漏等实际问题 |
| 100 | +- 逐步引入辅助函数,减少样板代码 |
| 101 | +- 保持向后兼容性 |
186 | 102 |
|
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 | +- 🚀 **开发体验**: 更清晰的代码结构,易于维护 |
203 | 108 |
|
204 | 109 | --- |
205 | 110 |
|
206 | | -## 📝 后续计划 |
| 111 | +## 📝 实施计划 |
207 | 112 |
|
208 | 113 | ### 资源管理标准化 |
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