Cách tốt nhất để phiên bản URL CSS và JS là gì?


26

Theo Thực tiễn tốt nhất được tăng cường nhiều lần của Yahoo để tăng tốc trang web của bạn , chúng tôi cung cấp nội dung tĩnh từ CDN bằng cách sử dụng các tiêu đề hết hạn bộ nhớ cache trong tương lai xa. Tất nhiên, đôi khi chúng tôi cần cập nhật các tệp "tĩnh" này, vì vậy chúng tôi hiện đang thêm phiên bản infix như một phần của tên tệp (dựa trên tổng SHA1 của nội dung tệp). Như vậy:

styles.min.css

Trở thành:

styles.min.abcd1234.css

Tuy nhiên, việc quản lý các tệp được phiên bản có thể trở nên tẻ nhạt và tôi đã tự hỏi liệu một ký hiệu đối số GET có thể sạch hơn và tốt hơn không:

styles.min.css?v=abcd1234

Bạn sử dụng cái nào, và tại sao? Có những cân nhắc liên quan đến trình duyệt hoặc proxy / bộ đệm mà tôi nên xem xét không?


Lý do tôi hỏi là dường như tôi nhớ lại việc nghe một lý do KHÔNG sử dụng kiểu đối số GET, nhưng tôi không thể nhớ tại sao.
David Eyk

Không sử dụng đối số GET yêu cầu phục vụ biểu định kiểu với một số loại kịch bản phía máy chủ (Và nó sẽ không còn tĩnh)?
Lotus Notes

@Lotus: Bạn có thể gửi các đối số GET và chúng sẽ bị bỏ qua trong âm thầm nếu không có gì tìm kiếm chúng.
David Eyk

Câu trả lời:


10

Theo Google Make the Web Faster , các trang có tham số truy vấn không được lưu trữ bởi nhiều proxy HTTP.

Hầu hết các proxy, đáng chú ý nhất là Squid lên đến phiên bản 3.0, không lưu trữ tài nguyên với dấu "?" trong URL của họ ngay cả khi một Cache-control: publictiêu đề có mặt trong phản hồi. Để bật bộ đệm ẩn proxy cho các tài nguyên này, hãy xóa các chuỗi truy vấn khỏi tham chiếu đến tài nguyên tĩnh và thay vào đó mã hóa các tham số vào chính tên tệp.

Vậy styles.min.abcd1234.csslà giải pháp ưa thích. Bạn có thể sử dụng một cơ chế viết lại URL thích hợp để biến styles.min.abcd1234.cssthành dễ thực hiện hơn styles.min.css?v=abcd1234trong suốt.

Nếu bạn chỉ hỗ trợ HTTPS, lời khuyên đó không được áp dụng, vì proxy thường không thể lưu các trang được lưu trong SSL.


2
Tôi tự hỏi nếu thông tin liên quan đến bộ nhớ cache chuỗi truy vấn và máy chủ proxy là một chút ngày? Tài liệu của Google không còn tham chiếu chuỗi truy vấn và máy chủ proxy trong ngữ cảnh này. Mặc dù các ví dụ vẫn liên quan đến việc thay đổi tên tệp. Squid 2.7 (2008) và 3.1 (2010) được báo cáo hỗ trợ bộ nhớ đệm chuỗi truy vấn theo mặc định và các phiên bản trước đó có thể được cấu hình để hỗ trợ điều này.
MrWhite

15

Sử dụng phiên bản kiểu GET, từ bộ đệm trống nhiều URL - ví dụ style.css?v=123style.css?v=456- sẽ trả về cùng một nội dung. Tuy nhiên tôi không thể thấy điều này sẽ có vấn đề, đặc biệt là khi bạn chỉ liên kết với một lần.

Tôi nghĩ bạn sẽ thấy kiểu GET dễ bảo trì hơn nhiều. Bạn không cần các tệp riêng biệt: chỉ cần thay đổi URL và trình duyệt sẽ tìm nạp CSS một lần nữa.

CẬP NHẬT: trong nghiên cứu sâu hơn, có vẻ như việc sử dụng chuỗi truy vấn có thể dừng trình duyệt lưu trữ các tệp. Tuy nhiên, nếu bạn đang trả lại các tiêu đề thích hợp như Expiresđây không phải là vấn đề.

CẬP NHẬT 2: câu trả lời được chấp nhận chỉ ra rằng một số proxy không lưu trữ tệp với chuỗi truy vấn. Tuy nhiên điều này dựa trên thông tin cũ; vấn đề cụ thể mà họ đề cập trong Squid đã được khắc phục 7 năm trước. Web ấn tượng đã viết tốt về điều này.


Đó là lời cảnh báo mà tôi đang cố nhớ. Cảm ơn các liên kết.
David Eyk

1

Cả hai sẽ hoạt động tốt như nhau khi một chuỗi truy vấn được coi là một phần của URL và bằng cách thay đổi nó, bạn có hiệu lực thay đổi tên của tài nguyên, do đó khiến trình duyệt tìm nạp một bản sao mới của tệp.

Tôi nói sử dụng phương pháp nào dễ dàng hơn để bạn duy trì.


0

Đây không phải là một câu trả lời cho câu hỏi trên , tôi muốn một giải pháp tốt hơn vì vậy tôi đang tự hỏi ở đây

Cả hai phương pháp sẽ yêu cầu sửa đổi các tệp trong đó các tệp css và js được tham chiếu. Vì vậy, trong thực tế, nó sẽ yêu cầu khởi động lại máy chủ ứng dụng sau khi thực hiện các thay đổi.

Có cách nào tốt hơn không, có thể xử lý phiên bản của tệp tĩnh mà không phải khởi động lại máy chủ Ứng dụng?

sau đây được loại trừ trong giải pháp

  • thay đổi tên tập tin css và js
  • vượt qua một paremeter truy vấn trong url

giải pháp cũng không ảnh hưởng đến việc thiết lập kiểm soát bộ đệm hoặc hết hạn.

cảm ơn


1
có vẻ như bạn mới ở đây Đây là một câu hỏi hay. Bạn nên đăng nó như vậy, có lẽ liên kết trở lại câu hỏi này để tham khảo. Tôi đã gắn cờ này cho sự chú ý của người điều hành để họ có thể giúp bạn.
David Eyk

như David chỉ ra, trang web này không giống như các trang diễn đàn khác. Nếu bạn có câu hỏi mới để hỏi, vui lòng nhấp vào "nút hỏi câu hỏi"
Mark Henderson

Đây là một làm rõ hữu ích. Nếu bạn thay đổi biểu định kiểu của mình, tốt nhất là giữ nguyên tên và tham chiếu giống nhau, thay vì cập nhật hàng trăm tài liệu tham khảo đến nó trên trang web.
Mark Stosberg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.