?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
壓縮是提高網(wǎng)站性能的重要方法。對于某些文檔,最多可減少70%的尺寸可降低帶寬容量需求。多年來,算法也變得更加高效,并且新的算法得到了客戶端和服務器的支持。
在實踐中,Web開發(fā)人員不需要實現(xiàn)壓縮機制,瀏覽器和服務器都已經(jīng)實現(xiàn)了壓縮機制,但他們必須確保服務器配置充分。壓縮發(fā)生在三個不同的級別:
首先一些文件格式是用特定的優(yōu)化方法壓縮的,
那么通用加密可以在HTTP級別發(fā)生(資源從頭到尾被壓縮傳輸),
最后可以在HTTP連接的兩個節(jié)點之間的連接級別定義壓縮。
每種數(shù)據(jù)類型都有一些冗余,那就是浪費的空間。如果文本通常具有高達60%的冗余度,那么對于音頻和視頻等其他媒體,此速率可能會更高。與文本不同,這些其他媒體類型正在占用大量空間來存儲,并且需要重新獲得這種浪費的空間顯得非常早。工程師設計了針對特定用途設計的文件格式所使用的優(yōu)化壓縮算法。用于文件的壓縮算法可以分為兩大類:
無損壓縮,其中壓縮 - 解壓縮循環(huán)不會改變恢復的數(shù)據(jù)。它匹配(字節(jié)到字節(jié))與原始。對于圖像gif
或png
使用無損壓縮。
有損壓縮是循環(huán)改變原始數(shù)據(jù)的地方,對用戶來說是不可感知的。
Web上的視頻格式是有損和面向圖像的,如jpeg
。
有些格式可以用于無損壓縮或有損壓縮,如webp
通常有損算法可以配置為壓縮或多或少,這當然會導致更少或更多的質量。為了獲得更好的網(wǎng)站性能,在保持可接受的質量水平的同時盡可能進行壓縮是理想的選擇。對于圖像來說,由工具生成的圖像可能無法針對Web進行優(yōu)化; 建議使用能夠以所需質量盡可能壓縮的工具。有很多專門為此設計的工具。
有損壓縮算法通常比無損壓縮算法更高效。
由于壓縮對特定類型的文件效果更好,通常不會再次壓縮它們。事實上,由于開銷的成本(算法通常需要一個增加初始大小的字典)可能會高于額外的壓縮增益,導致文件較大,因此這往往是反效果的。不要將以下兩種技術用于壓縮格式的文件。
對于壓縮,端到端壓縮是網(wǎng)站最大的性能改進所在。端到端壓縮指的是壓縮由服務器完成的消息主體,并在到達客戶端之前保持不變。無論中間節(jié)點是什么,它們都不會影響身體。
所有現(xiàn)代瀏覽器和服務器都支持它,唯一需要協(xié)商的是要使用的壓縮算法。這些算法針對文本進行了優(yōu)化。在20世紀90年代,壓縮技術正在快速發(fā)展,許多連續(xù)的算法已被添加到可能的選擇集中。目前,只有兩個是相關的:gzip
最常見的和br
新的挑戰(zhàn)者。
要選擇要使用的算法,瀏覽器和服務器使用主動內容協(xié)商。瀏覽Accept-Encoding
器用它支持的算法和它的優(yōu)先順序發(fā)送一個標題,服務器選擇一個,用它壓縮響應的主體,并使用Content-Encoding
標題告訴瀏覽器它選擇的算法。由于內容協(xié)商已經(jīng)被用來根據(jù)編碼來選擇一個表示,所以在響應Vary
中至少包含一個包含Content-Encoding
這個標題的報頭; 這樣,緩存將能夠緩存資源的不同表示。
由于壓縮帶來顯著的性能改進,建議將其激活為所有文件,但已經(jīng)壓縮的文件如圖像,音頻文件和視頻。
Apache支持壓縮并使用mod_deflate ; 對于nginx有ngx_http_gzip_module ; 對于IIS,<httpCompression>
元素。
逐跳壓縮盡管與端到端壓縮類似,但其差異在于一個基本要素:壓縮不會發(fā)生在服務器的資源中,從而創(chuàng)建一個特定的表示,然后傳輸,但是在客戶端和服務器之間的路徑上的任何兩個節(jié)點之間的消息。連續(xù)的中間節(jié)點之間的連接可以應用不同的壓縮。
為此,HTTP使用類似于內容協(xié)商的機制進行端對端壓縮:發(fā)送請求的節(jié)點使用TE
標頭通知它的意愿,而另一節(jié)點選擇適當?shù)姆椒ǎ瑧盟⒅甘舅倪x擇Transfer-Encoding
頭。
實際上,逐跳壓縮對于服務器和客戶端是透明的,并且很少使用。TE
并且Transfer-Encoding
主要用于通過塊發(fā)送響應,從而允許在不知道其長度的情況下開始傳輸資源。
請注意,Transfer-Encoding
在跳躍層使用和壓縮非常罕見,大多數(shù)服務器(如Apache,nginx或IIS)都沒有簡單的方法來配置它。這種配置通常發(fā)生在代理級別。