【菜农大丰收】论我写的一处垃圾代码

一个performance监控上报的需求,其中涉及一个方法是通过文件扩展名和resource的initiatorType来获取资源的实际文件类型
当然是先看看类似需求在同性交友网站上有没有
找到一处
performance-bookmarklet
看这段代码

helper.getFileType = function(fileExtension, initiatorType){
    if(fileExtension){
        switch(fileExtension){
            case "jpg" :
            case "jpeg" :
            case "png" :
            case "gif" :
            case "webp" :
            case "svg" :
            case "ico" :
                return "image";
            case "js" : 
                return "js"
            case "css":
                return "css"
            case "html":
                return "html"
            case "woff":
            case "woff2":
            case "ttf":
            case "eot":
            case "otf":
                return "font"
            case "swf":
                return "flash"
            case "map":
                return "source-map"
        }
    }
    if(initiatorType){
        switch(initiatorType){
            case "xmlhttprequest" :
                return "ajax"
            case "img" :
                return "image"
            case "script" :
                return "js"
            case "internal" :
            case "iframe" :
                return "html" //actual page
            default :
                return "other"
        }
    }
    return initiatorType;
};

拿来我就用了……
这段代码的作用是判断传入的扩展名和追踪类型存在 有一个存在即进入推断过程,推断过程是用一堆switch case写的,当时copy的时候也是懒,没想过改造下……
当然mr的时候被老大给点了,点的一点都不冤……然后我就写了个如下代码……


image.png

在使用时

const fileType = fileTypeMap[扩展名] || fileTypeMap[追踪类型] || 'other'';

这是我这个脑子能想到的……
然后老大写了下他瞬间实现的(这可能和他从小爱吃肉有关系 笑)

const typeMapList = [{
    originType: ['xmlhttprequest'],
    targetType: 'ajax',
}, {
    originType: ['jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'ico', 'img' ],
    targetType: 'image',

}, {
    originType: ['js', 'script' ],
    targetType: 'js',
}, {
    originType: ['css'],
    targetType: 'css',
}, {
    originType: ['html', 'internal', 'iframe' ],
    targetType: 'html',
}, {
    originType: ['woff', 'woff2', 'ttf', 'eot', 'otf' ],
    targetType: 'font',
}, {
    originType: ['swf'],
    targetType: 'flash',
}, {
    originType: ['map'],
    targetType: 'source-map',
}];

function getFileType(type) {
    const typeMap = typeMapList.find(map => map.originType.includes(type));
    return typeMap ? typeMap.targetType : 'other';
}
const fileType = getFileType(追踪类型 || 扩展名);

从此处代码可以看出来我的几个明显错误

  • 拿来主义 对交友网站的代码没有考虑
  • 抽象意识局限 哪怕改了switch-case结构 却依旧没有意识到类型的匹配和扩展

改进方法

  • 对别人写的代码不能懒copy 其实就是懒的(屎一样的switch-case当然看到了😢
  • 想清楚要的功能是什么,可以抽象出哪几个部分,是否满足方法/组件设计的原则
  • 多吃些核桃
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,054评论 3 119
  • 1, 加油第三方弹框控件,加油的时候,支付和弹框在一个控制器,由于支付提醒消息是通过通知传递的,所以,当弹框的bl...
    阶梯阅读 1,427评论 0 0
  • 很多时候,我们都太想当然了。 在很多时候,在我们脑海中,总会闪过一丝念头,或者总会闪现出一幅画面,当某某困难场景或...
    痞马阅读 3,122评论 0 0
  • 做了三天阿辽莎的表情包,把自己做废了
    菲克斯喵个咪阅读 1,643评论 0 0
  • 书上得来终觉浅。 在钟静的眼中仿佛周遭人都是幼稚可笑的。同她一起长的的周英尤甚,一天到晚把情情爱爱挂在嘴边...
    丝萝依乔木阅读 1,720评论 2 1

友情链接更多精彩内容