Optimalizácia opakujúcich sa operácií v JavaScripte
Začiatoční programátori často bezmyšlienkovite volajú tú istú funkciu niekoľkokrát, čím míňajú zdroje.
Pozrime sa na príklad. Nech je daný reťazec, ktorý obsahuje nejakú cestu:
javascriptlet path = 'img.png';
Predpokladajme, že máme za úlohu skontrolovať,
či cesta končí na príponu
.png alebo .jpg. Nejaký
začiatočník programátor napísal
nasledujúce riešenie:
javascriptlet path = 'img.png';
if (path.slice(-4) === '.png' || path.slice(-4) === '.jpg') {
console.log('+++');
} else {
console.log('---');
}
Čo je zlé na tomto riešení? Problém je,
že metóda slice je volaná dvakrát,
pričom robí to isté. To, samozrejme,
nie je optimálne.
Pre optimalizáciu je potrebné vykonať odrezanie reťazca raz, uložiť výsledok do premennej a potom použiť túto premennú ďalej:
javascriptlet path = 'img.png';
let ext = path.slice(-4);
if (ext === '.png' || ext === '.jpg') {
console.log('+++');
} else {
console.log('---');
}
Задание 1
Optimalizujte nižšie uvedený kód:
javascriptlet num = 123;
if (String(num)[0] === '1' || String(num)[0] === '2') {
console.log('+++');
} else {
console.log('---');
}
Задание 2
Optimalizujte nižšie uvedený kód:
javascriptlet date = new Date();
if (date.getDay() === 0 || date.getDay() === 6) {
console.log('weekend');
} else {
console.log('weekday');
}
Задание 3
Optimalizujte nižšie uvedený kód:
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)