2009-08-05 24 views
9

Tôi đang tải jQuery từ google trên trang web của mình (http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js) được khai thác và gzip'd. Trong firefox, tệp jquery hiển thị dưới dạng yêu cầu 19k, nhưng Safari hiển thị nó dưới dạng yêu cầu 56k. Tôi giả định rằng Safari không chấp nhận nó như một tệp gzip'd. Thỏa thuận là gì? Nó đến từ google và tôi chắc chắn nó được cho là gzip'dsafari và gzip

+0

Hy vọng rằng, nếu các ngôi sao sắp xếp, tệp sẽ được lưu vào bộ nhớ cache sau lần đầu tiên nó được truy cập và không thực sự được truyền sau đó. – Nosredna

Trả lời

4

Chỉ cần nghĩ rằng tôi muốn thêm vào điều này trong trường hợp mọi người vấp ngã khi cùng một câu hỏi. Sau khi chơi xung quanh với các công cụ Dev nhiều hơn và xem các tiêu đề phản hồi, tôi nhận thấy rằng Content-Length thực sự hiển thị kích thước gzip'd chính xác. Tôi chỉ có thể giả định sau đó rằng nó là trong thực tế nhận được phiên bản nén thích hợp nhưng trong cửa sổ tài nguyên chính nó sẽ hiển thị kích thước không nén, và các tiêu đề hiển thị kích thước nén.

7

Có thể muốn xem this link.

Sau khi tìm hiểu kỹ hơn, tôi đã biết rằng bạn không thể gửi bản javascripts đã nén vào Safari với phần mở rộng “gz”. Phải là “jgz”

Có vẻ như vấn đề thực sự là khi Google phân phối nó dưới dạng "gz" thay vì "jgz" như Safari muốn.

+0

Điều này có thể đúng, nhưng không liên quan ở đây vì nó rõ ràng là phân phối nó dưới dạng '.js' xem xét URL brad được cung cấp. – mercator

1

tôi thấy ít nhất hai khả năng:

  • lẽ săn không gửi header HTTP cho biết: "Tôi có thể nhận được gzip"; tiêu đề đó là Accept-Encoding và giá trị của nó thường là compress, gzip
  • có thể Safari đang cho biết kích thước của dữ liệu chưa nén?

Bạn có một số loại "sniffer mạng", như wireshark(dường như có phiên bản dành cho hệ điều hành MacOS), để thực sự nhìn thấy những gì đang trải qua mạng?

+0

Đã bỏ qua một thời gian ngắn nhưng nó có một loạt lỗi khi tải và không tải lên bất kỳ giao diện mạng nào. Tôi nghĩ Eric có một điểm tốt mặc dù đó là vô cùng bực bội nếu tôi không thể sử dụng google để phục vụ các tập tin gzip'd – brad

+0

Quá xấu :-(Liên kết @Eric được đăng nói về một số loại phần mở rộng .gz hoặc .jgz; trong số URL bạn đã cung cấp: nó có phần mở rộng .js - và google không gửi dữ liệu gzipped có vẻ là một ý tưởng khá lạ, xem safari là một trình duyệt gần đây và nó sẽ giúp họ giảm chi phí băng thông ... Nếu bạn tìm thấy giải pháp, hãy cho chúng tôi biết! –

12

Tôi tìm thấy điều này: bạn KHÔNG thể sử dụng phần mở rộng '.gz' khi phân phối tệp CSS hoặc JS đã nén vào Safari. Nó biết làm thế nào để xử lý các file gziped, miễn là họ không có phần mở rộng 'gz' (nó chỉ là lạ :)

Đây là cách tôi phục vụ JS nén/file CSS để Safari:

  • sử dụng bất kỳ tiện ích mở rộng nào khác, không phải '.gz' ('.jgz', '.foo' hoặc bất kỳ hình thức nào khác)
  • đặt tiêu đề được mã hóa gzip cho các tiện ích mở rộng bạn đã chọn ('Content-encoding: gzip')
  • đặt loại MIME thích hợp: văn bản/javascript hoặc văn bản/css

tất cả các trình duyệt khác không quan tâm đến tiện ích mở rộng bạn sử dụng, miễn là bạn đặt đúng loại nội dung và mã hóa, do đó, công cụ này hoạt động trên tất cả các trình duyệt.

Tôi đã thử nghiệm thành công điều này với Safari 4.0.4 trên Windows XP SP3. Và Chrome 4, FF 3.5.5, IE8 và Opera 10.10 trên winxp, cho khả năng tương thích giữa các trình duyệt.

1

Tôi cũng đã gặp sự cố này, trong khi cố gắng tối ưu hóa thời gian tải của một trang web trên iOS7 Safari dành cho thiết bị di động.

  • Encoded = nén filesize, từ máy chủ
  • Giải mã = ​​nén filesize, địa phương
  • Chuyển = nén kích thước tập tin + tiêu đề gửi và nhận
  • Content-Length = file gửi nén, từ máy chủ

Safari đã chọn cách thực sự kỳ lạ để biểu thị các số này trong trình gỡ lỗi của chúng.

+0

Điều này rất hữu ích để biết, tôi đã tìm ra nó! Tôi cho rằng 'đã chuyển' là kích thước gzipped nhưng điều đó có vẻ không đúng, đó là kích thước không nén mà rất không trực quan . –