- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Page cache là gì? Tôi có thể cải thiện tốc độ load trang web Opencart như thế nào? Điều đó sẽ luôn là câu hỏi với bạn. Trong bài viết này, chúng ta sẽ giải thích thuật ngữ Page caching và cách thực hiện sử dụng PHP. Tuy nhiên, trong phạm vi bài viết tôi sẽ không cung cấp file đính kèm, các bạn xem những đoạn code mẫu dưới đây là có thể tự làm được.
Page caching là gì?
Nếu bạn hiển thị dữ liệu động trong mỗi lần load trang web với trang có nội dung tĩnh chẳng hạn như trang chứa thông tin trong OpenCart hoặc thậm trí có thể là trang chủ bạn hãy để ý tốc độ load của nó. Page caching có thể giúp bạn giảm số lần request vào cơ sở dữ liệu. Lấy nội dung và lưu lại vào file ở lần load đầu tiên và những lần xem trang sau sẽ lấy dữ liệu từ file đã ghi lại đó gọi là cache. Nó thực sự cản thiện đáng kể tốc độ tải trang web đấy.
Lợi ích từ Caching?
Ngày nay, hầu hết các websites sử dụng hệ thống cache để giúp giảm thời gian nạp trang. Và chắc chắn có hàng trăm lợi ích với page caching mang lại.
Cache dữ liệu của bạn có thể giúp tăng tốc website, không những vậy nó còn có lợi cho SEO nữa và người dùng truy cập vào website cũng hạnh phúc hơn.
Làm thế nào để cache page?
Nếu bạn xem cấu trúc viết của OpenCart, chúng ta sẽ có thể hiểu rằng mỗi trang thông thường trong OpenCart được render sử dụng:
$this->response->setOutput($this->render());
Tìm hiểu sâu hơn, bạn sẽ tìm ra file response nằm tại system/library/response.php và tất cả các trang được điều hướng thông qua index.php
Bây giờ, chúng ta sẽ lưu kết quả HTML bởi file response.php và lưu bảo tồn chúng để sử dụng cho những lần sau.
Như vậy chúng ta sẽ cần một script để thực hiện việc caching. Tạo một script trong system/library/pagecache.php và cũng tạo thêm một folder trống (system/cache/pagecache).
Thêm vào đầu file đoạn code sau đây:
<?php define('CACHE_FOLDER', DIR_CACHE . 'pagecache/'); // Cache Folder define('CACHE_EXPIRE', '2400'); // Cache Expire in seconds define('SITE_LANGUAGE', 'en'); // Default website language define('SITE_CURRENCY', 'USD'); // Default website currency $skip_routes = array( // Skip routes to cache. We will not cache product/compare since it should be unique to all clients 'product/compare' );
Tiếp theo, chúng ta sẽ kiểm tra session có làm việc không.
if (!session_id()) { ini_set('session.use_cookies', 'On'); ini_set('session.use_trans_sid', 'Off'); session_set_cookie_params(0, '/'); session_start(); }
Xong phần cơ bản, tiếp đến chúng ta sẽ kiểm tra một điều kiện khác như không tồn tại phiên làm việc của người dùng hoặc họ đã thêm một số sản phẩm trong giỏ hàng.
if(!empty($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'GET' && (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off')) { if ((isset($_GET['route']) && !in_array($_GET['route'], $skip_routes)) || !isset($_GET['route'])) { if(empty($_SESSION['customer_id']) && empty($_SESSION['affiliate_id']) && empty($_GET['affiliate']) && empty($_SESSION['cart'])) {
Sau đó, chúng ta bắt đầu thực hiện tạo file cache vào thư mục chỉ định dành cho cache.
$domain = $_SERVER['HTTP_HOST']; $language = (empty($_SESSION['language']) || !is_string($_SESSION['language'])) ? SITE_LANGUAGE : $_SESSION['language']; $currency = (empty($_SESSION['currency']) || !is_string($_SESSION['currency'])) ? SITE_CURRENCY : $_SESSION['currency']; $url = http_build_query($_GET); $cacheFile = CACHE_FOLDER . $domain . '_' . $language . '_' . $currency . '_' . md5($url) . '.html'; define('CACHE_FILE', $cacheFile); $cacheTime = CACHE_EXPIRE;
Cuối cùng, chúng ta sẽ kiểm tra nếu file tồn tại và xuất nội dung đã lưu trong file thay vì request từ database.
if (file_exists($cacheFile) && time() - $cacheTime < filemtime($cacheFile)) { $file = gzopen($cacheFile, 'r'); $file = gzread($file, 1999999); echo $file; exit; } } } } ?>
Đó là tất cả những gì bạn hiểu về cache. Bước tiếp theo, chúng ta sẽ sửa lại file system/library/response.php để có thể lưu file. Bạn tìm hàm có chức năng sẽ gọi trong tất các file controller đó là setOutput
.
public function setOutput($output) {
Trong hàm chúng ta cần sửa lại như sau. Đầu tiên kiểm tra có tồn tại đường dẫn lưu cache files. Bằng cách xác nhận hằng CACHE_FILE
if (defined('CACHE_FILE')) {
Rồi, bạn thực hiện viết nội dung vào file.
$cacheFile = CACHE_FILE; $fp = gzopen($cacheFile, 'w9'); gzwrite($fp, $output); gzclose($fp); }
Cơ bản đã hoàn thiện, Như tôi đã nói rằng mọi trang được sử lý đều thông qua file index.php. Như vậy chúng ta chỉ cần “include” code cache trong file index.php mà tạo trước đó. Tìm dòng sau trong index.php
require_once('config.php');
Thêm vào bên dưới nó, dòng code sau:
require_once('system/library/pagecache.php');
Như vậy là xong, bạn đã hoàn thành script để cache web page! Xem toàn bộ script thực hiện công việc cache page trong OpenCart ở dưới đây:
<?php define('CACHE_FOLDER', DIR_CACHE . 'pagecache/'); // Cache Folder define('CACHE_EXPIRE', '2400'); // Cache Expire in seconds define('SITE_LANGUAGE', 'en'); // Default website language define('SITE_CURRENCY', 'USD'); // Default website currency $skip_routes = array( // Skip routes to cache 'product/compare' ); if (!session_id()) { ini_set('session.use_cookies', 'On'); ini_set('session.use_trans_sid', 'Off'); session_set_cookie_params(0, '/'); session_start(); } if(!empty($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] == 'GET' && (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off')) { if ((isset($_GET['route']) && !in_array($_GET['route'], $skip_routes)) || !isset($_GET['route'])) { if(empty($_SESSION['customer_id']) && empty($_SESSION['affiliate_id']) && empty($_GET['affiliate']) && empty($_SESSION['cart'])) { $domain = $_SERVER['HTTP_HOST']; $language = (empty($_SESSION['language']) || !is_string($_SESSION['language'])) ? SITE_LANGUAGE : $_SESSION['language']; $currency = (empty($_SESSION['currency']) || !is_string($_SESSION['currency'])) ? SITE_CURRENCY : $_SESSION['currency']; $url = http_build_query($_GET); $cacheFile = CACHE_FOLDER . $domain . '_' . $language . '_' . $currency . '_' . md5($url) . '.html'; define('CACHE_FILE', $cacheFile); $cacheTime = CACHE_EXPIRE; if (file_exists($cacheFile) && time() - $cacheTime < filemtime($cacheFile)) { $file = gzopen($cacheFile, 'r'); $file = gzread($file, 1999999); echo $file; exit; } } } } ?>
Có rất nhiều hướng dẫn tạo cache trên internet sử dụng PHP với OpenCart, bạn có thể gõ từ khóa tìm trên google ngay tại trang kết quả đầu tiên, có vô số kết quả nhưng đây là những gì bạn có thể làm tốt nhất trên OpenCart.
Kết luận
Page caching sẽ giúp bạn giảm thời gian tải trang và cải thiện thứ hạng SEO, ưu tiên hiển thị trong cỗ máy tìm kiếm như Google, Bing. Bạn có thể xem xét mua công cụ SEO cho OpenCart. Rất nhiều SEO extension cho OpenCart nhưng lưu ý hãy chọn một script tốt nhất mà bạn đã từng sử dụng.
Nếu bạn thích bài viết này, hãy ủng hộ chúng tôi bằng cách đăng ký nhận bài viết mới ở bên dưới và đừng quên chia sẻ kiến thức này với bạn bè của bạn nhé. Bạn cũng có thể theo dõi blog này trên Twitter và Facebook
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Van Troy says
Hướng dẫn cụ thể hơn chút thì mấy bạn không biết code cũng làm được rồi anh?
Hoàng Quách says
hi, mình hướng dẫn cũng chi tiết rồi mà