JavaScript'te Ağır İşlemlerin Tekrarlanmasının Optimizasyonu
Önceki derste, fonksiyonların tekrarlanan çağrıları aslında çok az zaman alıyordu ve bizim optimizasyonumuz çok fazla tasarruf sağlamıyordu. Ancak, eğer yeterince uzun süre çalışan "ağır" bir fonksiyonu birkaç kez çağırırsak, durum çok daha kötü olacaktır.
Örneğin, bir sayının bölenlerini bulan bir fonksiyonumuz olsun:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Açıkçası, bu fonksiyon oldukça "ağır". Bu nedenle, aşağıdaki gibi bir kod yazmak kötü bir fikir olur:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Elbette, "ağır" işlemi bir kez yapıp sonucu bir değişkene kaydetmek ve ardından bu değişkeni gerekli yerlerde kullanmak daha iyidir:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Aşağıda verilen kodu optimize edin:
let num = 1233456789;
if (getSumSquare(num) >= 10 && getSumSquare(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
function getSumSquare(num) {
let digits = String(num).split('');
let sum = 0;
for (let digit of digits) {
sum += digit ** 2;
}
return sum;
}