Tối ưu hóa việc lặp lại các thao tác nặng trong PHP
Trong bài học trước, các lần gọi hàm lặp lại thực sự chỉ tốn 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ệ 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à thực hiện trong một khoảng thời gian đủ lâu.
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ố:
<?php
function getDivisors($num) {
$result = [];
for ($i = 1; $i <= $num; $i++) {
if ($num % $i == 0) {
$result[] = $i;
}
}
return $result;
}
?>
Rõ ràng là hàm này khá "nặng". Do đó, sẽ là một ý tưởng tồi nếu viết mã như thế này:
<?php
$num = 123456;
if (array_sum(getDivisors($num)) >= 10 and array_sum(getDivisors($num)) <= 100) {
} else {
}
?>
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, sau đó sử dụng biến này ở những nơi cần thiết:
<?php
$num = 123456;
$sum = array_sum(getDivisors($num));
if ($sum >= 10 and $sum <= 100) {
} else {
}
?>
Hãy tối ưu hóa mã dưới đây:
<?php
$num = 1233456789;
if (getSumSquare($num) >= 10 and getSumSquare($num) <= 100) {
echo 'đúng';
} else {
echo 'không đúng';
}
function getSumSquare($num) {
$digits = explode('', $num);
$sum = 0;
foreach ($digits as $digit) {
$sum += $digit * $digit;
}
return $digit;
}
?>