Tối ưu hóa việc lặp lại các thao tác nặng trong JavaScript
Trong bài học trước, các lần gọi hàm lặp lại thực sự chỉ chiếm rất ít thời gian và việc tối ưu hóa của chúng ta sẽ tiết kiệm được không nhiều. Tuy nhiên, mọi thứ sẽ trở nên tồi tệ hơn nhiều nếu chúng ta thực hiện nhiều lần gọi một hàm "nặng", hàm mà mất một khoảng thời gian đáng kể để thực thi.
Giả sử, ví dụ, chúng ta có một hàm, hàm này tìm các ước số của một số:
function getDivisorsSum(num) {
let res = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res += i;
}
}
return res;
}
Rõ ràng là hàm này khá "nặng". Do đó, viết code như thế này sẽ là một ý tưởng tồi:
let num = 123456;
if (getDivisorsSum(num) >= 10 && getDivisorsSum(num) <= 100) {
console.log('+++');
} else {
console.log('---');
}
Tất nhiên, tốt hơn là thực hiện thao tác "nặng" một lần và ghi kết quả vào một biến, rồi sau đó sử dụng biến đó ở những nơi cần thiết:
let num = 123456;
let sum = getDivisorsSum(num);
if (sum >= 10 && sum <= 100) {
console.log('+++');
} else {
console.log('---');
}
Hãy tối ưu hóa đoạn code bên dưới:
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;
}