Pengoptimuman Pengulangan Operasi Berat dalam JavaScript
Dalam pelajaran sebelumnya, panggilan berulang fungsi sebenarnya mengambil masa yang sangat sedikit dan pengoptimuman kami tidak akan menjimatkan banyak. Walau bagaimanapun, keadaan akan menjadi lebih teruk jika kita melakukan beberapa kali panggilan fungsi "berat" yang mengambil masa yang agak lama untuk dilaksanakan.
Katakan, sebagai contoh, kita mempunyai fungsi yang mencari pembahagi bagi suatu nombor:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Jelaslah, fungsi ini agak "berat". Oleh itu, adalah idea yang tidak baik untuk menulis kod seperti ini:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Sudah tentu, lebih baik untuk melaksanakan operasi "berat" sekali sahaja dan merekodkan hasilnya ke dalam pembolehubah, kemudian menggunakan pembolehubah itu di tempat-tempat yang diperlukan:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Optimumkan kod di bawah:
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;
}