2013-07-21 24 views
12

Tôi đang làm việc trên một ứng dụng web có kích thước vừa phải và cố gắng tìm ra giải pháp tốt nhất để làm cho tất cả trình duyệt sử dụng bộ nhớ cache và chỉ vô hiệu hóa nó khi có bản cập nhật cho nội dung đang được tải. Theo nghiên cứu tôi đã thực hiện ở đây và ở nơi khác, mọi người dường như đồng ý rằng việc thêm một? V = {version #} vào một nội dung như tệp css hoặc js là cách tuyệt vời để tự động vô hiệu hóa bộ nhớ cache khi nội dung được cập nhật. (Theo Force browser to clear cacheBetter way to prevent browser caching of JavaScript files)Thực hành tốt nhất để quản lý tất cả bộ nhớ đệm nội dung (hình ảnh, css, js, mọi thứ)

Nhưng có vẻ như giải pháp này nên được tổng quát hóa cho tất cả nội dung cư trú trên máy chủ web. Vì vậy, câu hỏi của tôi là, sẽ là một thực tế tốt để có một kịch bản xây dựng xem xét thông qua mỗi thuộc tính src = "" trên toàn bộ trang web - cho dù img, css, hoặc js, và lập trình nối thêm? = {Timestamp} nơi dấu thời gian là thời gian tệp được sửa đổi lần cuối. Bằng cách này bất cứ khi nào bạn đẩy từ dev sang dàn dựng để sản xuất, chỉ những tệp đã được sửa đổi mới có dấu thời gian đã thay đổi và trình duyệt sẽ biết làm mất hiệu lực bộ nhớ cache cho các tệp đó.

Bất kỳ sai sót nào với cách tiếp cận đó?

LƯU Ý: Suy nghĩ điều này hơn một chút, dấu thời gian chắc chắn sẽ không mong muốn trong trường hợp các thay đổi sau này được hoàn nguyên. Vì vậy, phụ thêm? = {Md5 (filecontents)} là một cách tiếp cận mạnh mẽ hơn. Tuy nhiên, câu hỏi về việc thực hiện điều này trên tất cả các tài sản và tất cả các bản xây dựng vẫn đứng vững.

+0

Câu hỏi thú vị. Nhìn về phía trước để trả lời :) – null

+0

@ajkochanowicz Đó không phải là một giải pháp chung, ngay cả khi RoR xử lý này cho bạn. Vấn đề tôi đặt ra áp dụng cho tất cả các máy chủ web và tất cả các môi trường phát triển. Một câu hỏi hay để hỏi là, làm thế nào để RoR thực hiện giải pháp riêng của mình, và nó có khái quát hóa cho tất cả các môi trường phát triển? Vì vấn đề này phổ biến như thế nào, nên có điều gì đó ở cấp độ của một giải pháp nguồn mở để giải quyết nó. –

Trả lời

5

Tìm thấy những gì tôi tin là giải pháp có thể chấp nhận được tại How to force browser to reload cached CSS/JS files? Không biết làm thế nào tôi bỏ lỡ điều này trong điều tra ban đầu của mình.

Đối với bất kỳ ai đến câu hỏi này, lưu ý tôi đang đề cập đến câu trả lời đầu tiên trên trang được liên kết tham chiếu đến plugin mod_pagespeed của Google dành cho apache. Điều này làm việc ở cấp độ máy chủ web, do đó "[nó hoạt động] với PHP, đường ray, python, HTML tĩnh - bất cứ điều gì".

Đây chính là loại giải pháp mà tôi đang tìm kiếm. Công cụ này, hoặc một cái gì đó tương tự, nên được sử dụng bởi tất cả các nhà phát triển web để giữ bộ nhớ đệm logic trực giao với chính mã.

+0

Chỉ cần làm rõ cho bất cứ ai như tôi đã tìm thấy con đường của họ ở đây, liên kết đến câu trả lời @PeterThorpe được đề cập đến là [ở đây] (http://stackoverflow.com/a/5588394/3462483) – doz87

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