Repository navigation
12. 性能与代码结构重构 (v0.5)
-
问题:
- 性能瓶颈: 程序在运行过程中会反复编译相同的正则表达式,尤其是在处理过滤规则和内容发现时,造成了不必要的CPU资源浪费。
- 代码耦合: 正则表达式散落在代码的各个角落,管理和维护困难。
- 编译错误: 由于变量作用域和初始化时机不当,导致在特定场景下出现
undefined或not exported的编译错误。
-
解决方案:
- 全面预编译正则: 对项目中所有正则表达式(包括URL发现、内容过滤、敏感信息提取等)进行了全面重构。所有正则现在都在程序启动时被预编译一次,并作为全局变量或配置项在各模块间共享。此项改动显著降低了运行时的CPU开销,大幅提升了扫描性能。
- 中心化管理: 将所有核心的正则表达式统一移至
config包中进行定义和初始化,使代码结构更清晰,维护性更强。 - 修复编译Bug:
- 新增
config.Init()函数,并调整了在main.go中的调用时机,确保所有配置(特别是-d参数相关的正则)在被使用前都已正确初始化。 - 修正了变量的导出规则(将
domainRegex改为DomainRegex),解决了跨包调用时not exported的问题。 - 清理了
crawler/run.go中冗余的初始化代码。
- 新增
-
价值:
- 本次重构不仅彻底解决了遗留的编译错误,更是一次重要的性能和架构升级,为未来功能的迭代打下了坚实的基础。
13. 健壮性与稳定性修复 (v0.5)
- 问题:
- 在处理无法通过
http/https访问的URL(例如目标列表中包含非标准web端口的地址,比如xxx.com:25)时,程序会因未正确处理网络连接失败而引发“空指针”错误,导致程序意外崩溃。 - 旧代码在某些情况下未及时关闭网络连接,存在资源泄露的风险。
- 在处理无法通过
- 解决方案:
- 重写了
util/utils.go中的GetProtocol函数。 - 新的实现能够安全地处理网络连接错误。当遇到无法访问的URL时,程序不再崩溃,而是会跳过该URL并继续执行。
- 修复了资源泄露问题,确保所有网络连接都能被正确关闭,提升了程序长时间运行的稳定性。
- 重写了
- 价值:
- 彻底解决了特定URL导致的程序崩溃问题,显著增强了工具在处理复杂和异常目标列表时的健壮性。