Optymalizacja powtarzających się operacji w JavaScript
Często początkujący programiści bezmyślnie wywołują tę samą funkcję wielokrotnie, marnując zasoby.
Spójrzmy na przykład. Niech będzie dany ciąg znaków zawierający pewną ścieżkę:
let path = 'img.png';
Załóżmy, że naszym zadaniem jest sprawdzenie,
czy ścieżka kończy się rozszerzeniem
.png lub .jpg. Pewien
początkujący programista napisał
następujące rozwiązanie:
let path = 'img.png';
if (path.slice(-4) === '.png' || path.slice(-4) === '.jpg') {
console.log('+++');
} else {
console.log('---');
}
Co jest nie tak z tym rozwiązaniem? Problem polega na tym,
że metoda slice jest wywoływana dwa razy,
robiąc to samo. Jest to oczywiście
nieoptymalne.
Aby zoptymalizować, należy wykonać wycięcie ciągu znaków raz, zapisać wynik w zmiennej, a następnie użyć tej zmiennej dalej:
let path = 'img.png';
let ext = path.slice(-4);
if (ext === '.png' || ext === '.jpg') {
console.log('+++');
} else {
console.log('---');
}
Zoptymalizuj poniższy kod:
let num = 123;
if (String(num)[0] === '1' || String(num)[0] === '2') {
console.log('+++');
} else {
console.log('---');
}
Zoptymalizuj poniższy kod:
let date = new Date();
if (date.getDay() === 0 || date.getDay() === 6) {
console.log('weekend');
} else {
console.log('weekday');
}
Zoptymalizuj poniższy kod:
let date = new Date();
let res;
if (date.getFullYear() >= 2020 && date.getFullYear() <= 2030) {
res = 'rok ' + date.getFullYear() + ' pasuje';
} else {
res = 'rok ' + date.getFullYear() + ' nie pasuje';
}
console.log(res)