12/08/2018, 16:07

Cache Context Drupal 8 — Part 1

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 ...

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             </div>
            
            <div class=

0