Published on

Full page cache, Object cache là gì? Tăng tốc độ WordPress nhờ kết hợp cả hai

Authors

Nếu không phân biệt rõ giữa hai khái niệm này, khả năng tối ưu của trang bạn sẽ thiếu hoặc dư thừa. Tuy nhiên, đây không phải là bài viết so sánh, chọn lựa giữa 2 tùy chọn cache này mà giúp bạn có thể tối ưu website một cách tốt hơn và sử dụng hết khả năng tài nguyên của hệ thống.

Trước tiên cần hiểu rõ khái niệm giữa Full page cacheObject cache để có thể phân biệt chính xác chức năng của từng loại.


Object cache là gì?

Object cache hay Cache đối tượng hoạt động đúng như cái tên của nó, chỉ có chức năng lưu lại một đối tượng hay một phần nào đó tốn nhiều thời gian để xử lý hoặc truy vấn. Đối tượng này có thể là kết quả của một câu truy vấn MySQL tốn rất nhiều thời gian (Redis Object Cache) hay cũng có thể là một tập tin CSS, JS đã được tối ưu rồi (Autoptimize).

Khái niệm Object cache được WordPress giới thiệu và hỗ trợ sẵn với một hướng dẫn rất chi tiết:

WP_Object_Cache is WordPress' class for caching data which may be computationally expensive to regenerate, such as the result of complex database queries. The object cache is defined in wp-includes/cache.php.

WordPress.org 🔗

Ví dụ điển hình nhất của những plugin hỗ trợ object cache bao gồm Redis Object Cache hay Autoptimize. Phần được cache sẽ được lưu như tập tin trên ổ cứng (disk) hoặc trên RAM (Redis, Memcache) tùy vào mục đích sử dụng của plugin.

true

Vì chỉ lưu một số phần chính trong trang nên PHP hoặc đôi khi MySQL vẫn phải hoạt động và kết nối các thành phần này với nhau để xuất ra được một nội dung HTML đầy đủ. Và Full page cache đã xuất hiện để giải quyết vấn đề này một cách triệt để.

Ưu điểm của Object cache là giữ được nội dung website luôn ở trạng thái mới nhất mà không phải xử lý quá nhiều thành phần. Ví dụ những theme có chức năng đếm lượt xem sẽ có thể đếm một cách chính xác và cũng có thể hiển thị chính xác theo thời gian thực số lượt xem của bài viết. Ngoài ra, những thành phần khác không thay đổi như nội dung bài viết, danh sách comment đều không cần phải xử lý lại (truy vấn database) giúp giảm thời gian phản hồi của máy chủ rất nhiều.

Tuy nhiên, chính ưu điểm giữ cho nội dung trên trang luôn mới cũng chính là nhược điểm của Object cache. Mặc dù đã tiết kiệm được thời gian cho những xử lý không cần thiết, Object cache vẫn tốn một khoảng thời gian và tài nguyên cho xử lý code PHP, truy vấn MySQL để ghép tất cả các đối tượng thành một nội dung HTML hoàn chỉnh như mình đã nói.


Full page cache là gì?

Full page cache hay Cache toàn trang là một khái niệm mà plugin/webserver cache toàn bộ nội dung HTML của website để khi mà có người truy cập, máy chủ chỉ cần trả về nội dung đó mà không cần phải xử lý PHP, truy vấn database nữa. Trước đây để lấy được nội dung HTML này, các plugin vẫn phải xử lý một phần code PHP để đọc dữ liệu trên ổ cứng hoặc RAM nên vẫn chưa phải là cách tối ưu nhất. Tin tốt là giờ đây đã có những cách tối ưu hơn như sử dụng mod_rewrite để hướng dẫn Apache đọc trực tiếp tập tin HTML này luôn hoặc module ngx_srcache 🔗 của Nginx có thể đọc được trực tiếp nội dung HTML này từ Redis giúp đảm bảo 100% rằng PHP và MySQL được nghỉ ngơi hoàn toàn và chỉ được gọi lên khi thật sự cần thiết.

true


Điểm khác biệt giữa Full page cache và Object cache?

Đối với bạn đọc của blog ít tương tác như của mình đây, Full page cache luôn cho tốc độ nhanh hơn tuyệt đối nhờ việc không xử lý bất kì đoạn code PHP nào cả, chỉ việc trả về nội dung HTML thuần (ví dụ nội dung bài viết) để gửi cho người xem.

Tuy nhiên, với một số website ví dụ như trang bán hàng, diễn đàn hoặc trang quản trị admin WordPress thì việc sử dụng full page cache là không thể bởi vì những nội dung cần cập nhật liên tục. Vì vậy, lúc này Object cache có thể được sử dụng để lưu cache lại những dữ liệu sẽ được sử dụng lại nhiều lần, ví dụ như số lượng comment của mỗi bài viết trong trang danh sách bài viết, tổng số lượng bài viết, tổng số lượng comment hay số lượng hàng trong giỏ mà không cần phải đong đếm lại trong MySQL.


Nhưng nghe như... có thể dùng chung với nhau?

Chính xác! Đây là lí do chính mà mình viết bài này. Nếu như để ý kĩ vào biểu đồ phía trên chúng ta sẽ thấy việc sử dụng Object cache cũng hỗ trợ rất nhiều cho Full page cache đó.

Hãy tưởng tượng những trang sử dụng cả hai loại cache Full page và Object. Một bạn đọc truy cập vào bài viết chưa được cache Full page, WordPress chỉ cần "gom" những object lại để dựng thành một trang hoàn chỉnh.

Đối với những trang chỉ có Full page cache, WordPress sẽ phải gọi MySQL lên để lấy những dữ liệu về vì WordPress không thể tìm được object cache này ở đâu khác. Từ đó tốn thêm một bước để lấy được dữ liệu lẽ ra phải được cache sẵn và thông thường thì thời gian query dữ liệu MySQL là không ít.

true


Cách triển khai Full page cache và Object cache

Trên hosting

Đối với những bạn đang sử dụng hosting, có hai hướng tốt nhất bạn có thể dùng Object cache là Memcache và Redis. Mình cực kì không khuyến khích bạn sử dụng cache object bằng File hay ngay trong chính MySQL vì tốc độ cải thiện không đáng bao nhiêu nhưng (đối với hosting) tình trạng nghẽn cổ chai lại có thể xảy ra rất nhiều.

Hiện tại những bên cung cấp hosting lớn đều đã có hỗ trợ Memcache hoặc Redis cache. Bạn chỉ cần cài đặt những plugin tương ứng ví dụ Redis Object Cache 🔗 hoặc Memcached Object Cache 🔗 là được. Ngoài ra bạn cũng có thể tham khảo danh sách plugin Object cache được WordPress khuyên dùng 🔗 tùy vào hosting mà bạn đang dùng hỗ trợ những gì.

Trên VPS/máy chủ

Đây là môi trường tự do hơn mà bạn có thể lựa chọn những ứng dụng tốt nhất cho bạn. Tuy nhiên Tuấn cũng khuyên bạn nên sử dụng những thứ có sẵn để đỡ mất công và tốn thời gian không hợp lý. Đối với datuan.dev thì Tuấn đang sử dụng WordOps 🔗 để sử dụng Full page cache cho hiệu năng rất tốt nhờ vào việc kết hợp Redis vào cả hai phần như đã giới thiệu bên trên.