Cấp độ nén zipfile python

Nén là một cách đơn giản, hiệu quả để tiết kiệm băng thông và tăng tốc trang web của bạn. Tôi do dự khi đề xuất nén gzip khi tăng tốc javascript của bạn vì sự cố trong các trình duyệt cũ hơn

Nhưng đó là thế kỷ 21. Hầu hết lưu lượng truy cập của tôi đến từ các trình duyệt hiện đại và thật lòng mà nói, hầu hết người dùng của tôi đều khá am hiểu về công nghệ. Tôi không muốn làm chậm tốc độ của những người khác vì ai đó đang chạy theo IE 4. 0 trên Windows 95. Google và Yahoo sử dụng nén gzip. Cần có một trình duyệt hiện đại để tận hưởng nội dung web hiện đại và tốc độ web hiện đại — vì vậy mã hóa gzip là. Đây là cách thiết lập nó

Đợi, đợi, đợi. Tại sao chúng ta lại làm việc này?

Trước khi bắt đầu, tôi nên giải thích mã hóa nội dung là gì. Khi bạn yêu cầu một tệp như http://www.yahoo.com/index.html, trình duyệt của bạn sẽ nói chuyện với máy chủ web. Cuộc trò chuyện diễn ra một chút như thế này

Cấp độ nén zipfile python

  1. Trình duyệt. Này, BẮT tôi /index. html
  2. Người phục vụ. Ok, để tôi xem nếu chỉ số. html nằm xung quanh…
  3. Người phục vụ. Đã tìm thấy nó. Đây là mã phản hồi của bạn (200 OK) và tôi đang gửi tệp
  4. trình duyệt. 100KB?

Tất nhiên, các tiêu đề và giao thức thực tế trang trọng hơn nhiều (theo dõi chúng bằng các tiêu đề HTTP Trực tiếp nếu bạn muốn).

Nhưng nó đã hoạt động và bạn đã nhận được tệp của mình

Vậy vấn đề là gì?

Chà, hệ thống hoạt động, nhưng nó không hiệu quả lắm. 100KB là rất nhiều văn bản và thẳng thắn mà nói, HTML là dư thừa. Mỗi thẻ ,

