美文网首页
【菜农大丰收】论我写的一处垃圾代码

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

作者: 懒先森 | 来源:发表于2018-09-17 18:26 被阅读166次

一个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当然看到了😢
  • 想清楚要的功能是什么,可以抽象出哪几个部分,是否满足方法/组件设计的原则
  • 多吃些核桃

相关文章

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

    一个performance监控上报的需求,其中涉及一个方法是通过文件扩展名和resource的initiatorT...

  • 【菜农大丰收】论我写的一处违反开闭原则的代码

    涉及公司代码,隐去具体描述 需求是这样的 比如你有一些原料 卵后呢,你需要对里面的数据进行一些指标统计分析,比如计...

  • [智乐园191]乐清:菜农有难众人帮

    菜农有难众人帮 文/老鹰 城南街道两菜农, 种植蔬菜三百亩。 白菜萝卜品种多, 原以今年大丰收。 遗逢春雨连月下,...

  • 【菜农大丰收】论语义问题

    Javascript中数组有这样几个原汁原味的方法 forEach map every reduce 暂且说这几个...

  • 写好代码,迎娶白富美

    以下代码是项目、产品中真实存在代码。小编是写过垃圾代码的程序猿,小编也是看过别人写垃圾代码的程序猿。为了写好代码也...

  • 我们不是研发,不会天天去关注代码

    前段时间,项目实施人员告诉我,我写的 Ansible 脚本中有一处写死了版本号。并把代码截图给我看。我一看,这代码...

  • 这帮垃圾没事写啥代码

    你说说这帮人连MySQL索引结构都不知道连Redis数据结构都不知道连Go的指针和值都分不清楚还把 ES 当银弹的...

  • 自学Java第108天

    昨天写的学习笔记简直就是一坨垃圾这是我晚上测试代码后的第一反应 当然那天确实比较晚了,并且还没学完最后前端的代码写...

  • 模拟分页存储算法

    这是一次操作系统的实验,写的很垃圾,留在这等以后回过头来看自己的垃圾代码

  • Swift block 用法

    我最近在看kf的源码,想看看大佬是怎么写代码,他妈的看完 真是火的一逼,什么垃圾,有些代码写的跟狗屎一样,要实用不...

网友评论

      本文标题:【菜农大丰收】论我写的一处垃圾代码

      本文链接:https://www.haomeiwen.com/subject/dswrnftx.html