悠然乱弹:从几个方法的重构讲开去--性能大优化-阿里云开发者社区

开发者社区> 开发与运维> 正文

悠然乱弹:从几个方法的重构讲开去--性能大优化

简介:

现在还存在多次扫描处理的问题,也就是说虽然代码结构性重构是成功的,但是性能问题还是没有根本解决。

在给出解决方案之前,需要对这个处理方式缕一缕:

处理方式1:每次遍历全路径找到待处理文件,文件然后批量进行处理。优点是处理起来比较简单,但是会重复扫描。

处理方式2:一次遍历所有文件,然后对每个文件进行注解检测。扫描全路径只有一次,然后要把每个文件与过滤器进行比较如果比较成功那就做,比较不成功就不做。

稍加分析就会发现,两种方式的比较次数是一样的,但是第二种方案遍历文件的次数就少到极限了,还能比1次更少么??

这次的做法就有点复杂了(相对的,实际上也很简单),做一个过滤器,里面放个Map存储过滤器:处理器。

对于每个一个文件,都对所有的过滤器进行校验,如果校验成功,就执行对应的处理器。

1
2
3
4
5
6
7
8
9
10
11
public class ComplexFileFilter implements FileObjectFilter {
    Map<FileObjectFilter,FileObjectProcessor> filterProcessorMap;
    public boolean accept(FileObject fileObject) {
        for(FileObjectFilter filter:filterProcessorMap.keySet()){
            if(filter.accept(fileObject)){
                filterProcessorMap.get(filter).process(fileObject);
            }
        }
        return false;
    }
}

呵呵,性能的问题也提升完毕了。

至此,从几个看似重复的方法,我们通过层层分析,细致推理,终于找到了内部的复杂关系,通过重构,给程序员以便捷的开发与扩展,给使用者以高效的性能和一目了然的逻辑,皆大欢喜了。

总结:许多的时候,一些纠结,重复,无从动手,都是有其内在的复杂因素的,之所以剪不断理还乱,是因为没有抓住实质,但只要把它理顺了,其实各干干的,就简单了。

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章