2010-05-02 38 views
9

Lý do duy nhất tôi có thể nghĩ là tính toán ETag có thể tốn kém. Nếu các trang thay đổi rất nhanh, bộ nhớ cache của trình duyệt có thể bị vô hiệu bởi ETag. Trong trường hợp đó, việc tính toán ETag sẽ là một sự lãng phí thời gian. Mặt khác, đưa ra một phản ứng 304 khi có thể giảm thiểu lượng thời gian được sử dụng trong truyền dẫn. Một số hướng dẫn tốt cho thời điểm ETag có khả năng là người chiến thắng ròng khi được triển khai với số CommonMiddleware của Django?Bất kỳ lý do nào không sử dụng USE_ETAGS với CommonMiddleware ở Django?

Trả lời

-2

Tôi không hiểu tại sao bạn đang tìm kiếm lý do để không làm điều gì đó. Tuy nhiên, phân tích của bạn vẫn chưa hoàn thành: các yêu cầu có điều kiện/304 phản hồi thực sự có thể khiến ứng dụng của bạn chậm hơn đáng kể so với nếu bạn loại bỏ if-modified-since/if-none-match. server-máy chủ sao chép (ví dụ trên CDN)

C.

+4

Câu trả lời này không hữu ích vì nhiều lý do: 1) Câu thứ hai của bạn chứa một số ý tưởng có thể chia thành nhiều câu. 2) Tại sao tôi không nên tìm kiếm một lý do chính đáng để không làm điều gì đó? 3) Bạn nói rằng 304 câu trả lời có thể làm mọi thứ chậm hơn mà không giải thích lý do. Trong khi bạn đã đề cập một cái gì đó về việc không sử dụng if-modified-since (không chắc chắn cách thức này áp dụng cho ETag) và các tiêu đề if-none-match, nhưng đó không thực sự là giải thích. 4) "họ làm cho công cụ tìm kiếm hạnh phúc"? Hấp dẫn, nhưng vô cùng mơ hồ. – allyourcode

4

Như với bất kỳ cơ chế bộ nhớ đệm, bạn sẽ cần phải đánh giá thương mại-off giữa thời gian dành cho thao tác bộ nhớ cache và băng thông lưu vì điều đó.

Như bạn nói, nếu phản hồi thay đổi thường xuyên, các thẻ ETAG có thể không hữu ích. ETags là một phương pháp cho bộ nhớ đệm toàn bộ câu trả lời, vì vậy nếu phản hồi thay đổi thường không nhiều thực sự được lưu trữ. Tuy nhiên, tôi đoán rằng vì ETags đang được sử dụng phổ biến, việc triển khai trình duyệt nhanh hơn và Django có lẽ cũng đủ nhanh.

Có thể có các khu vực khác trước phản hồi có thể hưởng lợi từ bộ nhớ đệm với, ví dụ như memcached.

Một lần nữa, sẽ có ích khi thử lược tả điều này bằng dữ liệu thực của bạn thay vì khái quát "làm hoặc không sử dụng nó".

0

Có rất nhiều cách để xử lý bộ nhớ đệm, và thường là ứng dụng cụ thể, tôi đề nghị trong các kịch bản đầu tiên như thế nào bạn có thể xem xét sử dụng USE_ETAGS từ django.middleware.common.CommonMiddleware:

  1. Tách ứng dụng của bạn giữa cache và gunicorn non-cacheable trường hợp. Nối trang web với proxy ngược. Sau đó tiếp tục với,

  2. Viết mã làm mất hiệu lực bộ nhớ cache khi lưu mô hình. Bước tiếp theo,

  3. Viết phần mềm trung gian lưu vào bộ nhớ đệm tùy chỉnh của riêng bạn.

Các vấn đề liên quan