Toistuvien operaatioiden optimointi JavaScriptissä
Usein aloittelevat ohjelmoijat suorittavat huolimattomasti saman funktion kutsun useita kertoja, kuluttaen resursseja.
Katsotaanpa esimerkkiä. Oletetaan, että meillä on merkkijono, joka sisältää tietyn polun:
let path = 'img.png';
Oletetaan, että tehtävämme on tarkistaa,
päättyykö polku tunnisteeseen
.png tai .jpg. Eräs
aloitteleva ohjelmoija kirjoitti
seuraavan ratkaisun:
let path = 'img.png';
if (path.slice(-4) === '.png' || path.slice(-4) === '.jpg') {
console.log('+++');
} else {
console.log('---');
}
Mikä tässä ratkaisussa on vialla? Ongelmana on,
että metodia slice kutsutaan kahdesti,
tehden saman asian. Tämä ei tietenkään
ole optimaalista.
Optimoimiseksi on suoritettava merkkijonon leikkaus kerran, tallennettava tulos muuttujaan ja sitten käytettävä tätä muuttujaa edelleen:
let path = 'img.png';
let ext = path.slice(-4);
if (ext === '.png' || ext === '.jpg') {
console.log('+++');
} else {
console.log('---');
}
Optimoi alla oleva koodi:
let num = 123;
if (String(num)[0] === '1' || String(num)[0] === '2') {
console.log('+++');
} else {
console.log('---');
}
Optimoi alla oleva koodi:
let date = new Date();
if (date.getDay() === 0 || date.getDay() === 6) {
console.log('weekend');
} else {
console.log('weekday');
}
Optimoi alla oleva koodi:
let date = new Date();
let res;
if (date.getFullYear() >= 2020 && date.getFullYear() <= 2030) {
res = 'year ' + date.getFullYear() + ' fits';
} else {
res = 'year ' + date.getFullYear() + ' doesn't fit';
}
console.log(res)