Adobe ColdFusion (và Railo) biên dịch các mẫu CFML thành JVM bytecode và, nếu được cấu hình để làm như vậy, sẽ ghi các lớp đã biên dịch vào đĩa dưới dạng tệp .class. Bộ nhớ cache mẫu là một cơ chế để nói: nếu lớp đích đã được nạp, đừng bận tâm xem tệp (nguồn) trên đĩa để xem nó có cần biên dịch lại hay không - hãy tin vào những gì trong bộ nhớ.
Các cải tiến gần đây đối với ACF và Railo cho phép bạn chỉ định rằng (nguồn) tệp có thể được kiểm tra luôn (không tin cậy), một lần cho mỗi yêu cầu, không bao giờ (luôn được tin cậy).
Đó không phải là tin tức cho bất kỳ ai.
Rõ ràng ACF và Railo sẽ biên dịch bất kỳ tệp .cfm hoặc .cfc nào mà chúng được yêu cầu xử lý để chúng sẽ "kết thúc" trong bộ nhớ cache đáng tin cậy nếu được bật.
Nếu bạn cfinclude một tập tin - bất kỳ tập tin - ACF và Railo cũng sẽ biên dịch đó để bytecode JVM (và tạo một tập tin .class trên đĩa nếu cấu hình để làm như vậy). Vì một tệp được bao gồm được biên dịch, nó cũng sẽ "kết thúc" trong bộ đệm đáng tin cậy.Điều gì sẽ xảy ra nếu bạn bao gồm một tệp CSS sau đó? Nó được biên dịch sang bytecode để xuất ra toàn bộ nội dung của tệp CSS dưới dạng một chuỗi cho luồng phản hồi. Vì nó là một lớp được biên dịch, bây giờ xuất ra một chuỗi mã cứng, nếu bạn thay đổi tệp nguồn CSS và đã bật bộ đệm tin cậy, ACF và Railo sẽ tin tưởng những gì trong trình nạp lớp và không biên dịch lại nó (giả sử "kiểm tra" không bao giờ là quản trị viên cài đặt).
Bạn có thể xác minh điều này bằng cách xóa thư mục cfclasses, khởi động lại công cụ CFML và chạy mã của bạn. Bạn sẽ thấy một tệp .class xuất hiện cho tệp CSS của bạn (giả sử bạn đã lưu tệp lớp vào đĩa đã bật).
Vì vậy, cfinclude buộc biên soạn tệp "bất kỳ" và quy tắc bộ nhớ cache đáng tin cậy áp dụng cho các lớp được tải vào bộ nhớ.
Tôi không còn sử dụng ACF nữa nên tôi không thể nói chi tiết cho tệp .cfr (Railo không hỗ trợ tệp báo cáo) nhưng có nhiều khả năng phụ thuộc vào việc ACF có biên dịch tệp .cfr hay không. Cần dễ dàng xác minh (bằng cách tìm trong thư mục cfclasses).
Nguồn
2011-11-30 17:34:44
Tôi đã thêm một trường hợp khác mà tôi đã phát hiện khi nội dung có thể truy cập vào bộ đệm mẫu. Bạn có hiểu biết sâu hơn không? – nosilleg
Đã thêm làm rõ. –
Liên kết bạn cung cấp là một ví dụ về đối tượng cấp ứng dụng được lưu trong bộ nhớ cache, trong khi tiếp tục tự động thực hiện phần thân của phương thức/giả tạo của nó, mà lần lượt, là một CFINCLUDE. Điều này tương tự với * Tình huống B * của tôi ở trên. Đối tượng và phương thức được lưu trữ, nhưng phương thức tạo ra khi được gọi là không. Điều này không ảnh hưởng đến Trusted Cache, mà là một quá trình hoàn toàn riêng biệt mà CF sử dụng để kiểm tra/bỏ qua các khuôn mẫu CF để sửa đổi/biên dịch lại. –