Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Cachowanie obiektów
Forum PHP.pl > Forum > PHP
ziupexx
Dziwna sprawa, otwóż próbuje zapisać w cache przygotowany obiekt do pracy w raz z innymi obiekatmi w swoim wnętrzu, jednak czas jakji jest potrzebny na pobranie gotowego obiektu jest dłuższy niż czas utworzenia za każdym razem nowych obiektów, skrypt poniżej

JEST WOLNIEJSZY

$time_start = microtime(true);

$cache = new \Memcache;
$cache->connect('localhost', 11211) or die('Could not connect to memcache serwer');

for($i=0;$i <= 90;$i++){
$system = $cache->get('system.class');
if (!$system) {

$object = new system\core\System('system/core/config/configuration.ini');
$cache->set('system.class', $object, MEMCACHE_COMPRESSED, 30);
$system = $cache->get('system.class');


}
$system->start();
}

$time_end = microtime(true);

echo $time = $time_end - $time_start;

OD TEGO SKRYPTU

$time_start = microtime(true);

for($i=0;$i <= 90;$i++){

$system = new system\core\System('system/core/config/configuration.ini');
$system->start();

}

$time_end = microtime(true);

echo $time = $time_end - $time_start;


Może ktoś wytłumaczyć dlaczego?
Crozin
Ciężko odpowiedzieć nie mając pojęcia co robi konstruktor oraz metoda start() klasy system\core\System.
Fluke
Choćby nawet plik(dokładniej, ścieżkę do pliku) jaki przesyłasz do konstruktora. Korzystałem z plików o rozszerzeniu .ini ale szybko przestawiłem się na .php bo skrypt wykonywał się o ~0.3 dłużej.
Dodatkowo pytanie jak zbudowana jest twoja klasa \system\core\System.
em1X
No cóż, przecież obiekt nie jest zapisywany "cały" do cache'u, tylko najpierw jest serializowany, następnie w pamięci ląduje jego wersja tekstowa. Podczas wyciągania danych, obiekt jest deserializowany, PHP tworzy obiekt (zupełnie tak jak Ty go tworzysz), PHP ponownie przypisuje dane (tak jak Ty to robisz). Dziwisz się, że nic na tym nie zyskujesz? Nie do tego memcache służy.

Do czego ja bym memcache wykorzystał? Mam 30 tabel, na których należy wykonać kilkadziesiąt joinów, dane te potem muszą być jeszcze obrobione przez PHP. Taką operację muszę powtórzyć przy każdym dodaniu rekordu. Zamiast robić to za każdym razem, robię raz i zapisuję do pamięci. Nie bawię się w jakieś zapisywanie obiektów nie wiadomo po co smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.