Hướng dẫn tạo cache cho trang web bằng PHP

1
5164

Như các bạn đã biết, cache là phương pháp giúp làm tăng tốc độ truy cập cũng như giảm bớt gánh nặng xử lý cho server, quá trình cache được thực hiện ở client (trình duyệt) lẫn server. Về phía trình duyệt, các bạn tham khảo bài Http Caching. Hôm nay mình sẽ làm code php tạo cache cho trang web, rất đơn giản thôi nhưng hi vọng giúp bạn hiểu được phần nào.

Ý tưởng: tạo ra file html tĩnh sau khi xử lý xong, và ở lần truy xuất sau, sẽ kiểm tra và load lại file cache. Như vậy sẽ giảm tải gánh nặng cho server. Mình tạo ra file index.php chứa nội dung sau:

// thời gian lưu cache tính theo giây, 7200s = 2h
$cachetime = 200;

//File cache
$cachefile = 'cache/index.html'; 

/*----Nếu file đã được cache----*/ 
// Xuất file cache ra, với 2 điều kiện: có cache và chưa vượt quá cachetime
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
 echo "<!-- Cache da tao luc ".date('H:i', filemtime($cachefile))." -->\n"; //file cache sẽ có thêm nội dung này
 include($cachefile); //Xuất ra nội dung đã cache - file cache
 exit; //ngừng tại đây, không chạy các lệnh bên dưới.
}

/*----Nếu file chưa cache----*/
ob_start(); // Bật buffer cho output

echo "Hello world! Cache Cache";

// Lưu nội dung sau khi file php chạy xong vào file cache
$cached = fopen($cachefile, 'w');
fwrite($cached, ob_get_contents());
fclose($cached);
ob_end_flush(); // Dừng buffer, gửi nội dung đến trình duyệt

Block 1. Quy định thời gian và file cache. Ở đây file cache sẽ được lưu trong thư mục cache với tên là index.html (nhớ tạo thư mục này ngang hàng với file chứa nội dung trên nhé). Nếu chưa có hoặc quá hạn sẽ ghi đè lên file cache

// thời gian lưu cache tính theo giây, 7200s = 2h
$cachetime = 200;

//File cache
$cachefile = 'cache/index.html'; 

/*----Nếu file đã được cache----*/ 
// Xuất file cache ra, với 2 điều kiện: có cache và chưa vượt quá cachetime
if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) {
 echo "<!-- Cache da tao luc ".date('H:i', filemtime($cachefile))." -->\n"; //file cache sẽ có thêm nội dung này
 include($cachefile); //Xuất ra nội dung đã cache - file cache
 exit; //ngừng tại đây, không chạy các lệnh bên dưới.
}


 Block 2. Nếu file cache chưa được tạo, sẽ tạo mới rồi sau đó hiển thị nội dung ra trình duyệt

/*----Nếu file chưa cache----*/ 
ob_start(); // Bật buffer cho output

echo "Hello world! Cache Cache";

// Lưu nội dung sau khi file php chạy xong vào file cache
$cached = fopen($cachefile, 'w');
fwrite($cached, ob_get_contents());
fclose($cached);
ob_end_flush(); // Dừng buffer, gửi nội dung đến trình duyệt

2 hàm quan trọng trong code này là ob_start() làm nhiệm vụ bật buffer cho output và ob_get_contents() chứa những gì đã buffer. Đoạn code được cache lại chính là dòng:

echo "Hello world! Cache Cache";

Nếu như đây là một đoạn code dài, truy vấn vào database và rả về một khối html, sau đó được đưa hết vào file cache dạng html thì server sẽ đỡ vất vả biết nhường nào. Như vậy, bạn có thể tùy trường hợp mà cache những khối html hoặc toàn bộ theo mục đích của mình.

Sau khi chạy đoạn code lần đầu tiên, bạn view page source sẽ thấy:

thuvien-it.org--truoc-khi-cache

Và sau khi cache được tạo, bạn sẽ thấy:

thuvien-it.org--sau-khi-cache

Kết luận bài viết code php tạo cache cho trang web cơ bản

Đây là một ví dụ rất cơ bản, rất nhỏ về việc cache trên server. Ngoài ra, các bạn có thể thấy, việc xử lý hiển thị cache lúc này cũng do PHP đảm nhiệm, nó sẽ không nhanh bằng .htaccess, nếu bạn có dùng WP Super Cache thì sẽ thấy điều này.

Đơn giản là khi nhận được request, đoạn code .htaccess sẽ chuyển kiểm tra xem file cache có tồn tại hay không, nếu có thì nó sẽ chuyển về file cache, không thì cứ để server xử lý. Đoạn mã kiểm tra:

RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{SERVER_NAME}/$1/index.html -f
4/5 - (6 bình chọn)

1 BÌNH LUẬN

BÌNH LUẬN

Nội dung bình luận
Tên của bạn là gì?