Optimasi Pengulangan Operasi Berat dalam JavaScript
Dalam pelajaran sebelumnya, pemanggilan fungsi berulang sebenarnya membutuhkan waktu yang sangat sedikit dan optimasi kita tidak akan menghemat banyak. Namun, segala sesuatu akan menjadi jauh lebih buruk jika kita beberapa kali memanggil fungsi "berat" yang dieksekusi dalam waktu yang cukup lama.
Misalnya, kita memiliki fungsi yang menemukan pembagi angka:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Jelas bahwa fungsi ini cukup "berat". Oleh karena itu, ide yang buruk adalah menulis kode seperti ini:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Tentu saja, lebih baik melakukan operasi "berat" sekali saja dan mencatat hasilnya dalam variabel, lalu menggunakan variabel ini di tempat yang dibutuhkan:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimalkan kode di bawah ini:
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;
}