Back To Home

Name: Ngày 27: Cache trong Sitecore

🗂️ Ngày 27: Cache trong Sitecore – Hiểu đúng để tối ưu hiệu năng

Cache là một trong những yếu tố quan trọng nhất để tối ưu tốc độ Sitecore.
Sitecore có rất nhiều tầng cache khác nhau — từ HTML caching đến item caching — nếu hiểu rõ bạn sẽ dễ dàng tăng tốc trang web lên gấp 5–10 lần.


🔥 1. Tại sao Cache quan trọng trong Sitecore?

Sitecore là CMS chạy dựa trên:

  • Databases (Master, Web)

  • Rendering pipeline

  • Layout engine

  • Rule engine

  • Rendering MVC

Các quá trình này nếu không cache sẽ tốn nhiều CPU, xử lý lâu → web chậm.

Cache giúp:

✔ Giảm số query đến SQL
✔ Giảm số pipeline chạy lại
✔ Tăng tốc rendering của từng component
✔ Giảm tải cho server CD


🧱 2. Các loại Cache quan trọng trong Sitecore

Sitecore hỗ trợ nhiều tầng cache:


📌 2.1 Item Cache

Lưu các Item đã load từ database để không phải query SQL mỗi lần.

Ví dụ:
Bạn load item /sitecore/content/Home 20 lần → chỉ query SQL 1 lần.

Kiểm tra trong log:

 
ItemCache: 100 hits, 2 misses

📌 2.2 Data Cache

Lưu dữ liệu đã được xử lý sau item load, bao gồm:

  • Standard values

  • Field values đã parse

  • Layout field đã phân tích


📌 2.3 HTML Cache (Output Cache)

Loại cache quan trọng nhất để render nhanh cho khách hàng CD.

Mỗi Rendering có thể bật HTML Cache trong Rendering Properties:

 
Cacheable: True Vary By Data: True Vary By Parameters: True Vary By Device: True Vary By Login: False Vary By User: False

📝 HTML Cache lưu HTML đã render → request tiếp theo trả về ngay lập tức.


📌 2.4 ViewState Cache

Dùng với WebForms, bây giờ phần lớn Sitecore SXA/Headless không dùng nữa.


📌 2.5 Media Cache

Cache file media đã resize, crop, optimize.
File được lưu trong thư mục:

 
/App_Data/MediaCache/

📌 2.6 Prefetch Cache

Khi Sitecore khởi động, nó load các item quan trọng vào bộ nhớ để tăng tốc.


📌 2.7 OutputCache (ASP.NET MVC)

Sitecore cũng có thể dùng output caching nhưng hạn chế.


🔧 3. Cách bật HTML Cache cho Rendering

Truy cập:

 
/sitecore/layout/Renderings/[Your Rendering Item]

Hoặc trong Experience Editor:

🛠 Thiết lập:

  • ✔ Cacheable = True

  • ✔ Vary By Data = True (rất quan trọng)

  • ✔ Vary By Parameters = True (nếu component có params)

  • ✔ Vary By QueryString (nếu search)

  • ✔ Vary By Device (nếu mobile)

  • ❌ Vary By User (thường không dùng, trừ profile cá nhân)


⚠️ 4. Khi nào KHÔNG nên bật cache?

Không cache nếu:

❌ Component có dữ liệu thay đổi theo user login (cart, profile, đánh giá SP)
❌ Component hiển thị thời gian thực (giờ hệ thống, thời tiết, real-time)
❌ Component sai khi dùng chung cho nhiều người


🧩 5. Vary By — cực kỳ quan trọng

“Vary By” quyết định khi nào rendering cache được dùng lại.

Vary by Khi nào dùng
Data Component lấy datasource item
Parameters Component có rendering params
Query String Component search hoặc filter
Device Website nhiều layout mobile/desktop
Login Component chỉ hiển thị nếu login

Ví dụ 1: Component banner tĩnh

 
Cacheable = True Vary by Data = True

Ví dụ 2: Component danh sách sản phẩm

 
Cacheable = True Vary by Query String = True

Ví dụ 3: Component thông tin User

 
Cacheable = False

🚀 6. Clear Cache (CM/CD)

Admin:

 
/sitecore/admin/cache.aspx

Bạn có thể clear:

  • HTML Cache

  • Item Cache

  • Data Cache

  • Prefetch Cache

  • Media Cache

Hoặc:

 
/sitecore/admin/ControlPanel.aspx → Clear Caches

🧭 7. Cache trong Code (OutputCache MVC)

 
[OutputCache(Duration = 3600, VaryByParam = "id")] public ActionResult Banner(string id) { var item = Sitecore.Context.Database.GetItem(id); return View(item); }

📦 8. Cache Provider tuỳ chỉnh

Nếu muốn sử dụng Redis Cache cho HTML Cache:

 
<setting name="Caching.HtmlCacheProvider" value="MyProject.CustomRedisHtmlCacheProvider" />

🔍 9. Debug Cache

Kiểm tra số lượng cache hiện tại:

 
Sitecore.Caching.CacheManager.GetAllCaches()

Xem log:

 
HtmlCache hits: 12532, misses: 3

🧪 Bài tập ngày 27

✔ Bài 1

Bật cache cho một Rendering (Banner). Kiểm tra xem HTML Cache đã tạo chưa.

✔ Bài 2

Log lại thời gian render có cache vs không cache.

✔ Bài 3

Tạo một component có Vary By Parameters và test giá trị cache khác nhau.

Donald Trump

Để trở thành người chiến thắng, bạn cần biết khi nào là đủ. Đôi khi trong cuộc sống, bạn phải từ bỏ cuộc chiến và chuyển sang mục tiêu mới mang lại hiệu quả hơn

Related Post