Trước hết, tôi đang cố gắng đảm bảo sự siêng năng và không trùng lặp các câu hỏi đã được đưa ra trước đó. Có rất nhiều bài đăng trên stackexchange và nhiều nơi khác, thảo luận về bộ nhớ đệm xem và thậm chí một số chi tiết cụ thể về các loại bộ đệm xem khác nhau (ví dụ: ở đây và ở đây ). Tuy nhiên, tôi vẫn chưa tìm thấy bất kỳ chi tiết nào giải thích đầy đủ mối quan hệ giữa các lớp bộ nhớ đệm khác nhau và cách chúng có thể ảnh hưởng đến các quyết định bộ nhớ đệm theo trường hợp cụ thể. Để đơn giản, tôi cũng tập trung phạm vi của câu hỏi này vào các tùy chọn bộ đệm ngoài 7.x-3.x độc lập với các lớp khác được cung cấp trong không gian đóng góp.
Lượt xem hiển thị 2 lớp bộ đệm theo thời gian cho mỗi màn hình, bộ đệm "kết quả truy vấn" và bộ đệm "kết xuất đầu ra". Các chi tiết cụ thể về dữ liệu thô mà mỗi bộ đệm bao gồm là rõ ràng, nhưng cách chúng tương tác thì không. Tôi đặc biệt tự hỏi nếu một lần nhấn vào bộ đệm được kết xuất sẽ bỏ qua hoàn toàn họ truy vấn bộ đệm, hoặc nếu 2 lớp hoạt động riêng biệt. Tôi đã thấy một số tài liệu tham khảo yêu cầu cái trước (như cái này ), và một số cái yêu cầu cái sau (như cái này ).
Lý thuyết 1 - Các lớp bộ đệm riêng biệt
Ban đầu, tôi có ấn tượng (và hy vọng) rằng mỗi lớp được gọi riêng "theo chuỗi" và bộ đệm đầu ra được kết xuất sẽ băm kết quả truy vấn thực tế trong các hộp của nó. Bằng cách này tôi sẽ có một cách thanh lịch để cache đắt nhất sau truy vấn tải / xây dựng công trình, trong khi vẫn đảm bảo nội dung mới ngay lập tức được phản ánh trong giao diện ( "Kết quả truy vấn" cache tắt và "đầu ra trả lại" bộ nhớ cache trên ). Một số thử nghiệm nhanh cho thấy rằng điều này có thể không thực hiện được, vì bộ đệm đầu ra được kết xuất có thể không nhận thức được kết quả truy vấn hiện tại.
Lý thuyết 2 - Bộ đệm kết xuất truy vấn "bao gồm" bộ đệm kết quả truy vấn
Khả năng khác là bộ đệm kết quả được kết xuất được khóa bằng hàm băm của chính truy vấn (không phải kết quả). Nếu đây là trường hợp, một lần nhấn vào nó có thể trả về kết quả đầu ra được kết xuất trực tiếp mà không cần tham khảo bộ đệm truy vấn hoặc DB. Nếu đây là trường hợp thì tôi cho rằng sẽ không có ý nghĩa gì khi đặt bộ đệm "kết quả truy vấn" với khoảng thời gian nhỏ hơn bộ đệm "kết quả được hiển thị". Ưu điểm của khóa học là người ta có thể làm mới đầu ra được kết xuất thường xuyên hơn (nếu họ có nhiều logic chủ đề động hoặc cập nhật thực thể thường xuyên), trong khi vẫn tránh các truy vấn trực tiếp đến DB. Tuy nhiên, đối với tất cả các truy vấn chế độ xem phức tạp nhất, loại phân tách này có vẻ không thuận lợi lắm.
Tôi đã thực hiện một số thử nghiệm "hộp đen" chỉ ra lý thuyết 2, nhưng tôi không chắc liệu có một số cài đặt khác có thể đang chơi hay không nếu câu trả lời khác nhau theo phiên bản xem. Tôi cũng đã khám phá mã một chút, nhưng tôi cảm thấy bực bội vì các phương thức plugin của hầu hết các lượt xem đều không có giấy tờ và đôi khi khó theo dõi. Không có vấn đề gì, tôi nghĩ rằng câu trả lời cho điều này sẽ hữu ích khi có một tài liệu tham khảo cho người khác.