mardi 6 décembre 2016

When is SWITCH the best option?

Hi i have been testing different Js statements and Switch is the worst by far. When is this statement the best option?

var dimensionSize = {
    mma:                  { width: 300,   height: 50     },
    medrect:            { width: 300,   height: 250  },
    xxlarge:            { width: 320,   height: 50   },
    xlarge:             { width: 300,   height: 50   },
    sky:                  { width: 120,   height: 600    },
    widesky:            { width: 160,   height: 600  },
    leader:             { width: 728,   height: 90   },
    full_320x480:   { width: 320,   height: 480  },
    full_480x320:   { width: 480,   height: 320  },
    full_640x960:   { width: 640,   height: 960  },
    full_960x640:   { width: 960,   height: 640  },
    full_1136x640:  { width: 1136,  height: 640  },
    full_768x1024:  { width: 768,   height: 1024 },
    full_1024x768:  { width: 1024,  height: 768  },
    full_800x1280:  { width: 800,   height: 1280 },
    small:              { width: 120,   height: 20   },
    large:              { width: 216,   height: 36   },
    medium:             { width: 168,   height: 68   }
};

function sizeForDimension(dimension) {
    var size = {};
    if (dimension == "mma") {
        size.width = "300px";
        size.height = "50px";
    } else if (dimension == "medrect") {
        size.width = "300px";
        size.height = "250px";
    } else if (dimension == "xxlarge") {
        size.width = "320px";
        size.height = "50px";
    } else if (dimension == "xlarge") {
        size.width = "300px";
        size.height = "50px";
    } else if (dimension == "sky") {
        size.width = "120px";
        size.height = "600px";
    } else if (dimension == "widesky") {
        size.width = "160px";
        size.height = "600px";
    } else if (dimension == "leader") {
        size.width = "728px";
        size.height = "90px";
    } else if (dimension == "full_320x480") {
        size.width = "320px";
        size.height = "480px";
    } else if (dimension == "full_480x320") {
        size.width = "480px";
        size.height = "320px";
    } else if (dimension == "full_640x960") {
        size.width = "640px";
        size.height = "960px";
    } else if (dimension == "full_960x640") {
        size.width = "960px";
        size.height = "640px";
    } else if (dimension == "full_1136x640") {
        size.width = "1136px";
        size.height = "640px";
    } else if (dimension == "full_768x1024") {
        size.width = "768px";
        size.height = "1024px";
    } else if (dimension == "full_1024x768") {
        size.width = "1024px";
        size.height = "768px";
    } else if (dimension == "full_800x1280") {
        size.width = "800px";
        size.height = "1280px";
    } else if (dimension == "small") {
        size.width = "120px";
        size.height = "20px";
    } else if (dimension == "large") {
        size.width = "216px";
        size.height = "36px";
    } else if (dimension == "large") {
        size.width = "216px";
        size.height = "36px";
    } else if (dimension == "medium") {
        size.width = "168px";
        size.height = "68px";
    }
    return size;
}

function sizeForDimensionSwitch(dimension) {
    var size = {};
    switch(dimension) {
        case "mma":
            size.width = "300px";
            size.height = "50px";
            break;
        case "medrect":
            size.width = "300px";
            size.height = "250px";
            break;
        case "xxlarge":
            size.width = "320px";
            size.height = "50px";
            break;
        case "xlarge":
            size.width = "300px";
            size.height = "50px";
            break;
        case "sky":
            size.width = "120px";
            size.height = "600px";
            break;
        case "widesky":
            size.width = "160px";
            size.height = "600px";
            break;
        case "leader":
            size.width = "728px";
            size.height = "90px";
            break;
        case "full_320x480":
            size.width = "320px";
            size.height = "480px";
            break;
        case "full_480x320":
            size.width = "480px";
            size.height = "320px";
            break;
        case "full_640x960":
            size.width = "640px";
            size.height = "960px";
            break;
        case "full_960x640":
            size.width = "960px";
            size.height = "640px";
            break;
        case "full_1136x640":
            size.width = "1136px";
            size.height = "640px";
            break;
        case "full_768x1024":
            size.width = "768px";
            size.height = "1024px";
            break;
        case "full_1024x768":
            size.width = "1024px";
            size.height = "768px";
            break;
        case "full_800x1280":
            size.width = "800px";
            size.height = "1280px";
            break;
        case "small":
            size.width = "120px";
            size.height = "20px";
            break;
        case "large":
            size.width = "216px";
            size.height = "36px";
            break;
        case "large":
            size.width = "216px";
            size.height = "36px";
            break;
        case "medium":
            size.width = "168px";
            size.height = "68px";
            break;  
    }
    return size;
}

// Best Case Scenario
var date = new Date();

for(var i= 0; i < 1000000; i++) {
    dimensionSize['mma'];
}

console.log('Hash BCS',new Date().getTime() - date.getTime())

var date1 = new Date();

for(var i = 0; i < 1000000; i++) {
    sizeForDimension('mma');
}

console.log('IF BCS', new Date().getTime() - date1.getTime())

for(var i = 0; i < 1000000; i++) {
    sizeForDimensionSwitch('mma');
}

console.log('Switch BCS', new Date().getTime() - date1.getTime())

// Worst Case Scenario
var date = new Date();

for(var i= 0; i < 1000000; i++) {
    dimensionSize['medium'];
}

console.log('Hash WCS', new Date().getTime() - date.getTime())

var date1 = new Date();

for(var i = 0; i < 1000000; i++) {
    sizeForDimension('medium');
}

console.log('IF WCS', new Date().getTime() - date1.getTime())

for(var i = 0; i < 1000000; i++) {
    sizeForDimensionSwitch('medium');
}

console.log('Switch WCS', new Date().getTime() - date1.getTime())

Chrome browser (node v8)

  • Best Case Scenario (lower is better)
    1. Hash 18ms
    2. IF 40ms
    3. Switch 78ms
  • Worst Case Scenario (lower is better)
    1. Hash 5ms
    2. IF 29ms
    3. Switch 55ms

I read that is also considered almost an anti pattern.

Aucun commentaire:

Enregistrer un commentaire