Zauważyłem w swoich sklepach stworzonych pod program partnerski ESCpartners, że strona się dosyć długo generowała… zacząłem szukać co i jak.
No i znalazłem, sklep żeby działał musi się łączyć z innym serwerem pobierając dane. Jak samo łączenie w celu pobrania danych książek szło bardzo szybko, tak łączenie w celu pobrania menu trwało czasami nawet kilka sekund. Potęgowały to pewnie jeszcze godziny szczytu w internecie, w których to sprawdzałem.
No i to w sumie rzecz biorąc na większość serwerów, np na nazwa.pl kilka sekund dziś wieczór czekałem na wygenerowanie menu. Z tych co mam jedynie na 2be.pl chodziło raczej bez zarzutów.
Zrobiłem sobie mały upgrade moich sklepów. Ograniczyłem pobieranie menu do jednego razu na dzień (zawsze to jedno zapytanie mniej).
Może niezbyt profesjonalne rozwiązanie (programistą nie jestem), ale jak na moje potrzeby w sam raz, sklepy działają znacznie szybciej:
1. Tworzymy plik menu.txt nadajemy mu prawa do zapisu.
2. Tworzymy plik generujący menu np. gen_menu.php, mój zawierał dwa polecenia
require_once 'config.php’;
require 'include/menu.php’;
W razie gdyby w ten sposób generowały się linki ze zmienną sesyjną wstaw zamist require_once 'config.php’; zawartość tego pliku bez inicjacji sesji – session_start();.
3. W pliku index.php zamiast require 'include/menu.php’;, wstawiłem coś takiego:
if (date(’d’)!=date(’d’, filectime(’menu.txt’)))
{
copy(URL_SITE.’/gen_menu.php’, 'menu.txt’);}
if (filesize(’menu.txt’)<1000) { copy(URL_SITE.'/gen_menu.php', 'menu.txt'); } include 'menu.txt';
Ten drugi warunek dotyczący wielkości pliku jest tak na wszelki wypadek. Jakby coś poszło nie tak z połączeniem, czy sie nie zapisało z innej przyczyny.
Tak przygotowany skrypt ściąga dane menu raz dziennie. Rzecz jasna dla jeszcze lepszego usprawnienia, można w ten sposób zapisać też inne dane, ale akurat w tym sklepie pozostałe generują sie moim zdaniem wystarczająco szybko, no i mijało by się z funkcją sklepu zapisywanie całego sklepu…
To taki mój domowy sposób na robienie cache w php 🙂
PS: dzięki temu rozwiązaniu zaoszczędzimy też trochę na transferze.
dlaczego cachowanie całego sklepu mija się z celem?
amazon wymusza nawet żeby ich partnerzy przy sklepach buforowali dane wszystkie.
Założyłem że sklep ma działać z założenia łącząc się z bazą danych, przynajmniej tak jego nazwa wskazuje 🙂
Dopóki to łączenie działa w miarę szybko… zabawa mija się celem, przynajmniej dla mnie bo szkoda na nią czasu.
Mnie to menu sklepowe mocno wkurza… Mam sklep w starej wersji, z wgranym szablonem, dorobionymi statycznymi URLami i kiloma innymi bajerami. Niestety, cała strona „waży” ze 30 kB czystego tekstu, z czego połowa to menu.
I teraz, gdy w tej mojej księgarni mam zaindeksowane 7 500 podstron, można sobie wyobrazić, ile mi Google transferu ściągnęło na samo przejrzenie księgarni. 😉
No i pamiętaj, ze waży prawie 2 razy tyle dla serwera, bo serwer zdaje się liczy też transfer przy pobieraniu danych z sieci. Dlatego robiąc kopie pliku na serwerze można trochę zaoszczędzić, na tym pobieraniu.
Jeśli dobrze myślę.
Można GZIP-a włączyć wtedy ograniczy znacznie.
g-zip ograniczy ci transfer ale za to obciązy bardzo procka. Mój serwer ma limit 5% procesora a sklep bez gzip ma około 1% x 5 sklepów to już jest 5% + inne strony. Więc jeśli wasi admini pilnują tego nie polecam gzip a cachowanie stron. Jeśli cjhodzi o transfer to jak ci zacznie żreć to będzie cie stac pewnie i na sdedyka wtedy. Poblokujcie tylko boty slurp (yahoo) i msn bo nic nie dają a na koszty narażają nie potrzebnie