Nội dung
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Với website cache đóng vai trò rất quan trọng. Bài hôm nay tôi sẽ giải thích công nghệ cache trong codeigniter dược sử dụng trong codeigniter để cải thiện tốc độ sử lý ứng dụng web. Trước khi đọc bài viết hướng dẫn này các bạn cần có kiến thức cơ bản về codeigniter và có chút kỹ năng viết code theo tiêu chuẩn trong CI.
Cache là gì?
Bạn đang thắc mắc “Là một coder và code của tôi làm việc tốt, tại sao lại cần sử dụng thêm công nghệ cache?” Oh, đây là câu hỏi dễ hiểu. Để hiểu nguyên nhân vấn đề chúng ta sẽ cần bỏ qua vấn đề codeing không quan tâm đến tính năng của một website. Có 2 yếu tố quan trọng như sau:
Hiệu xuất thực thi ứng dụng: nó là sống còn, người truy cập hay khách hàng của bạn sẽ sử dụng website đảm bảo website phải load nhanh và chắc chắn. Nếu tốc độ website chạy chậm thì quả là điều thậm tệ, một ứng dụng chạy nhanh luôn mang đến niềm vui cho những người sử dụng.
Giảm tải load server: Ngày nay website/ứng dụng web đã quá trở nên phổ biến, server phải sử lý công việc nhiều hơn. Bạn luôn nghĩ một server làm việc đủ chừng và không quá mức sẽ trở nên tốt hơn, Nếu không nó sẽ quá tải hay traffix tăng đột biến sẽ gây cho server thường xuyên rơi vào tình trạng lỗi.
Bạn có thể thiết lập cấu hình server nâng cao để sử lý vấn đề này nhưng chi phí nâng cấp cơ sở hạ tầng cao và bạn những không cần thiết sẽ lãng phí.
Cache có thể là một câu trả lời tốt cho bạn. Chúng ta sẽ xem cache sẽ giúp website codeigniter cải thiện như thế nào.
Các loại nội dung có thể áp dụng Cache?
Trong cấu trúc ứng dụng web truyền thống, có một vài nơi bạn có thể sử dụng công nghệ cache như:
- Browser caching
- View page caching
- Object caching
- Database caching
May mắn thay, Hầu hết chúng được điều khiển bởi server của bạn. Nào chúng ta cùng nhau phân tích từng cái một nhé.
Công nghệ Cache Codeigniter cho trình duyệt
Mặc định, trình duyệt web thực hiện cache kết quả cái mà bạn đang xem trên trình duyệt được tạo ra từ server. Ở đây chúng ta không thể nói browser đã cache. Thường, chúng ta không muốn trình duyệt cache mọi thứ bởi vì một số output được cập nhật thường xuyên. Vì vậy , thay vì thiết lập header cho lệnh cache này ở mọi trang, chúng ta sẽ chỉ sử dụng nó trong hàm controller ở nơi thực sự cần thiết. Bạn có thể sử dụng đoạn code dưới đây ở trong trường hợp muốn chặn cache ở trình duyệt với nội dung đó.
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate"); $this->output->set_header("Cache-Control: post-check=0, pre-check=0"); $this->output->set_header("Pragma: no-cache");
Codeigniter cache – View Page
Ok, mình giải thích một chút nhé. Bây giờ chúng ta muốn cache đầu ra/output của codeigniter là các nội dung page được người dùng truy cập. Có nghĩa là kết quả kết hợp của ‘hàm controller+view’. Nếu bạn sử dụng template engine ví dụ smarty, cũng đừng lo lắng nó vì nó sẽ có tính năng cache cho bạn. Nếu sử dụng thuần codeigniter thực hiện cache rất dễ dàng và tin cậy. Sử dụng code mẫu dưới đây trong hàm controller, nới bạn muốn thực hiện cache.
function my_controller_function() { //your controller codes goes her..... $this->output->cache(n); //n = number of minutes to cache output //your controller codes goes here.... }
Chú ý rằng, bạn có thể đặt ở mọi controller, chúng đều làm việc như nhau và sẽ cache toàn bộ tính năng của controller bạn đang sử dụng.
Tìm hiểu thêm về codeigniter web page caching.
Codeigniter cache đối tượng PHP (PHP Objects Caching)
Phần tiếp theo chúng ta học nâng cao về công nghệ cache. Codeigniter có thể tương thích với hệ thống cache ngoài, để có thể hỗ trợ cache cho những đối tượng nằm ngoài các thành phần trong codeigniter, và điều này thường phải yêu cầu hỗ trợ APC Memcache và file/disk based cache. tất cả mã cache của bạn sẽ tương tự như nhau. Thực hiện cache theo cách này rất đơn giản là cách chuyển đổi giữa cache driver.
Di chuyển ứng dụng đến server mới nơi không hỗ trợ caching?
Bạn có thể hoang mang, chúng ta sẽ làm gì ở trường hợp này. Chúng ta cần thay đổi code để loại bỏ cache? không cần thiết. Codeigniter có chế độ “Dummy Cache”. Nó thực sự không cache mọi thứ nhưng code của bạn có thể không cần thay đổi, có đúng vậy ?
Hãy xem cách cache với đối tượng PHP trong Codeigniter như sau.
function my_function() { if ( ! $cache_data = $this->cache->get('cache_key')) { //here goes your codes... $some_object = (object) NULL; $some_object->test_property = "test date"; // Save into the cache for 2 minutes $this->cache->save('cache_key', $some_object, 120); $cache_data = $some_object; } return $cache_data; }
Bất cứ khi nào hàm trên được gọi, nó sẽ trả về dữ liệu lấy từ cache, cache được lưu trong vòng 2 phút và sau đó sẽ hết hạn. Mọi thao tác sử lý trên đối tượng phức tạp sẽ lưu kết quả vào cache, đây là ý tưởng hay chứ 😀 code trên có thể sử dụng ở mọi nơi trong hàm controller, hàm model, hoặc trong thư viện, tất cả phụ thuộc vào nhu cầu của bạn. Xem thêm caching library.
Codeigniter Database Cache
Vâng, Codeigniter thực hiện rất tốt khi cache kết quả truy vấn trong database. Nó thực sự hữu ích để cache những nội dung thường xuyên được lấy từ CSDL. Nếu bạn đang sử dụng third-party ‘database abstraction layer’ chẳng hạn doctrine orm với codeigniter, thì bạn có thể an tâm và không cần lo lắng về cache vì nó đã có sẵn tính năng này. Nhưng nếu bạn sử dụng active record trong CI thì bạn có thể sử dụng công nghệ cache này để tăng thời gian sử lý ứng dụng web, ngay hôm nay:
Cách sử dụng cũng đơn giản như các chức năng khác của Codeigniter. Chúng ta chỉ cần gọi lệnh để cache kết quả khi thực hiện tương tác với database.
$this->db->cache_on(); $result1 = $this->db->query("SELECT * FROM some_table"); $this->db->select("id"); $this->db->from("some_table"); $result2 = $this->db->get();
Viết code theo chỉ dẫn chúng ta bật chế độ cache trước khi bắt đầu cache tất cả các kết quả thao tác trên database. Nếu bạn cần tắt cache ở một số lệnh thì đơn giản gọi hàm cache_off
trước khi thực hiện. Xem chi tiết tài liệu hướng dẫn database caching này.
Hi vọng thông tin trong bài viết này sẽ giúp bạn hiểu và bắt đầu cải thiện tốc độ làm việc của website ngay từ bây giờ. Chúc bạn học tốt.
Hãy cho mình biết suy nghĩ của bạn trong phần bình luận bên dưới bài viết này. Hãy theo dõi kênh chia sẻ kiến thức WordPress của Hoangweb trên Twitter và Facebook
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype