在 Google Page Speed 的要點裡 有提到 減少要求 request 的數量
這樣的話會有兩種作法
- deploy 時合併成一支大的 .js
- 透過 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 ~