當用戶訪問一個站點的時候,全部的資源都必須有一個來源。全部的文本、圖片、樣式、腳本等資源都必須被瀏覽器接收到才能展示和執行。開發者能夠給瀏覽器提供選擇,選擇是從哪裏獲取這些資源,這樣能夠極大地提高頁面加載速度。javascript
頁面第一次加載完以後,瀏覽器把這些資源存在了 HTTP Cache 中。第二次打開這個頁面的時候,瀏覽器會優先從硬盤中查找這些資源的緩存,比從服務器去下載要更快一些。css
雖然HTTP緩存是由 Internet Engineering Task Force (IETF) specifications 定製的規範,可是瀏覽器能夠擁有多種不一樣的緩存,它們在獲取、存儲、保存內容的方式上也各不相同。你能夠閱讀這篇文章來了解這些緩存的區別 A Tale of Four Caches。html
固然第一次訪問站點沒有緩存。第二次訪問也可能沒有緩存,由於用戶可能會手動清除了緩存,也多是強制刷新。仍然有很大一部分用戶可以享受到緩存帶來的飛速打開體驗,最大化利用緩存能給讓這批用戶打開速度有質的飛躍。java
咱們能夠根據資源的改動頻率來決定緩存的方式。像站點logo可能基本上不會變化,而腳本可能隔幾天就變一次。你須要去分辨哪些資源是動態的,哪些又是靜態的,這樣才能針對性的開啓緩存,或者決定緩存的有效時間。nginx
目前有兩種主要的緩存頭,cache-control 和 expires,能夠用來定義資源的緩存特性。cache-control可能會相對而言更現代化、更靈活。這二者也能夠同時使用。web
緩存頭是服務器層設置的,nginx和apache都有本身的語法。apache
如下是apache的.htaccess文件的配置:瀏覽器
<filesMatch ".(ico|jpg|jpeg|png|gif)$"> Header set Cache-Control "max-age=2592000, public" </filesMatch>
針對圖片文件,咱們通常設置一個月的過時時間緩存
<filesMatch ".(css|js)$"> Header set Cache-Control "max-age=86400, public" </filesMatch>
cache-control有一系列的配置項,也被稱爲指令,用來告知瀏覽器如何處理緩存。如下是部分經常使用的指令,更多內容能夠看 Mozilla Developer Network。服務器
你能夠針對不一樣類型的資源定義不一樣的過時時間,如下是.htaccess文件的配置:
## EXPIRES CACHING ## ExpiresActive On ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType text/css "access plus 1 month" ExpiresByType application/pdf "access plus 1 month" ExpiresByType text/x-javascript "access plus 1 month" ExpiresByType application/x-shockwave-flash "access plus 1 month" ExpiresByType image/x-icon "access plus 1 year" ExpiresDefault "access plus 2 days" ## EXPIRES CACHING ##
Expire Caching最大不能超過1年,max-age也是同樣,不然會形成永久緩存。
緩存是一種可靠、簡單的方式來提高頁面加載速度,改善用戶體驗。緩存功能強大,也足夠靈活,能夠針對多種不一樣的內容作不一樣的策略。
同時也要注意的是,若是緩存設置時間過長,用戶可能會很長一段時間都看不到新內容,詳細能夠參考: Caching Best Practices and Max-age Gotchas。