Categories Cache

Tạo trước cache cho website của bạn với công cụ Optimus Cache Prime (OCP)

Cách tạo trước cache cho các trang trên website của bạn bằng cách sử dụng tập lệnh nhỏ tiện dụng này.

Chú thích của Kiến càng: thông thường cache của trang sẽ không được tạo trước, người đầu tiên truy cập vào sẽ kích hoạt việc tạo cache, tức là lượt đầu tiên này trang vẫn “động” chứ chưa “tĩnh”. Từ lượt truy cập thứ hai trở đi cache mới có sẵn đó rồi và có tốc độ truy cập cao. Có nhiều lý do để người ta không muốn tạo trước cache, trong đó chủ yếu là vì muốn hạn chế ảnh hưởng đến tài nguyên hosting gây quá tải. Ví dụ rất nhiều công ty hosting chủ động chặn tính năng tạo trước cache này. Thuật ngữ tiếng Anh của từ: tạo trước cache có mấy từ gồm: cache-warming, preload cache, prebuild cache hoặc ngắn gọn là pre-cache.

Công cụ OCP rất tốt trong mọi trường hợp mà bạn cần tạo tự động trước cache:

  • Các trang web sử dụng plugin cache mà không có chức năng tạo trước cache được tích hợp sẵn;
  • Các trang web lớn (có nhiều trang) và muốn tạo trước thường xuyên hơn;
  • Người quản trị máy chủ muốn tạo cache cho nhiều trang web;
  • Có thể có một số người trong nhóm bạn đọc ở đây bị hạn chế sử dụng bộ nhớ đệm độc quyền trên hosting đang dùng (ví dụ Kinsta, WPEngine, v.v…) chắc chắn có thể sử dụng công cụ này để tạo trước cache cho trang web.

Yêu cầu duy nhất là bạn phải có quyền truy cập máy chủ (để chạy lệnh SSH) hoặc cron job và trang web của bạn có sitemap XML.


Optimus Cache Prime (được viết bởi tác giả Patrick Mylund Nielson)

Trước khi bắt đầu, chúng ta hãy gửi lời cảm ơn đặc biệt đến Patrick vì anh đã viết kịch bản tuyệt vời này từ nhiều năm trước. Tôi cũng gửi lời cảm ơn đặc biệt đến Fabio Tielen từ trang codeagency.be vì đã trả lời nhiều câu hỏi mà người mới (n00b) như tôi hay thắc mắc.

Về cơ bản OCP thu thập thông tin tất cả các trang trong sitemap XML của bạn để tạo trước trang cache cho website. Điều này giúp tránh hiệu ứng “uncache hit” chậm trễ trên các trang web không có chức năng tạo trước cache hoặc các trang có quá nhiều trang để có thể tạo trước đủ nhanh.

Cài đặt và kiểm tra OCP:

  • Tải xuống OCP từ địa chỉ patrickmn.com/projects/ocp/
  • Giải nén trên máy chủ của bạn. (Có thể là thư mục gốc cho các máy chủ tự quản lý và thư mục người dùng cho các máy chủ dùng chung.);
  • Kiểm tra nó /path/to/ocp -v https://yoursite.com/sitemap.xml và xem đầu ra có chính xác không;
  • Nếu mọi thứ đúng, bạn có thể đặt một cron job cho nó /path/to/ocp https://yoursite.com/sitemap.xml
  • Nếu bạn tò mò, hãy thử tail -f /var/log/cron xem nó có chạy không.

Tôi đang sử dụng CentOS 7, WHM / cPanel. Fabio thì dùng Ubuntu và sử dụng một lệnh gì đó tương tự thế này: cd /var/www/ocp/; ./ocp -v=true https://yoursite.com/sitemap.xml nhưng tôi thấy điều này không nhất thiết phải thực hiện theo cách đó. PS của người dịch: webserver của tôi cũng cài trên Ubuntu nên câu lệnh của Fibio mới chạy được.

FYI (bạn chú ý): các lệnh trên chỉ có thể thực hiện được đối với những người có quyền truy cập SSH vào máy chủ. Nếu bạn không có quyền truy cập SSH, bạn vẫn có thể sử dụng tập lệnh này như một dạng cron job.

