Skip to content

Instantly share code, notes, and snippets.

@jspaper
Created October 13, 2017 04:46
Show Gist options
  • Save jspaper/9b94c7241a601c951a3adfc5fa08eac7 to your computer and use it in GitHub Desktop.
Save jspaper/9b94c7241a601c951a3adfc5fa08eac7 to your computer and use it in GitHub Desktop.
Caching

Caching

1. Client-side caching

  • max-age
  • etag
  • last_modified

max-age

直到refresh才會重新取得

etag

節省server不用render view,但request仍會觸及BE server,若server判斷同樣etag回傳304 No Modified。

觸及server

  • 1st - render body, create etag
  • 2nd - render body, create etag, compare etag

last_modified

觸及server

  • 1st - render body + last_modified
  • 2nd - compare date

2. HTTP caching

Reverse Proxy Caches: Vanish, Squid

只使用Reverse Proxy而沒有利用HTTP header的max-age, etaglast_modified時,就完全不會觸及Server,所以,得在HTTP header讓Reverse Proxy知道何時要把Request往server送。

  • max-age: 2nd在時間內都會由Reverse Proxy。
  • etag: Reverse Proxy會在同樣的Request自動加etag,Reverse proxy會在2nd新用戶訪問時,Cache Server回應html+etag
  • last_modified: Reverse Proxy會在同樣的Request自動加last_modified,Reverse proxy會在2nd新用戶訪問時,Cache server回應html+last_modified

單單只用max-age, etaglast_modified,Reverse Proxy仍會觸及Server

  • max-age+etag
  • max-age+last_modified

結論

  1. 除非有用max-age,否則reverse proxy一定會hit app。
  2. Reverse Proxy可減輕hit app的次數,當不同使用者訪問同一個resource時,會自動加上max-age, last_modified或etag。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment