Hướng dẫn học: Caching website với CodeIgniter

Nội dung :

  • Tại sao cần phải caching website
  • Sự khác biệt giữa caching và không caching
  • Làm thế nào để caching trong CodeIgniter

1.Tại sao cần phải caching website:

- Trước hết , bạn hiểu như thế nào là caching : Web caching là việc lưu trữ bản sao của những tài liệu web sao cho gần với người dùng, cả về mặt chức năng trong web client hoặc những web caching servers riêng biệt

- Ưu điểm :

  • Load nội dung nhanh hơn
  • Hạn chế việc truy vấn trực tiếp vào Databse

2.Sự khác biệt giữa caching và không caching

Không sử dụng caching :

  • • Kết nối MySQL Database
  • • Lấy 10 item trong database
  • • Sắp xếp nhửng Item theo thứ tự
  • • Đọc template file cho web sau đó cho việc hiển thị
  • • Trả kết quả về phía người dùng

- Nếu trong 1 thời gian ngắn có 2 lượt truy cập, thì các thực thi trên không đáng để quan tâm. Nhưng nếu khoảng 500 lượt truy cập trong 1 giờ chẳng hạng thì nó vấn đề mà chúng ta cần phải quan tâm. Liệu Server của bạn có thể đảm đương 500 x (các thực thi trên) không và có thể lượt truy cập còn hơn thế nữa

-Ở đây mình xin nói thêm “làm sao thống kê được lượt truy cập” . Các bạn có thể tìm hiểu ứng dụng miễn phí google analytics của google

Sử dụng caching :

Để làm giảm tải các truy vấn tới CSDL ta có thể sử dụng kĩ thuật Caching website.

Ví dụ :

Trong 1 ngày đó , tôi là người truy cập đầu tiên vào website : http://qhonline.info/news

Thì webserver sẽ thực thi các bước như sau :

  • • Kết nối MySQL Database
  • • Lấy 10 item trong database
  • • Sắp xếp nhửng Item theo thứ tự
  • • Đọc template file cho web sau đó cho việc hiển thị
  • • Trả kết quả về phía người dùng

Sau đó lưu nội dung hiển thị http://qhonline.info/news vào 1 file text đã được mã hóa trên webserver
Kế tiếp sau tôi là các user cũng truy cập đại chỉ : http://qhonline.info/news nhưng lần này hệ thống không truy vấn vào CSDL như các bước trên , mà nó sẽ tìm file đã được cache và đọc nó, và như thế 100 người hay 1000 người … truy cập vào http://qhonline.info/news thì cũcng chỉ đọc nội dung file cached
- Việc đọc nội dung 1 file text với việc truy vấn vào CSDL thì rõ ràng có sự khác biệt rất lớn về cách xử lý cũng như tốc độ load.

Bạn có thể xem hình mô tả bên dưới

Hướng dẫn học: Caching website với CodeIgniter

3.Làm thế nào để caching trong CodeIgniter :

- Ví dụ : tôi truy cập vào link sau : http://qhonline.info/news/bongba
Như vậy trong ứng dụng của tôi cần có

Controller : news và function bongda của Controller news

<?php
class News extends Controller { 

      function __construct(){
        parent::controller();
               //code here
               ………….
    }

        function bongda(){
         //kết nối CSDL
         //……………
         //loadview();
         }
}

- Làm sao để caching website với nội dung http://qhonline.info/news/bongba
- Bạn thêm hàm :

$this->output->cache($n) 

dưới cùng của function bongda() với n là thời gian làm mới nội dung cache được tính bằng phút
Xem có thể xem thêm userguide về hàm này tại : http://codeigniter.com/user_guide/general/caching.html
Như vậy class có caching của chúng ta bây giờ là :

<?php
class News extends Controller { 

      function __construct(){
        parent::controller();
               //code here
               ………….
    }

        function bongda(){
         //kết nối CSDL
         //……………
         //loadview();
         $this->output->cache(5) ; // thời gian làm mới là sao 5 phút nếu có lượt truy cập vào nội dung này
         }
}

Nếu bạn muốn caching toàn bộ cho controller news thì thêm đoạn code $this->output->cache() vào cuối của hàm :

function __construct(){..} 

<?php
class News extends Controller { 

      function __construct(){
        parent::controller();
               //code here
               ………….
                $this->output->cache(5) ; // thời gian làm mới là sao 5 phút nếu có lượt truy cập vào nội dung này
    }

        function bongda(){
         //kết nối CSDL
         //……………
         //loadview();
         }
}

Các file cache được lưu trong thư mục system/cache của CodeIgniter