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:
javascriptlet path = 'img.png';
Oletetaan, että tehtävämme on tarkistaa,
päättyykö polku tunnisteeseen
.png tai .jpg. Eräs
aloitteleva ohjelmoija kirjoitti
seuraavan ratkaisun:
javascriptlet 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:
javascriptlet path = 'img.png';
let ext = path.slice(-4);
if (ext === '.png' || ext === '.jpg') {
console.log('+++');
} else {
console.log('---');
}
Задание 1
Optimoi alla oleva koodi:
javascriptlet num = 123;
if (String(num)[0] === '1' || String(num)[0] === '2') {
console.log('+++');
} else {
console.log('---');
}
Задание 2
Optimoi alla oleva koodi:
javascriptlet date = new Date();
if (date.getDay() === 0 || date.getDay() === 6) {
console.log('weekend');
} else {
console.log('weekday');
}
Задание 3
Optimoi alla oleva koodi:
javascriptlet 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)