Cache Context Drupal 8 — Part 1
This post hasn't been updated for 7 years
Mở đầu
Chào mọi người! Chúng ta đều biết rằng Drupal 8 có API Cache chạy một cách khéo léo và hiệu quả hơn so với Drupal 7. Chúng ta có thể làm mất hiệu lực chính xác những gì chúng ta muốn (AFAIK) thay vì tất cả (như trong Drupal 7). Ví dụ là khi chúng ta save/update bất kỳ node nào trong Drupal 7, nó sẽ xóa tất cả các dữ liệu lưu trữ bất kể sự liên quan hay không, nhưng đó không phải là case trong Drupal 8. Cache chính xác rõ ràng trong Drupal 8 được thực hiện bằng siêu dữ liệu cache (cache-tags, max-age and cache-contexts). Chúng ta sẽ thảo luận về bối cảnh bộ nhớ cache trong bài viết này?
Tìm hiểu về Cache context
Trong dự án gần đây, tôi có cơ hội để làm việc với (thực sự thấy) bộ nhớ cache context. Tôi đã có một số kiến thức cơ bản về ngữ cảnh bộ nhớ cache và những gì tôi phát hiện ra rằng cache context vẫn là một chủ đề chưa được tiết lộ cho các nhà phát triển Drupal và vì vậy tôi nghĩ về việc viết bất cứ điều gì tôi biết về cache context.
Vậy cache context là gì? Vâng bối cảnh bộ nhớ cache là cái gì đó cho phép bộ nhớ đệm của sự thay đổi khác nhau của một cái gì đó (ví dụ nội dung hoặc kết quả của một số phức tạp, thời gian dài / tài nguyên tính toán). Cache context tương tự như HTTP-Vary (các thay đổi của bộ nhớ cache). Theo định nghĩa D.O.
“Cache contexts provide a declarative way to create context-dependent variations of something that needs to be cached.”
Những gì tôi phát hiện ra trong quá trình tra cứu cache context là một điều tổng quát. Bởi vì tổng quát có nghĩa là bất kỳ thông tin có sẵn hoặc có thể nhận được trên mọi yêu cầu như thông tin người dùng, IP, session, vv . Nếu cái gì đó không phải là toàn cầu hoặc không thể xác định trong mỗi yêu cầu, chúng tôi không thể sử dụng nó cho bối cảnh bộ nhớ cache (một lần nữa AFAIK) . Một ví dụ là thông tin nút hoặc thông tin trường nút. Chúng ta không thể có / lấy thông tin về một nút trên mọi yêu cầu và do đó không thể sử dụng nó như là bối cảnh bộ nhớ cache (một lần nữa AFAIK), mặt khác chúng ta hãy lấy ví dụ về người dùng. Chúng tôi có thông tin người dùng có sẵn trên toàn cầu (cho mỗi yêu cầu) và do đó chúng tôi có thể sử dụng nó trong cache context. Tương tự phiên, cookie, IP là một cái gì đó mà chúng tôi có trên mọi yêu cầu và do đó có thể được sử dụng cho cache context.
Bạn có thể tìm thấy danh sách ngữ cảnh cache context có sẵn ở đây
Hãy thảo luận về trường hợp sử dụng cache context. Một khách hàng muốn hiển thị vai trò của người dùng hiện tại trong một khối. Để đơn giản, chúng tôi giả định rằng một vai trò có thể được gán cho người dùng (ngoại trừ vai trò được chứng thực). Trong Drupal 7, điều này có thể được thực hiện dễ dàng. Nhưng khách hàng cũng muốn bộ nhớ đệm đúng . Đây là điều khó khắn. Trong Drupal 7, chúng tôi có cấp độ trang và bộ nhớ đệm cấp khối. Bộ nhớ đệm cấp trang chỉ hoạt động cho người dùng ẩn danh, do đó, bộ nhớ đệm cấp độ chặn là lựa chọn duy nhất của chúng tôi, nhưng vấn đề với bộ nhớ đệm cấp độ khối là nó không cung cấp biến thể. Nó sẽ cache khối cho lần truy cập đầu tiên của người dùng và hiển thị cùng một dữ liệu với người khác (không quan tâm nếu người dùng có vai trò khác nhau).
Drupal 8 có giải pháp trong xây dựng cho các vấn đề trên (cache ngữ cảnh ). Drupal 8 lõi cung cấp bối cảnh bộ nhớ cache user.roles cho phép thay đổi bộ nhớ cache dựa trên vai trò người dùng. Vì vậy, nếu người dùng có vai trò 'A' xuất hiện lần đầu tiên, khối sẽ được lưu trữ. Lần thứ hai nếu cùng / người dùng khác nhau có vai trò 'A' đến, phiên bản đã lưu trong bộ nhớ cache sẽ được phục vụ. Nếu người dùng khác có vai trò 'B' xuất hiện, thì phiên bản được lưu trữ trong bộ nhớ cache sẽ được phục vụ. Lần thứ hai đối với người dùng có vai trò 'B', phiên bản đã lưu trong bộ nhớ cache sẽ được sử dụng.
Chúng ta có thể tạo ra cache context tùy chỉnh / mới? Vâng, chúng tôi có thể. Chúng tôi sẽ tạo một cache context tuỳ chỉnh trong bài đăng tiếp theo.
Nếu bạn muốn biết thêm thông tin về cache context trong Drupal 8 vì blog này chỉ chứa những gì tôi biết, vui lòng truy cập D.O.
Tham khảo
- https://medium.com/@joshirohit100/cache-context-drupal-8-part-1-55303ec665ce
- https://www.drupal.org/docs/8/api/cache-api/cache-contexts
- https://www.drupal.org/docs/8/api/cache-api/cache-api
- https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.44
- https://api.drupal.org/api/drupal/services/8.3.x?tag=cache.context
- https://www.w3.org/Protocols/HTTP/Issues/vary-header.html
All Rights Reserved