Trong chế độ phát triển Rails 3.1 (khi sử dụng đường ống nội dung), hình ảnh được phân phối ra khỏi nội dung/hình ảnh được phân phát với tiêu đề phản hồi "Kiểm soát bộ nhớ cache: phải xác thực lại".Bật bộ nhớ đệm hình ảnh ở chế độ phát triển trong Rails 3.1
Điều này có nghĩa là Google Chrome (và dường như chỉ Chrome) sẽ cố gắng tìm nạp lại hình ảnh nhiều lần — ngay cả trong một lần xem trang. Điều này đã dẫn đến các vấn đề khó khăn với tất cả các cách xử lý DOM thông qua JavaScript. Đến tên một vài ví dụ:
- jQuery UI Draggable đôi khi có kịch tính bù đắp từ con trỏ chuột
- Thêm hoặc loại bỏ một lớp CSS tham chiếu đến một hình ảnh sẽ nhấp nháy hoặc thay đổi kích thước trong khi yêu cầu hình ảnh (mà sẽ luôn luôn trả về một 304 chưa sửa đổi) đang được tiến hành.
- Việc đính kèm hoặc thay thế các nút HTML chứa hình ảnh sẽ kích hoạt nhiều lần tìm nạp hình ảnh hơn sẽ khiến toàn bộ các nút bên dưới chúng nhấp nháy khi Chrome chờ phản hồi 304 cho mỗi hình ảnh.
Tôi hoàn toàn có thể hiểu rằng đó là điều hợp lý để máy chủ phát triển thực hiện. Tôi thậm chí có thể hiểu rằng Chrome từ chối cache hình ảnh, ngay cả bên trong một lượt xem trang, là hoàn toàn hợp lý.
Vì vậy, có cách nào để thay đổi tiêu đề Kiểm soát bộ nhớ cache mà Rails áp dụng cho phản hồi hình ảnh trong quá trình phát triển không?
Cập nhật: như được đề xuất bởi một vài người, một câu hỏi thú vị hơn nữa là tại sao Chrome tìm nạp lại hình ảnh nhiều lần trong lần truy cập trang khi không có trình duyệt nào khác? (Và tại sao điều này không gây ra sự cố cho các nhà phát triển khác?)
Cập nhật x2: Tôi sẽ không gửi câu trả lời vì đây chỉ là giải pháp thay thế đủ cho mục đích của tôi, nhưng chúng tôi có thể giải quyết vấn đề này bằng cách biên dịch trước các tài sản và sau đó loại bỏ CSS & JS chưa hoàn chỉnh. (. Điều này đòi hỏi sprockets gỡ lỗi để được quay sang false trong development.rb
)
rake assets:precompile
cd public/assets
find . -name "*.js*" -exec rm -rf {} \;
find . -name "*.css*" -exec rm -rf {} \;
Tôi không thể nghĩ ra một cấu hình Rails cho điều này, có thể làm một số đào xung quanh cấu hình Sprockets thay thế? –