讓 php 回 304 Not Modified

在 Google Page Speed 的要點裡 有提到 減少要求 request 的數量
這樣的話會有兩種作法

  1. deploy 時合併成一支大的 .js
  2. 透過 php 把要求的 js 合併一次傳送出去

但是前者失去了彈性,假設我們有十種不同的元件( js 檔),因為不是每次都需要這十種元件的功能,所以不可能每次都 loading 這十隻,如果要選擇性的 loading 就要把全部的組合都合併出來,這樣的排列組合未免也太恐怖了。

因此實務上會寫一支 php (姑且稱之 combo loader),透過傳遞不同的 js 元件需求,這隻 combo loader 可以輕鬆的組合出想要的元件。並且可以把合併的結果 cache 起來,下次遇到一樣的需求就不必再重新組合了。

因此程式碼大概會長這樣。

但是這樣做每次要資料都還是會回應 200 OK 而不能像 js 或 css 回應 304 Not Modified

所以我們還要在動一些手腳

把回應的 header 加 Expires 跟 Last-Modified 因此大概變成如下


這樣下次有同樣的 request 近來 php 就會先檢查 HTTP_IF_MODIFIED_SINCE 然後透過比對修改的時間決定要回 304 還是重新出檔案了!

當然 request 可能會長成這樣


或者防止瀏覽器的 cache 也可以像這樣 loading


最後差異如下



從 132KB 降到 180B ~