03.07.2013, 11:25
Ostatnio obserwując żądania do serwera przy ładowaniu kilku forów na MyBB zauważyłem, że style CSS są ładowane za każdym razem. Oczywiście, to nic złego, a przy zmianach przez administrację nawet zaleta, bo nie trzeba pisać użytkownikom rzeczy typu "zróbcie CTRL+R/CTRL+F5", no ale czy zawsze to jest potrzebne? Nie wydaje mi się, dlatego chciałbym przedstawić mini-zabieg, który pozwala te dane buforować w przeglądarce użytkownika.
W ogóle pytanie brzmi: po co to robić? Na przykładzie MyBBoard mogę powiedzieć, że ładowane są tu 3 pliki zawierające style. Pobranie każdego z nich wymaga oddzielnego połączenia z bazą, wstępnej inicjalizacji całego MyBB itd. To zawsze nieco pracy, którą można by zaoszczędzić. Można łączyć style w jeden plik, ale nie zawsze jest to pożądane, stąd wybór buforowania.
Edytujemy plik css.php, znajdujemy:
przed tym dodajemy:
I to wszystko.
W zmiennej expires mamy czas w sekundach, na jaki przeglądarka powinna to buforować. Godzina to niewiele, ale przy przeglądaniu forum przez wielu stałych użytkowników, już powinno dać pewną różnicę, a zarazem na tyle krótki, że jeżeli administracja zmieni coś w stylach, względnie szybko będzie i u użytkowników. Oczywiście jeżeli na swoich forach nie zmieniacie styli zbyt często, można tam ustawić również czas równoważny tygodniowi czy miesiącowi, to już wasza decyzja.
Dlaczego nie plugin? Chciałem, ale w pliku init niestety nie ma dla nich żadnego wpięcia (pomimo, że nawet w wypadku styli css wszystkie ich pliki są załączane).
W ogóle pytanie brzmi: po co to robić? Na przykładzie MyBBoard mogę powiedzieć, że ładowane są tu 3 pliki zawierające style. Pobranie każdego z nich wymaga oddzielnego połączenia z bazą, wstępnej inicjalizacji całego MyBB itd. To zawsze nieco pracy, którą można by zaoszczędzić. Można łączyć style w jeden plik, ale nie zawsze jest to pożądane, stąd wybór buforowania.
1 Edycja css.php
Edytujemy plik css.php, znajdujemy:
Kod PHP:
header("Content-type: text/css");
przed tym dodajemy:
Kod PHP:
$expires = 3600;
header("Pragma: public");
header("Cache-Control: maxage=".$expires);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');
I to wszystko.
W zmiennej expires mamy czas w sekundach, na jaki przeglądarka powinna to buforować. Godzina to niewiele, ale przy przeglądaniu forum przez wielu stałych użytkowników, już powinno dać pewną różnicę, a zarazem na tyle krótki, że jeżeli administracja zmieni coś w stylach, względnie szybko będzie i u użytkowników. Oczywiście jeżeli na swoich forach nie zmieniacie styli zbyt często, można tam ustawić również czas równoważny tygodniowi czy miesiącowi, to już wasza decyzja.
Dlaczego nie plugin? Chciałem, ale w pliku init niestety nie ma dla nich żadnego wpięcia (pomimo, że nawet w wypadku styli css wszystkie ich pliki są załączane).