Chào mừng bạn đến với phần 5 của loạt bài viết “Hướng dẫn tối ưu tăng tốc độ website nâng cao”. Trong chuyên mục này, chúng ta sẽ đào sâu vào một khía cạnh quan trọng của việc tối ưu hóa trang web để đảm bảo trải nghiệm người dùng tốt nhất và tăng cường hiệu suất toàn diện – đó là “Tối ưu Caching”.
Caching là một phần quan trọng trong chiến lược tối ưu hóa website của bạn. Nó có thể giúp giảm thời gian tải trang, giảm tải cho máy chủ, và cải thiện khả năng phản hồi tổng thể của trang web. Trong phần này, chúng ta sẽ khám phá những cách tối ưu hóa caching để đạt được mục tiêu này.
Hãy cùng nhau bắt đầu hành trình tối ưu hóa tốc độ website và nâng cao trải nghiệm người dùng.
Giới thiệu
Caching được định nghĩa tốt nhất là việc lưu trữ các yêu cầu đã được xử lý để chúng có thể được phục vụ nhanh hơn khi được yêu cầu lại. Nó được sử dụng trong mọi khía cạnh của công nghệ máy tính từ lâu, và hoàn toàn cần thiết để tăng tốc độ tải trang của bạn.
Có nhiều loại caching (trong nhiều lớp, giao thức và dịch vụ khác nhau) và nhiều cách để cấu hình chúng. Nếu cấu hình đúng, bạn sẽ có một trang web nhanh chóng giúp giảm tải cho máy chủ và tiết kiệm tiền bạc. Nhưng nếu cấu hình sai, bạn có thể có một trang web đôi khi nhanh, đôi khi chậm, hoặc có vấn đề về thiết kế và chức năng.
Nếu bạn từng nghe người khác phàn nàn về việc sử dụng cache, đó là kết hợp của họ không biết cách cấu hình cho trường hợp sử dụng của họ và/hoặc sử dụng một giải pháp caching được cấu hình để tối ưu máy chủ hơn là tốc độ.
Lựa chọn máy chủ phù hợp cho việc caching
Caching toàn trang (còn gọi là “caching tĩnh” hoặc đơn giản là “caching”) có nghĩa là xây dựng trang web toàn bộ trước, biến nó thành tĩnh như HTML để sẵn sàng phục vụ ngay lập tức khi trang web được truy cập. Không cần chờ đợi bất kỳ truy vấn cơ sở dữ liệu hoặc xử lý PHP nào… trang web chỉ đơn giản xuất hiện ngay lập tức. Giống như một chiếc bánh mì hamburger đã được làm trước khi bạn đặt hàng!
Ngày xưa, caching chỉ được thực hiện bởi máy chủ web (vì vậy được gọi là “caching máy chủ”) và được sử dụng để giảm tải máy chủ. Đó là một chiến lược để giúp máy chủ web đông đúc xử lý nhiều lưu lượng. Sau đó, có người nhận ra rằng nó cũng có thể giúp tăng tốc các trang web ngày nay có dung lượng lớn, vì vậy hiện nay, caching cũng được sử dụng từ góc độ tốc độ và triển khai ngay cả trên các máy chủ web nhỏ có lưu lượng thấp.
Các nhà phát triển thậm chí đã tạo ra các cơ chế caching ở mức phần mềm để tái tạo các lợi ích tương tự cho người dùng mà không cần truy cập máy chủ hoặc trên các máy chủ không có các mô-đun “caching máy chủ”. Tất nhiên, chúng không nhanh bằng caching máy chủ thực sự, nhưng vẫn ảnh hưởng mạnh mẽ và trong một số trường hợp thậm chí còn hữu ích hơn do có các tính năng caching bổ sung.
Phân biệt quan trọng nhất đối với người dùng thông thường là biết về giới hạn caching với từng nhà cung cấp dịch vụ lưu trữ web hoặc máy chủ web cụ thể. Liên quan đến máy chủ web…Apache, LiteSpeed và NGINX có sẵn các tùy chọn caching máy chủ khác nhau.
Liên quan đến dịch vụ lưu trữ web… hãy biết rằng một số dịch vụ lưu trữ web cho phép bạn tự do sử dụng caching máy chủ của họ hoặc bất kỳ plugin bên ngoài nào bạn muốn. Các dịch vụ lưu trữ web khác buộc bạn phải sử dụng giải pháp caching riêng của họ. Tất nhiên, họ sẽ quảng cáo nó là công nghệ cao cấp và “hiệu suất tốt nhất,” nhưng thường đó là một giải pháp caching bị cắt giảm, được xây dựng cho hiệu suất tiết kiệm tài nguyên hơn là hiệu suất mạnh mẽ. Nếu bạn cố gắng sử dụng một plugin bên ngoài, nó đơn giản không hoạt động hoặc công ty lưu trữ web sẽ tự động vô hiệu hóa nó.
- Thường thì caching từ máy chủ sẽ nhanh hơn và tiết kiệm tài nguyên hơn so với caching PHP ở mức phần mềm.
- Nếu sử dụng máy chủ LiteSpeed, bạn có thể sử dụng tích hợp sẵn của LiteSpeed server caching.
- Nếu sử dụng máy chủ NGINX, bạn có thể sử dụng caching máy chủ FastCGI tích hợp sẵn.
- Nếu sử dụng Apache (mà bạn không nên sử dụng), bạn có thể sử dụng proxy Varnish hoặc thậm chí là proxy NGINX.
- Tất cả các máy chủ web có thể sử dụng bất kỳ caching PHP cấp phần mềm nào (thông qua plugin cache). Nhưng một số plugin được thiết kế hơn cho máy chủ Apache/LiteSpeed, còn một số khác dành cho máy chủ NGINX.
Hãy cẩn thận với một số dịch vụ lưu trữ web cụ thể (đặc biệt là “dịch vụ lưu trữ quản lý”) buộc bạn phải sử dụng giải pháp caching riêng của họ và không cho phép bạn sử dụng các plugin cache khác. Hãy biết rằng máy chủ web hoặc công ty lưu trữ web mà bạn chọn sẽ ảnh hưởng đến trải nghiệm caching của bạn và những plugin caching mà bạn có thể sử dụng.
Lựa chọn đúng plugin cache
Tôi đã thử nghiệm hơn 50 plugin cache khác nhau. Những plugin tốt nhất có tính năng hữu ích, dễ sử dụng và không gây sự cố cho trang web của bạn. Nếu bạn chỉ quản lý một vài trang web, bạn có thể ưa thích các plugin tối ưu hóa mạnh mẽ với nhiều tính năng tối ưu hóa và thậm chí cả nhóm Facebook nơi mọi người chia sẻ mẹo. Nếu bạn quản lý hàng chục khách hàng, bạn sẽ ưa thích một plugin an toàn hơn với ít tính năng và ít khả năng gây sự cố.
- Các plugin cache tốt nhất (phù hợp với bất kỳ máy chủ web nào) là Swift Performance hoặc WP Rocket. Swift tối ưu mạnh mẽ hơn, Rocket ổn định hơn.
- Cũng có các plugin cache tốt khác (WP Fastest Cache, Breeze, WP Performance, Comet Cache, Borlabs).
- W3TC tệ và rất khó cấu hình. Đừng sử dụng trừ khi bạn là chuyên gia.
- Nếu sử dụng máy chủ LiteSpeed, bạn có thể sử dụng plugin LiteSpeed Cache. Đây là plugin tôi ưa thích.
- Nếu sử dụng máy chủ NGINX, bạn có thể sử dụng các plugin hỗ trợ NGINX để giữ nó đơn giản hoặc một plugin cache đầy đủ tính năng như Swift hoặc WP Rocket.
- Không nên kết hợp nhiều plugin cache với nhau!
- Tôi không thích kết hợp nhiều plugin cache với các plugin hiệu suất khác, nhưng nó có thể hoạt động nếu được cấu hình cẩn thận (và không trùng lắp chức năng).
Quyết định sử dụng plugin cache nào phụ thuộc vào tình huống sử dụng của bạn.
- Trang web nhỏ có 400 trang và ít lưu lượng truy cập? – Sử dụng Swift hoặc WP Rocket, với tính năng precaching được kích hoạt.
- Trang web trung bình có 400-1,000 trang và lưu lượng truy cập trung bình? – Có thể sử dụng plugin cache Swift/Rocket hoặc caching máy chủ LiteSpeed/NGINX. Cả hai đều có ưu điểm và nhược điểm riêng.
- Trang web lớn có 1,000 trang hoặc nhiều hơn và lưu lượng truy cập lớn? – Tôi thích sử dụng plugin LiteSpeed Cache được cấu hình tùy chỉnh hoặc caching tự nhiên của NGINX và không cần precaching vì bạn có quá nhiều lưu lượng truy cập.
Cấu hình plugin cache
Các plugin cache ngày nay phức tạp hơn bao giờ hết khi cấu hình, vì chúng thực hiện nhiều công việc hơn chỉ việc caching. Phần này chỉ tập trung vào các thiết lập liên quan đến caching. Đối với các tùy chọn khác bạn thấy trong cài đặt plugin cache, đề xuất của tôi sẽ nằm ở các phần khác trong hướng dẫn này.
- Rewrites vs PHP – hầu hết các plugin cache chỉ cung cấp cho bạn tùy chọn PHP. Nếu bạn có tùy chọn sử dụng phương thức rewrite (viết lại), hãy thử nó vì nó nhanh hơn. Nếu nó gây ra vấn đề, chuyển sang phương pháp PHP.
- Cache TTL – điều này có nghĩa là cache nên tồn tại trong bao lâu. Bạn nên thiết lập nó khoảng bằng khoảng thời gian cập nhật nội dung của bạn. Nếu bạn cập nhật hàng ngày, hãy đặt 24 giờ. Nếu bạn gần như không bao giờ cập nhật, bạn có thể đặt nó là 1 tháng.
- Cache riêng tư hoặc trang/web cho người dùng đã đăng nhập – không sử dụng trừ khi bạn thực sự có nhiều người dùng đã đăng nhập và bạn biết cách ngăn cache gây rối nội dung giữa các người dùng.
- Cache mobile riêng biệt – không sử dụng trừ khi bạn sử dụng AMP hoặc một thiết kế hoặc nội dung cụ thể chỉ xuất hiện trên thiết bị di động. Chỉ vì bạn có một trang web phản hồi cho điện thoại di động không có nghĩa là bạn cần thiết lập này.
- Caching trang 404 – có nếu bạn có nhiều người dùng truy cập chúng. Tốt hơn nếu bạn chuyển hướng tất cả chúng đến các trang thực tế.
- Cache động – tốt cho việc caching các URL với truy vấn hoặc bộ lọc, như tìm kiếm hoặc bộ lọc sản phẩm thương mại điện tử.
- Loại trừ – hoàn toàn quan trọng để loại trừ các trang không nên được cache. Thông thường, tôi loại trừ trang thanh toán, trang người dùng đã đăng nhập hoặc trang có biểu mẫu.
- Cache trình duyệt – có, bật nó.
- Kiểm soát heartbeat – thường tôi tắt nó cho tất cả các trang ngoại trừ bài viết. Hoặc nếu bạn cần nó, bạn có thể tăng khoảng thời gian gửi heartbeat lên mỗi 120 giây.
Không phải cài đặt cache hoặc plugin cache nào cũng cho phép bạn cấu hình tất cả các tùy chọn này. Đừng lo lắng nếu bạn không thấy chúng.
Cấu hình tiền cache-prebuild
Một trong những khía cạnh thường bị bỏ qua nhất trong việc caching đối với tôi là quá trình tiền xây dựng cache. Một số plugin gọi nó là “cache-preload”, những plugin khác gọi là “cache-warming” hoặc “cache-crawler”. Chức năng cache-prebuild là một cơ chế tạo trước cache cho các trang để chúng tải nhanh chóng khi được truy cập. Trong quá khứ, caching chỉ được sử dụng trên các trang web có lưu lượng lớn, vì vậy không cần thiết phải tạo trước cache. Cache được xây dựng bởi người truy cập đầu tiên và tất cả người truy cập sau này đều được hưởng lợi từ một cache đã được xây dựng sẵn. Điều này không sao vì bạn có hàng nghìn lượt truy cập và chỉ có người đầu tiên gặp may mắn xem một trang “chậm hơn”.
Nhưng trong thời đại caching ngày nay, để “người đầu tiên làm ấm cache của bạn” là một ý tưởng kém hơn rất nhiều nếu bạn có ít lưu lượng truy cập. Trên một trang web không quá đông đúc và không có việc xây dựng cache trước, có thể dường như tất cả người truy cập của bạn truy cập vào một trang lạnh (chưa được cache). FYI: người dùng truy cập vào cache lạnh sẽ thấy trang tải chậm hơn so với việc không sử dụng bất kỳ cache nào cả!
Vì vậy, chúng ta có tiến trình xây dựng cache trước. Có rất ít máy chủ cho phép hoặc có chức năng xây dựng cache toàn máy chủ. Họ có lẽ sợ người dùng lạm dụng nó. Điều này có cùng lý do mà nhiều dịch vụ lưu trữ web không cho phép bạn sử dụng các plugin kiểm tra liên kết hỏng (vì nó tiêu thụ tài nguyên quý báu).
- Máy chủ LiteSpeed có chức năng tạo trước cache tích hợp sẵn. Tuy nhiên, chỉ có một số ít dịch vụ lưu trữ web cho phép nó trên máy chủ chia sẻ. Bạn có thể chỉ có quyền truy cập nếu bạn sử dụng VPS riêng của bạn.
- Đối với bất kỳ ai không sử dụng máy chủ LiteSpeed… có nhiều cơ chế và tập lệnh xây dựng cache cấp máy chủ khác nhau, nhưng không thể nói là dễ sử dụng. Bạn có thể tìm kiếm chúng nếu bạn kiên trì. Tuy nhiên, nếu bạn sử dụng máy chủ LiteSpeed, thì việc này dễ dàng hơn nhiều.
- Tôi đã tìm thấy kịch bản xây dựng cache cấp máy chủ tốt nhất là OCP.
- Tùy chọn duy nhất (đối với hầu hết mọi người) là sử dụng một plugin cache có chức năng xây dựng cache trước tích hợp như Swift Performance và hiện nay là WP Rocket (đã sao chép ý tưởng này từ Swift).
- Xây dựng cache trước cải thiện trải nghiệm caching trên trang web của bạn rất nhiều. Bật nó nếu bạn có thể!
Có một số trường hợp bạn KHÔNG NÊN sử dụng xây dựng cache trước. Một trường hợp là khi bạn có nhiều lượt truy cập, nó không có ích bởi vì đã có lưu lượng truy cập thực tế làm ấm cache. Một trường hợp khác là khi bạn có quá nhiều trang.
Tôi nghĩ rằng ngưỡng chung là 1,000 trang. Nếu bạn có hơn 1,000 trang và bạn thường xuyên cập nhật trang web của mình, tôi khuyên bạn KHÔNG nên tạo trước cache vì máy chủ của bạn sẽ sử dụng nhiều tài nguyên và thậm chí không bao giờ hoàn thành công việc. Nếu cache của bạn bị xóa trước khi nó hoàn thành, nó sẽ bị kẹt trong một chu kỳ vô tận của việc xây dựng cache liên tục mà không bao giờ được sử dụng.
Cấu hình caching đối tượng
Caching đối tượng hữu ích cho các trang web động (dữ liệu được làm mới liên tục và/hoặc không thể được cache) hoặc bất kỳ trang web nào có nhiều số liệu/báo cáo tính toán trong giao diện quản trị. Caching đối tượng lưu trữ các truy vấn cơ sở dữ liệu trong RAM để họ không phải được tra cứu mỗi lần được truy vấn.
Bởi vì RAM quý báu (ít hơn so với không gian ổ cứng và cần thiết để chạy các chương trình), caching đối tượng thường không được phép trên nhiều gói lưu trữ chia sẻ (share host). Nó cũng phải được kích hoạt thông qua máy chủ… vì vậy nó chỉ có thể thực hiện nếu bạn có máy chủ riêng của bạn hoặc trên một gói lưu trữ cho phép caching đối tượng.
- Caching đối tượng phải được kích hoạt từ máy chủ.
- Caching đối tượng có thể được quản lý thông qua bảng điều khiển lưu trữ web hoặc plugin WordPress. (Plugin tốt hơn.)
- Tốt nhất nếu bạn có một plugin cache quản lý cả caching trang và caching đối tượng (như LiteSpeed Cache). Điều này có nghĩa rằng họ sẽ xóa cache cùng một lúc.
- Bạn có thể sử dụng thời gian hết hạn caching đối tượng từ 5 đến 10 phút để đảm bảo an toàn. Nhưng nếu nội dung của bạn không được cập nhật thường xuyên, bạn có thể tăng thời gian hết hạn lên 30-60 phút.
Tôi khuyên bạn không nên sử dụng caching đối tượng nếu bạn chỉ có một trang web tĩnh. Trong một số trường hợp, nó thậm chí còn chậm hơn so với việc sử dụng caching trang thông thường. Bật nó “chỉ để trường hợp” không giúp ích gì! Tất nhiên, bạn có thể thử nghiệm và kiểm tra bằng cách tự mình.
Các lý do hàng đầu để sử dụng caching đối tượng:
- Giao diện quản trị chậm.
- Các chức năng nặng về cơ sở dữ liệu chậm.
- Không biết nếu các trang của bạn bị chậm do truy vấn? Kiểm tra bằng Query Monitor.
Bộ nhớ cache trình duyệt còn được gọi là “htaccess expires headers”
Đây là một chiến lược phổ biến mà nhiều người dùng để dán một loạt các dòng vào tệp htaccess của họ để các tệp tĩnh được lưu trữ trong bộ nhớ cache của trình duyệt trong một thời gian dài (1 tuần, 1 tháng, hoặc thậm chí cả năm) để người dùng không cần tải chúng lại. Có lẽ nó từng quan trọng trước đây… nhưng hiện tại không còn quan trọng nữa.
- Nhiều thiết bị (như điện thoại di động) có không gian hạn chế và xóa bộ nhớ cache trình duyệt của họ khi họ muốn, không phải khi bạn muốn.
- Bộ nhớ cache trình duyệt chỉ giúp đỡ cho người truy cập trở lại, và nhiều trang web không có nhiều lưu lượng truy cập lặp lại. (Ngoài ra, chính những người truy cập mới là chúng ta quan tâm hơn để cải thiện trải nghiệm người dùng.)
- Nếu bạn muốn sử dụng bộ nhớ cache trình duyệt, nó thuận tiện hơn được thực hiện thông qua một plugin cache… thay vì sao chép và dán các lệnh dài vào tệp htaccess của bạn.
Bỏ qua chuỗi truy vấn trên trang web caching
Chuỗi truy vấn (query strings) là phần văn bản thêm vào cuối các URL để gửi thông tin đến máy chủ. Dưới đây là ví dụ về các chuỗi truy vấn và công dụng của chúng:
- search – hiển thị kết quả tìm kiếm khác nhau. (Ví dụ: search?=wordpress+tips)
- ref – cho phép trang web theo dõi người giới thiệu người dùng và lưu thông tin trong phần mềm theo dõi chuyển đổi. (Ví dụ: ref?=affiliateID)
- fbclid – cho phép trang web biết người dùng đến từ Facebook. (Ví dụ: fbclid=123ABC)
- (product) filter – hiển thị các sản phẩm khác nhau dựa trên tên, giá, kích thước hoặc các thông số kỹ thuật khác của sản phẩm. (Ví dụ: filter_size?=large)
Như bạn thấy, một số chuỗi truy vấn này thực sự thay đổi nội dung trang web trong khi các chuỗi khác hiển thị nội dung trang web giống nhau bất kể chuỗi truy vấn. Ý tưởng ở đây là loại trừ các chuỗi truy vấn (không thay đổi nội dung) khỏi việc caching để cơ chế cache của bạn không lưu trữ các truy cập đó dưới dạng một trang khác nhau. Điều này sẽ giúp máy chủ của bạn tránh được công việc không cần thiết của việc xây dựng lại cache của cùng một trang dưới một chuỗi URL khác nhau VÀ phục vụ trang web nhanh hơn cho những người truy cập từ bộ nhớ cache hiện có.
Điều này tạo ra sự khác biệt lớn đối với người truy cập đến từ các URL chuỗi truy vấn như quảng cáo Facebook, liên kết liên kết liên kết hợp tác, liên kết trong thư thông báo (với chức năng theo dõi chuyển đổi).
Caching riêng tư cho người dùng đã đăng nhập
Caching riêng tư hiếm khi được thực hành vì hầu hết các trang web không cần nó (họ không có nhiều người dùng đã đăng nhập). Caching các trang công cộng dễ dàng vì mọi người thấy cùng một trang. Caching các trang riêng tư khó khăn vì phải cache cách mà mỗi người dùng thấy trang khác nhau VÀ (tốt nhất là) không lãng phí quá nhiều không gian để lưu trữ các trang gần như giống nhau trong bộ nhớ cache lặp đi lặp lại.
- Một số trang riêng tư dễ dàng – cùng nội dung cho tất cả người dùng đã đăng nhập, nhưng có điều gì đó khác cho người dùng chưa đăng nhập.
- Một số trang riêng tư khó khăn hơn – hiển thị hầu hết nội dung giống nhau nhưng cũng có dữ liệu tùy chỉnh tùy thuộc vào người dùng (như tên/người dùng của họ).
- Các trang riêng tư khác thì phức tạp hơn – hiển thị nội dung hoàn toàn khác nhau cho mỗi người dùng.
Cách dễ nhất để xử lý các trang riêng tư là sử dụng caching đối tượng thay vì caching trang. Để tăng tính quyết liệt, bạn có thể kích hoạt caching riêng tư cẩn thận… NHƯNG hãy đảm bảo người dùng không thể xem thông tin của người khác và công chúng không thể xem nội dung riêng tư.
Có một số cơ chế như tính năng ESI của LiteSpeed, cho phép bạn hiển thị nội dung và tiện ích khác nhau tùy thuộc vào người dùng… điều này rất tốt. Nhưng cuối cùng ở mức độ này, bạn cần thuê một chuyên gia hoặc dành nhiều thời gian để cấu hình một cái gì đó không chỉ hoạt động mà còn không tiêu thụ quá nhiều tài nguyên (bộ nhớ và không gian). Caching riêng tư khá khó khăn!
Caching HTML
Đây là một công nghệ tương đối mới cho WordPress. Có một số plugin và dịch vụ có sẵn có thể cache các trang của bạn ở cạnh và sử dụng gương CDN để phục vụ chúng cho các khách hàng trên toàn thế giới. Có 3 lợi ích chính:
- Caching được thực hiện trên máy chủ của họ, không phải của bạn – giảm tải máy chủ của bạn, giúp giảm tải webhosting, giảm chi phí máy chủ, cho phép caching ngay cả khi máy chủ của bạn không có nó. Tóm lại…cho phép bạn có tốc độ nhanh ngay cả khi máy chủ webhosting/máy chủ của bạn không tốt!
- HTML được phục vụ từ CDN – truyền thống, CDN chỉ chuyển tải tài nguyên tĩnh như hình ảnh và CSS/JS. Với việc caching ở cạnh cho HTML này, họ cũng có thể phục vụ HTML từ máy chủ pop gần đó…lí thuyết làm tăng tải trang cho người truy cập ở xa máy chủ nguồn của bạn.
- Bảo vệ DDOS mạnh hơn – vì ít máy chủ của bạn được sử dụng, ít máy chủ của bạn phơi ra cuộc tấn công DDOS.
Các plugin và dịch vụ caching ở cạnh đáng chú ý:
- QUIC.cloud – từ nhà sản xuất máy chủ LiteSpeed. Dịch vụ Q.C của họ cho phép bất kỳ trang web nào cũng có thể tận hưởng sự nhanh chóng của LiteSpeed ngay cả khi họ không có máy chủ LiteSpeed.
- Shifter – được bán dưới dạng “trình tạo trang web tĩnh cho WordPress”. Dường như có trải nghiệm người dùng khác biệt so với luồng làm việc WordPress thông thường.
- WP Cloudflare Super Page Cache – cho phép bạn cache mọi thứ với gói Cloudflare miễn phí. Một số plugin trước đây đã tuyên bố làm điều này nhưng thất bại ở một cách nào đó.
Tôi không sử dụng bất kỳ dịch vụ nào trong số chúng vì tôi đã hài lòng với việc cache trên máy chủ của tôi rồi. Nhưng đối với những người sử dụng máy chủ yếu hơn, chúng có thể là các lựa chọn tốt. Hãy theo dõi phân đoạn này vì tôi chắc chắn rằng nó sẽ phát triển nhanh chóng.
Hẹn gặp các bạn ở phần tiếp theo








