![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 16.11.2013 Ostrzeżenie: (0%) ![]() ![]() |
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? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Ciężko odpowiedzieć nie mając pojęcia co robi konstruktor oraz metoda start() klasy system\core\System.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 9 Dołączył: 20.09.2010 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
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 ![]() Ten post edytował em1X 20.11.2013, 22:37:53 -------------------- eh, co polska wódka to polska wódka
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 3.08.2025 - 07:19 |