Hướng dẫn học : Kĩ thuật Caching tăng tốc website trong CakePHP

Trước khi đọc bài này , nếu chưa rõ về thuật ngữ Caching các bạn có thể tìm hiểu trên google với từ khóa "Caching là gì" hoặc xem bài viết này để hiểu rõ hơn về thuật ngữ , xem tại đây

Trong CakePHP ta chỉ cần cấu hình và sử dụng, gồm các bước sau :

1. Vào app/config/core.php tìm

//Configure::write('Cache.check', true); 

và thay thế bằng

Configure::write('Cache.check', true); 

2. Sử dụng Caching trong 1 Controller :

Trong Controller ta khai báo biến

var $helpers = array("Cache"); 

Để Caching 1 action trong 1 Controlller ta khai báo :

var $cacheAction = array(
         'tên action'  => array('callbacks' => true, 'duration' => "thời gian cache"),
    ); 

3. Đánh dấu những phần không cần phải Cache :

Phần trình bày trên là ta Cache toàn bộ trang , sau một thời gian nhất định dữ liệu mới được cập nhật mới, nhưng đôi khi có những “khu vực nhất định” trong website chúng ta “không cần phải Cache khu vực đó″ và muốn nó luôn được cập nhật ta là như sau .

Trong file view của action trong Controller được Cache ta đánh dấu phần không cần phải Cache bằng đoạn mã

<cake:nocache>
<?php echo "This here didn't cache !" ?> // Phần không được cache
</cake:nocache>

Ví dụ một đoạn code xử lý đăng nhập trong file view không được Cache

<cake:nocache>
<?php if ($session->check('User.name')) : ?>
    Welcome, <?php echo $session->read('User.name')?>.
<?php else: ?>
    <?php echo $html->link('Login', 'users/login')?>
<?php endif; ?>
</cake:nocache>

Như ta thấy nếu đoạn code trên nếu được Cache thì khi đăng nhập thành công thì vẫn hiển thị link đăng nhập.

4. Xóa Caching :

Khi trường hợp Insert , Update hay Delete mà bạn muốn dữ liệu mới được cập nhật ngay ta dùng hàm :

Cache::clear() 

5.Ứng dụng :

Tôi có 1 Controller Books với 2 action :
- index() : hiển thị danh sách trong table Books , action này được qui định Cache trong 1 phút (tính bằng mili giây)
- view() : không cần phải Cache

Trong Controller Book của tôi như sau :

class BooksController extends  AppController{
 
    var $name = "Books";// ten cua Controller Book
 
    var $helpers = array('Cache');
 
    var $cacheAction = array(
         'index'  => array('callbacks' => true, 'duration' => 3600),
    );
 
    //-- View all Book
    function index(){
        $data = $this->Book->find("all");
        $this->set("data",$data);
    }
 
    //-- View detail item
    function view($id=NULL){
            $info = $this->Book->read(null,$id);
            $this->set("data",$info);
            $this->render("detail_view");
    }
} 

6. Ứng dụng :

Trước khi cấu hình cho Cache Controller Books, ta vào thư mục app/tmp/cache/view/ thì sẽ không thấy file được Cache , vì nội dung chưa được Cache , xem hình bên dưới

Hướng dẫn học :  Kĩ thuật Caching tăng tốc website trong CakePHP

Sau khi cấu hình Cache cho Controller Books và truy cập lại đường dẫn http://localhost/cakephp/books

Sau đó ta vào thư mục app/tmp/cache/view/ thì sẽ thấy file được Cache

Bây giờ các bạn thử tắt Mysql của server (disable) đi để không truy cập được Cơ sở dữ liệu và reload lại trang ta vẫn thấy kết quả bình thường cho đến khi hết 3600(thời gian được qui định trong đoạn mã trong Controller Book của ví dụ) giây kể từ lúc file cakephp_books.php được Cache .

Tham khảo tại : http://book.cakephp.org/view/1376/Cache

Tags: