本文首發 http://fetiku.com/docs/advanc...
DNS
解析也是須要時間的,能夠經過預解析的方式來預先得到域名所對應的 IP
<link rel="dns-prefetch" href="//shudong.wang">
強緩存html
實現強緩存能夠經過兩種響應頭實現:Expires
和Cache-Control
。強緩存表示在緩存期間不須要請求,state code
爲200
Expires: Wed, 22 Oct 2018 08:41:00 GMT
Expires
是HTTP / 1.0
的產物,表示資源會在Wed, 22 Oct 2018 08:41:00 GMT
後過時,須要再次請求。而且Expires
受限於本地時間,若是修改了本地時間,可能會形成緩存失效
Cache-control: max-age=30
Cache-Control
出現於HTTP / 1.1
,優先級高於Expires
。該屬性表示資源會在30
秒後過時,須要再次請求
協商緩存前端
Last-Modified
和 If-Modified-Since
瀏覽器
Last-Modified
表示本地文件最後修改日期,If-Modified-Since
會將 Last-Modified
的值發送給服務器,詢問服務器在該日期後資源是否有更新,有更新的話就會將新的資源發送回來Last-Modified
被修改,因此在 HTTP / 1.1
出現了 ETag
ETag
和 If-None-Match
緩存
ETag
相似於文件指紋,If-None-Match
會將當前 ETag
發送給服務器,詢問該資源 ETag 是否變更,有變更的話就將新的資源發送回來。而且 ETag
優先級比 Last-Modified
高選擇合適的緩存策略性能優化
對於大部分的場景均可以使用強緩存配合協商緩存解決,可是在一些特殊的地方可能須要選擇特殊的緩存策略
Cache-control: no-store
,表示該資源不須要緩存Cache-Control: no-cache
並配合 ETag
使用,表示該資源已被緩存,可是每次都會發送請求詢問資源是否更新。Cache-Control: max-age=31536000
並配合策略緩存使用,而後對文件進行指紋處理,一旦文件名變更就會馬上下載新的文件HTTP / 1.1
時代,每一個請求都須要創建和斷開,消耗了好幾個 RTT
時間,而且因爲 TCP
慢啓動的緣由,加載體積大的文件會須要更多的時間HTTP / 2.0
中引入了多路複用,可以讓多個請求使用同一個 TCP
連接,極大的加快了網頁的加載速度。而且還支持 Header
壓縮,進一步的減小了請求的數據大小fetch
,強制瀏覽器請求資源,而且不會阻塞 onload
事件,可使用如下代碼開啓預加載<link rel="preload" href="http://example.com">
預加載能夠必定程度上下降首屏的加載時間,由於能夠將一些不影響首屏但重要的文件延後加載,惟一缺點就是兼容性很差
能夠經過預渲染將下載的文件預先在後臺渲染,可使用如下代碼開啓預渲染
<link rel="prerender" href="http://poetries.com">
懶執行服務器
懶加載併發
懶加載的原理就是隻加載自定義區域(一般是可視區域,但也能夠是即將進入可視區域)內須要加載的東西。對於圖片來講,先設置圖片標籤的src
屬性爲一張佔位圖,將真實的圖片資源放入一個自定義屬性中,當進入自定義區域時,就將自定義屬性替換爲src
屬性,這樣圖片就會去下載資源,實現了圖片懶加載