Khanh Hoang - Kenn
Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.
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 :
//Configure::write('Cache.check', true);
và thay thế bằng
Configure::write('Cache.check', true);
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"), );
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.
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()
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"); } }
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
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