Chạy OCP dưới dạng cron job:

Chắc chắn, bạn có thể chỉ cần lệnh cron ở trên nhưng nó không được khuyến khích cho các trang web lớn không hoàn thành tạo trước cache trước cron interval kế tiếp. Tôi thích kiểm tra 5 hoặc 10 phút một lần nhưng một số trang web có thể mất một giờ hoặc hơn để tạo trước cache, điều đó có nghĩa là bạn có nguy cơ nhiều công việc cron đánh cùng một tập lệnh.

Vì vậy, để giải quyết vấn đề này, chúng tôi sử dụng one.sh (một tập lệnh nhỏ gọn gàng khác cũng của Patrick). Nó sẽ chạy các lệnh nhưng trước tiên sẽ kiểm tra để đảm bảo rằng lệnh tương tự chưa chạy trước đó… điều này lý tưởng để kích hoạt chạy cron thường xuyên mà không có nguy cơ thực thi nhiều lần. Nó rất tiện dụng không chỉ cho OCP mà còn cả các tập lệnh khác.

  • Bạn tải xuống one.sh từ patrickmn.com/projects/one/
  • Giải nén trên máy chủ của bạn. (Tôi thích đặt nó trong cùng một thư mục với OCP.)
  • Đặt một công việc cron cho /path/to/one.sh /path/to/ocp https://yoursite.com/sitemap.xml

Các mẹo khác:

  • Nếu tập lệnh của bạn không chạy, hãy kiểm tra lại để đảm bảo rằng bạn có đúng đường dẫn và có quyền thích hợp (755) hay không;
  • Bạn nên đọc tài liệu để xem các lệnh khác nhau có sẵn (bạn có thể tham khảo bản lược dịch liệt kê một số lệnh ở đây);
  • Tôi đã liệt kê các lệnh sử dụng đường dẫn miền HTTPS để làm cho hướng dẫn này dễ dàng hơn cho những người không sử dụng hệ điều hành Linux, nhưng các trang web lớn nên sử dụng đường dẫn tệp cục bộ (“/path/to/sitemap.xml”) để có hiệu suất tốt hơn vì nó không cần phải tra cứu DNS và tạo kết nối HTTPS;
  • Để tránh tải máy chủ lên quá cao, hãy sử dụng tùy chọn -c để giới hạn số lượng trang được thu thập thông tin cùng một lúc. Nó sẽ trông giống như thế ocp -c 5 https://yoursite.com/sitemap.xml có nghĩa là 5 trang cùng một lúc;
  • Hãy suy nghĩ về việc chạy cron dưới dạng root.

Câu lệnh tiện dùng

(phần này là chú thích thêm của Kiến càng)

Tôi để thư mục OCP đã giải nén cùng cấp với thư mục public_html.

Tiếp đến tôi gõ lệnh sau để vào thư mục OCP sau khi đăng nhập vào tài khoản root:

cd /home/ten-mien-cua-ban.com/ocp

Sau đó tôi gõ lệnh sau để OCP quét trang:

./ocp -v=true -c 10 https://ten-mien-cua-ban.com/sitemap_index.xml

PS: sitemap_index.xml là định dạng sitemap do Yoast SEO tạo.


Cách kiểm tra xem bạn đã làm được hay chưa?

Đầu tiên bạn xoá hết cache trang. Lúc này vì trang của bạn chưa preload cache nên bất cứ ai vào, nó sẽ phải tạo lại cache làm cho người truy cập đầu tiên chậm hơn. Sau khi bạn chạy xong OCP, bạn mở mã nguồn vài bài đăng bất kỳ mà OCP đã quét (tốt nhất là bài nào đó đã viết từ lâu & ít người truy cập). Nếu bạn thấy nó tạo được cache trước thời điểm OCP quét xong nghĩa là bạn đã làm chính xác.

(Biên tập từ bài viết Cache warming with Optimus Cache Prime (OCP) của Johnny Nguyen)

Back to Top