and
có một thẻ đóng gần như giống nhau. Các từ được lặp lại trong toàn bộ tài liệu. Bất kỳ cách nào bạn cắt nó, HTML (và người anh em lực lưỡng của nó, XML .

Và kế hoạch là gì khi tệp quá lớn?

Nếu chúng ta có thể gửi một. zip vào trình duyệt (index. html. zip) thay vì chỉ mục cũ đơn giản. html, chúng tôi sẽ tiết kiệm băng thông và thời gian tải xuống. Trình duyệt có thể tải xuống tệp nén, giải nén và sau đó hiển thị cho người dùng, người đang có tâm trạng tốt vì trang được tải nhanh. Cuộc hội thoại trình duyệt-máy chủ có thể trông như thế này

Cấp độ nén zipfile python

  1. Trình duyệt. Này, tôi có thể NHẬN chỉ mục không. Html? .
  2. Người phục vụ. Để tôi tìm tập tin… yep, nó đây. Và bạn sẽ dùng một phiên bản nén?
  3. Người phục vụ. Ok, tôi đã tìm thấy chỉ mục. html (200 OK), đang nén và gửi qua
  4. trình duyệt. Tuyệt quá. Nó chỉ có 10KB. Tôi sẽ giải nén nó và hiển thị cho người dùng

Công thức rất đơn giản. Tệp nhỏ hơn = tải xuống nhanh hơn = người dùng hài lòng

Bạn không tin tôi sao? . HTML portion of the yahoo home page goes from 101kb to 15kb after compression:

Cấp độ nén zipfile python

Các chi tiết lông (không phải như vậy)

Phần khó khăn của trao đổi này là trình duyệt và máy chủ biết rằng có thể gửi tệp nén qua. Thỏa thuận có hai phần

  • Trình duyệt gửi một tiêu đề cho máy chủ biết rằng nó chấp nhận nội dung nén (gzip và deflate là hai sơ đồ nén). Accept-Encoding: gzip, deflate

  • Máy chủ gửi phản hồi nếu nội dung thực sự được nén. Content-Encoding: gzip

Nếu máy chủ không gửi tiêu đề phản hồi mã hóa nội dung, điều đó có nghĩa là tệp không được nén (mặc định trên nhiều máy chủ). Tiêu đề “Chấp nhận mã hóa” chỉ là yêu cầu của trình duyệt, không phải là yêu cầu. Nếu máy chủ không muốn gửi lại nội dung nén, trình duyệt phải thực hiện với phiên bản thông thường nặng nề

Thiết lập máy chủ

“Tin tốt” là chúng ta không thể kiểm soát trình duyệt. Nó sẽ gửi tiêu đề Accept-encoding: gzip, deflate hoặc không

Công việc của chúng tôi là định cấu hình máy chủ để nó trả về nội dung được nén nếu trình duyệt có thể xử lý, tiết kiệm băng thông cho mọi người (và mang lại cho chúng tôi người dùng hài lòng)

Đối với IS, bật tính năng nén trong cài đặt.

Trong Apache, việc bật tính năng nén đầu ra khá đơn giản. Thêm phần sau vào của bạn. tập tin htaccess

# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

# Or, compress certain file types by extension:

SetOutputFilter DEFLATE

Apache thực sự có hai tùy chọn nén

  • mod_deflate dễ cài đặt hơn và là tiêu chuẩn
  • mod_gzip có vẻ mạnh mẽ hơn. bạn có thể nén trước nội dung

Xả hơi nhanh chóng và hiệu quả, vì vậy tôi sử dụng nó; . Trong cả hai trường hợp, Apache sẽ kiểm tra xem trình duyệt có gửi tiêu đề “Chấp nhận mã hóa” hay không và trả về phiên bản nén hoặc phiên bản thông thường của tệp. Tuy nhiên, một số trình duyệt cũ hơn có thể gặp sự cố (xem thêm bên dưới) và bạn có thể thêm các lệnh đặc biệt để khắc phục sự cố này

Nếu bạn không thể thay đổi. htaccess, bạn có thể sử dụng PHP để trả về nội dung nén. Cung cấp HTML tệp của bạn. php và thêm mã này vào đầu.

Trong PHP .

Chúng tôi kiểm tra tiêu đề “Chấp nhận mã hóa” và trả về phiên bản được nén của tệp (nếu không thì là phiên bản thông thường). Điều này gần giống như xây dựng máy chủ web của riêng bạn (thú vị làm sao. ). Nhưng thực sự, hãy thử sử dụng Apache để nén đầu ra của bạn nếu bạn có thể giúp nó. Bạn không muốn nghịch ngợm với các tập tin của mình

Xác minh nén của bạn

Khi bạn đã định cấu hình máy chủ của mình, hãy kiểm tra để đảm bảo rằng bạn đang thực sự cung cấp nội dung nén

  • Trực tuyến. Sử dụng kiểm tra gzip trực tuyến để kiểm tra xem trang của bạn có được nén hay không

  • Trong trình duyệt của bạn. Trong Chrome, mở Developer Tools > Network Tab (Firefox/IE sẽ tương tự). Làm mới trang của bạn và nhấp vào dòng mạng cho chính trang đó (i. e. , www.google.com). Tiêu đề “Mã hóa nội dung. gzip” có nghĩa là nội dung đã được gửi nén

Cấp độ nén zipfile python

Nhấp vào biểu tượng “Sử dụng các hàng lớn” để biết thêm chi tiết, bao gồm kích thước truyền được nén và kích thước nội dung thực

Cấp độ nén zipfile python

Hãy chuẩn bị để ngạc nhiên trước kết quả. Trang chủ instacalc giảm từ 36k xuống 10k, giảm 75% kích thước

Hãy thử một số ví dụ

Tôi đã thiết lập một số trang và một ví dụ có thể tải xuống

  • mục lục. html – Không nén rõ ràng (trên máy chủ này, tôi đang sử dụng nén theo mặc định)
  • mục lục. htm – Được nén rõ ràng bằng Apache. htaccess sử dụng *. htm theo quy định
  • chỉ mục. php – Được nén rõ ràng bằng tiêu đề PHP header

Vui lòng tải xuống các tệp, đặt chúng trên máy chủ của bạn và điều chỉnh cài đặt

Hãy cẩn thận

Mặc dù có vẻ thú vị nhưng HTTP Tính năng nén không phải lúc nào cũng thú vị và là trò chơi. Đây là những gì cần chú ý.

  • Trình duyệt cũ hơn. Có, một số trình duyệt vẫn có thể gặp sự cố với nội dung nén (họ nói rằng họ có thể chấp nhận điều đó, nhưng thực tế là họ không thể). Nếu trang web của bạn hoàn toàn phải hoạt động với Netscape 1. 0 trên Windows 95, bạn có thể không muốn sử dụng HTTP Nén. Apache mod_deflate có một số quy tắc để tránh nén cho các trình duyệt cũ hơn.

  • Nội dung đã được nén. Hầu hết hình ảnh, âm nhạc và video đã được nén. Đừng lãng phí thời gian nén chúng lại. Trên thực tế, bạn có thể chỉ cần nén “bộ 3 lớn” (HTML, CSS và Javascript).

  • CPU -tải. Nén nội dung nhanh chóng sử dụng CPU thời gian và tiết kiệm băng thông. Thông thường, đây là một sự đánh đổi lớn với tốc độ nén. Có nhiều cách để nén trước nội dung tĩnh và gửi qua các phiên bản đã nén. Điều này đòi hỏi nhiều cấu hình hơn; . Việc sử dụng chu kỳ CPU để có trải nghiệm người dùng nhanh hơn là rất xứng đáng, do khoảng thời gian chú ý ngắn trên web.

Kích hoạt tính năng nén là một trong những cách nhanh nhất để cải thiện hiệu suất trang web của bạn. Tiếp tục, thiết lập và để người dùng của bạn tận hưởng những lợi ích