2011-08-22 37 views
9

Tôi có thể sử dụng JavaScript để phát hiện xem trình duyệt của người dùng có hỗ trợ nội dung gzipped (phía máy khách, không phải node.js hoặc tương tự) không?JavaScript có thể phát hiện xem trình duyệt của người dùng có hỗ trợ gzip không?

Tôi đang cố gắng hỗ trợ trường hợp cạnh sau:
Có rất nhiều tệp có thể tải trên một ứng dụng web cụ thể và sẽ tốt hơn khi tải chúng theo yêu cầu khi ứng dụng chạy thay vì tải tất cả đều là ban đầu. Tôi muốn phục vụ các tệp này khỏi S3 với ngày hết hạn bộ nhớ cache trong tương lai. Kể từ S3 does not support gzipping files to clients that support it, tôi muốn lưu trữ hai phiên bản của mỗi tệp - một phiên bản bình thường và một phiên bản được nén với content-type được đặt thành application/gzip. Trình duyệt tất nhiên cần phải biết những tập tin để yêu cầu. Nếu JavaScript có thể phát hiện xem trình duyệt có hỗ trợ nội dung gzip hay không, thì trình duyệt sẽ có thể yêu cầu các tệp chính xác.

Điều này có khả thi không?

+0

Tại sao bạn sử dụng S3 để gửi tệp. Bạn nên sử dụng CLoudFront .. có. – Layke

Trả lời

15

Javascript không thể, nhưng bạn có thể sử dụng Javascript để phát hiện thời tiết hay không trình duyệt hỗ trợ nội dung gzipped.

Tôi đã nhận xét ở trên và chỉ muốn reiterrate, bạn nên sử dụng CloudFront anyway, có nội dung gzip. Nếu bạn đang sử dụng S3, thì không có lý do gì khiến bạn không muốn sử dụng CloudFront, tuy nhiên, với mục đích trả lời câu hỏi của bạn ...

Bài đăng trên blog này hoàn toàn giải quyết cách bạn phát hiện nếu trình duyệt hỗ trợ Gzip .

http://blog.kenweiner.com/2009/08/serving-gzipped-javascript-files-from.html

Dưới đây là một bản tóm tắt nhanh chóng:

1) Tạo một file đã giải nén nhỏ, gzipcheck.js.jgz, và làm cho nó có sẵn trong CloudFront. Tệp này phải chứa một dòng mã:

gzipEnabled = true; 

2) Sử dụng mã sau để tìm cách tải và chạy tệp này. Có thể bạn sẽ muốn đặt nó trong phần HEAD HTML trước bất kỳ mã Javascript nào khác.

<script type="text/javascript" src="gzipcheck.js.jgz"> 
</script> 

Nếu tệp tải, nó đặt cờ, gzipEnabled, cho biết trình duyệt có hỗ trợ gzip hay không.

+4

+1 Đó là một mẹo hay, nhưng CloudFront không gzip nội dung. Nó sẽ chỉ phục vụ nội dung gzipped nếu nguồn gốc phục vụ nội dung gzipped. – Paulpro

+2

Đây là hướng dẫn của CloudFront về việc sử dụng nội dung gzipped - và chúng không tự động phân phối nội dung được nén, URL cho phiên bản được nén phải được tạo ở phía máy khách nếu bạn đang sử dụng S3. http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/ServingCompressedFiles.html – banjomonster

4

Cloudfront không tự động gzip nội dung. Cho đến khi Amazon quyết định thực hiện nén gzip tự động trong S3 và Cloudfront thì phải sử dụng giải pháp dưới đây.

  • Ngoài phiên bản bình thường, hãy tạo phiên bản tệp đã được nén và tải lên S3. Nếu tên tệp là style.css, phiên bản gzipped phải được đặt tên là style.css.gz.
  • Thêm tiêu đề vào tệp có khóa = Content-Encoding & giá trị = gzip vào tệp. Điều này là cần thiết để các trình duyệt hiểu rằng nội dung được mã hóa bằng gzip. Có thể thêm tiêu đề bằng cách sử dụng S3 api hoặc các công cụ quản lý tệp S3 phổ biến như Cloudberry, Bucket Explorer, v.v.
  • Đồng thời thêm tiêu đề Loại nội dung chính xác cho tệp. ví dụ: đối với style.css, nó phải là Content-Type: text/css.
  • Trong trang web có tệp thông thường
  • Sử dụng javascript được đề cập ở trên để phát hiện xem trình duyệt có hỗ trợ mã hóa gzip hay không. Nếu tìm thấy đúng thì hãy thay thế tên tệp e.g style.css với style.css.gz
Các vấn đề liên quan