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.