Xin lưu ý: OpenLiteSpeed không hỗ trợ chức năng ESI. Bạn sẽ cần LiteSpeed Web Server Enterprise hoặc LiteSpeed Web ADC để sử dụng ESI.
ESI là gì?
ESI (Edge Side Includes) là một ngôn ngữ đánh dấu (markup language) cho phép bạn chỉ định các phần của trang động (dynamic page) dưới dạng các đoạn riêng biệt sau đó được ghép lại với nhau để tạo thành toàn bộ trang. Nói một cách đơn giản hơn, ESI cho phép bạn đục lỗ (punch-holes) vào một publicly-cached và sau đó lấp đầy các lỗ đó bằng nội dung privately-cached.
Về mặt kỹ thuật bạn có thể hiểu là trong publicly-cached sẽ có các punch-holes và các punch-holes này có thể chứa được privately-cached. Vấn đề là, với ESI, các punch-holes có thể được xử lý khác với phần còn lại của trang. Chúng có thể có các TTLs khác nhau và bị xóa bởi các sự kiện hoàn toàn tách biệt với trang khách đang truy cập. Điều này cho phép bạn cache nhiều dữ liệu hơn để khẳn năng chịu tải lẫn tốc độ truy cập với số lượng trafic lớn
Public Cache vs. Private Cache
LiteSpeed Cache dựa trên thẻ (tag-based) (có nghĩa là mỗi trang được lưu trữ với một mã định danh cho phép nó được xóa khỏi bộ đệm như một phần của tập hợp con cụ thể) và có publicly-cached và privately-cached tích hợp. Trong publicly-cached, bạn sẽ tìm thấy các trang giống hệt nhau cho tất cả mọi website. Bộ nhớ cache chứa nội dung chỉ liên quan đến một người dùng cụ thể được chỉ định bởi địa chỉ IP và ID session của người dùng.
Bạn sẽ phải suy nghĩ về toàn bộ các page của trang web của mình. Page này có được publicly-cacheable? Nếu một trang có bất kỳ dữ liệu riêng tư nào, bạn phải nói là: “không, nó không thể được lưu trong publicly-cacheable”. Nếu như vậy phải lưu toàn bộ page đầy đủ dưới dạng privately-cached. Trong WordPress, người dùng không đăng nhập hầu như luôn chỉ phục vụ nội dung công khai (được lấy từ publicly-cacheable). Và trong một số ít trường truy cập vào trang web chứ các nội dung riêng tư (bài đăng được bảo vệ bằng mật khẩu, bình luận được kiểm duyệt, v.v.), nội dung đó sẽ không được cache trên hệ thống. ESI thay đổi điều này.
Làm thế nào để ESI và Public/Private Cache làm việc cùng nhau?
ESI cho phép bạn tháo rời một trang đầy đủ và xử lý các phần khác nhau.
LiteSpeed Web Server cho phép bạn lưu trữ nội dung trong public cache hoặc private cache
Kết hợp hai yếu tố này và bạn nhận được một bộ xử lý cache mạnh mẽ. Bạn nhận được một hệ thống có thể tách một trang thành các phần chung và riêng, lưu trữ từng phần một cách thích hợp và sau đó soạn lại nội dung toàn trang từ các bộ đệm có liên quan và cung cấp cho người dùng mà không cần phải chỉnh sửa trên backend (code mã nguồn).
Điều đó thật tuyệt vời.
Sự kết hợp này cho phép bạn lưu trữ nội dung cho người dùng WordPress đã đăng nhập. Khi bật ESI, bạn có thể nói, Hey Hey trang này hầu hết là công khai. Hãy lưu trữ bộ nhớ cache, đục một vài lỗ hổng trong nội dung công khai và lưu nội dung đó vào bộ đệm riêng.
Ví dụ
Chúng ta hãy xem xét một vài tình huống phổ biến và xem cách chúng diễn ra với ESI được kích hoạt và không có ESI.
Ví dụ # 1: Thanh quản trị (admin bar)
Bạn là quản trị viên trang web, bạn đã đăng nhập và bạn truy cập trang chủ của trang web.
Không có ESI : yêu cầu của bạn sẽ cần các hoạt động phía backend xử lý, bởi vì thanh quản trị ở đầu trang là nội dung riêng tư và vì vậy trang này (và mọi trang khác trên trang web của bạn, khi đã login) không thể được cung cấp cho bạn từ bộ nhớ cache.
Với ESI : hầu hết trang này được phục vụ cho bạn từ public cache , trong khi thanh quản trị được phục vụ cho bạn từ bộ đệm riêng. Không cần phải gọi PHP.
Ví dụ # 2: Widget bài viết gần đây (Recent Posts)
Bạn có một trang web lớn với nhiều nội dung tĩnh hiếm khi thay đổi. Mỗi trang đều có một thanh sidebar và widget chứa các “Bài viết gần đây”.
Không có ESI : Mỗi khi một bài đăng mới được xuất bản, mỗi page trong trang web phải được xóa để widget hiển thị dữ liệu cập nhật. Việc điền lại toàn bộ bộ đệm cần có trình thu thập thông tin để chạy hoặc phải chờ có khách truy cập truy cập tất cả các trang của trang web.
Với ESI : Tất cả các trang trong trang web có thể được lưu trong bộ nhớ cache với một TTLs lâu hơn, trong khi widget “Bài viết gần đây” là thứ duy nhất cần được thanh lọc. Nhập lại rằng một bit của bộ đệm yêu cầu chỉ một khách truy cập để yêu cầu tạo cache.
Bạn có thể thấy ESI + LSCache có thể có ý nghĩa rất lớn đối với tốc độ trang web của bạn!
Kích hoạt và cấu hình ESI
LiteSpeed Cache cho WordPress coi tất cả các full-pages là publicly-cached.
Khi bạn bật ESI, bạn cho phép đục lỗ cho public-cache để lưu các private-cache, cache này sẽ được quản lý bởi TTL (time to life) hoặc hoàn toàn không được lưu vào bộ nhớ cache.
Khi được bật, các khối ESI sau được tạo theo mặc định:
- Admin Bar
- Comments
- Comment form
- Recent Posts widget
- Recent Comments widget
Bất kỳ widget nào cũng có thể là khối ESI nếu bạn muốn. Theo mặc định, ESI bị vô hiệu hóa cho tất cả trừ hai widget được liệt kê ở trên, nhưng bạn có thể thay đổi điều đó trong WP Admin.
Lưu ý : ESI không đến mà không mất phí. Máy chủ trả lại các trang được lưu trong bộ nhớ cache đơn giản hơn nhiều so với việc nó ghép các trang từ nhiều khối khác nhau (mặc dù nó vẫn hiệu quả hơn so với việc gọi PHP), và vì vậy nó sẽ tốn nhiều tài nguyên hơn để hoạt động với tính năng này, bạn cần thử nghiệm hoạt động website của mình với trường hợp bật hoặc không bật ESI để chọn lợi ích giữa tốc độ hay giảm tài nguyên mà ESI sử dụng.
Cài đặt ESI cơ bản
Điều hướng đến Quản trị viên WP> Bộ nhớ cache LiteSpeed> Cài đặt> Cài đặt ESI . Đặt bật ESI thành “Enable”
Điều này tạo ra các khối ESI được liệt kê ở trên. Các khối sẽ vẫn không bị chặn, trừ khi bạn kích hoạt chúng thông qua cài đặt Cache Admin Bar và Cache Comment Form.
Tạo các khối ESI Widget mới
Sau khi bật tính năng ESI trên plugin LScache, bạn có thể tạo Widget sử dụng với ESI
Truy cập WP Admin > Appearance > Widgets và chọn widget mà bạn muốn biến thành 1 khối ESI
Trong khu vực cài đặt widget, bạn sẽ thấy một hộp được tô xám có tên là Lite LiteSpeed Cache. Theo mặc định, một widget không được coi là một khối ESI (trừ khi đó là Recent Posts widget hoặc Recent Comments widget, như đã đề cập ở trên). Nếu bạn muốn widget được xử lý với ESI, cần cấu hình như sau:
Widget riêng
Các nội dung sẽ được lưu trữ trong private cache, các bản sao khác nhau cho mỗi người dùng theo IP/ID session. (Ví dụ: danh sách các bài đăng được xem gần đây hoặc lời chào được cá nhân hóa.)
- Đặt bật ESI thành: PRIVATE
- Đặt Widget Cache TTL cho giá trị phù hợp với nội dung của widget.
Widget công cộng
Các nội dung sẽ được lưu trữ trong bộ nhớ cache công khai, với mỗi người dùng nhìn thấy điều tương tự chính xác. (Ví dụ: danh sách các bài đăng gần đây hoặc lịch các sự kiện sắp tới).
- Đặt bật ESI thành: PRIVATE
- Đặt Widget Cache TTL cho giá trị phù hợp với nội dung của widget.
Widget không muốn được cache
Các nội dung sẽ không được lưu trong bộ nhớ cache và sẽ được tạo động mỗi khi chúng được hiển thị trên một trang.
- Set Enable ESI là Public hoặc Private (miễn là không phải Disable).
- Đặt Cache Cache Widget thành 0
ESI và các Plugin từ bên thứ ba
ESI hỗ trợ một số khối khác thuộc về plugin của bên thứ ba. Ví dụ như WooCommerce được coi là một khối ESI riêng.
Như đã đề cập trước đó, với ESI được bật, các trang trên trang web của bạn sẽ được coi là bộ nhớ cache công khai, bởi vì ESI có thể đục lỗ các Public-cache và thêm các cache riêng tư để biến toàn trang thành cache công khai. Điều này đúng với tất cả các trang WordPress gốc và cho tất cả các trang WooCommerce. Tuy nhiên, điều đó không đúng với bbPress.
Một trang bbPress chứa rất nhiều vùng dữ liệu riêng tư, thực sự hiệu quả hơn nhiều khi coi toàn bộ trang là riêng tư.
Một lưu ý nữa là nếu website có sử dụng các plugin Page Builder dùng “Nonce” để bảo về người dùng, nếu bật ESI lên có thể sẽ có lỗi khi chỉnh sửa web thông qua builder. Bạn có thể tắt ESI để kiểm tra nếu có các lỗi liên quan đến thao tác chỉnh sửa web bằng builder nhé.
Kết luận
Như vậy là bạn đã biết thêm thêm tính năng ESI trên litespeed cache, nguyên tắc hoạt động và cách cấu hình chúng lên website Wordpres.