Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak cachować obrazek generowany przez GD ?
Forum PHP.pl > Forum > PHP
ahold
Witajcie,

Wiem że to trochę głupia sprawa ale muszę wynenerować systystkę użycia kilku parametrów.

Zrobimy to w GD. Będzie dynamicznie generowane.

Moje pytanie brzmi, czy można jakoś "cachować obrazek z GD" np do 10 seknd ?

Tak aby 1000 requestów otwarcia obrazka z php gd, nie powodowalo 1000 wygenerowań go na nowo, 1000 pobrań z bazy, i 1000 przeliczeń statystyk.

Zapisanie na dysk twardy odpada, to by była głupota najwyższego szczebla. Przy każdym requeście sprawdzać date modyfikacji, czy mineło 10 sekund / tak - skasuj plik, wygeneruj nowy / nie - wyswitl plik
(chyba za dużo roboty, poza tym w krótkiej linii doprowadzi do zajechania dysku zapisem)
maly_swd
a. Glupota jest trzymac obrazek w bazie...
b. obciazenie bazy wzrasta
c. tak samo "jezdzi po dysku", a czasem bardziej...


A teraz odpowiedzi na Twoje pytania


Zrobimy to w GD. Będzie dynamicznie generowane.

Moje pytanie brzmi, czy można jakoś "cachować obrazek z GD" np do 10 seknd ?
-tak, mozna

Tak aby 1000 requestów otwarcia obrazka z php gd, nie powodowalo 1000 wygenerowań go na nowo, 1000 pobrań z bazy, i 1000 przeliczeń statystyk.
-dobry pomysl...

Zapisanie na dysk twardy odpada, to by była głupota najwyższego szczebla. Przy każdym requeście sprawdzać date modyfikacji, czy mineło 10 sekund / tak - skasuj plik, wygeneruj nowy / nie - wyswitl plik
-odczyt z dysku obrazka i sprawdzenie modyfikacji pliku to "pikus" z przemieleniem bazy danych. Inna sprawa ze takie operacje sa cachowane przez system

(chyba za dużo roboty, poza tym w krótkiej linii doprowadzi do zajechania dysku zapisem)
-za duzo roboty dla kogo? Dla serwera to milisekundy... A dysk i tak jest zajechany przez baze
Crozin
Że niby zapis co 10-15 sek obraza miałby zajechać dysk? O odczycie nie wspominam, bo przy każdym żądaniu Twój serwer odczytuje kilkadziesiąt-kilkaset plików.

Ewentualnie możesz trzymać to w pamięci (memcache" title="Zobacz w manualu PHP" target="_manual)
ahold
Odczyt nie ma żadnego wpływu na pracę serwera który ma xx gb ramu, takie coś jest cachowane na poziomie systemu operacyjnego / kontrolera raid !


Nie powiedziałem że równolegle jest xxxx takich plików ?
Jeden może być użyty 2x na godzine. Inny 1000 na kilka sekund.


Zapis na dysk - myślałem czy php nie ma gotowe funkcji typu "ram drive" $obrazek->save_to_ram_drive;
I porównywac z ramdrive, pomijając dysk twardy.


Jeżeli nie, to faktycznie zapisze na dysk, porównamy date pliku, tylko żeby znowu nie tworzyc tymczasowej tabeli z datami. Tylko już faktycznie, uprzeć się i zrobić to na pliku.

if < 10 sekund - header png i fopen obrazek .png
else
wygeneruj
zapisz

header png
fopen
obrazek.png


Czy zatwierdzacie taką metodę ?
maly_swd
Zainteresuj sie tym co kolega Crozin napisal.. haslo mamcache.

Jak tak bardzo chcesz podniesc wydajnosc to na "boga" zrezygnuj z trzymania obrazkow w bazie:)
ahold
JAKICH OBRAZKÓW W BAZIE exclamation.gif!!!!!!!!!!!!
z bazy pobierane są dane do wygenerowania wykresu :/
xxx rekordów, żeby wygenerowac ładną statystykę.



Memcached - zakochałem się od pierwszego wejżenia.
Już implementujemy.
Nawet ma funckję "expire" smile.gif

Chyba z miłości dorzucę dla niego osobną maszynę snitch.gif
maly_swd
ehhh zle doczytane... wyszlo z tego ze obrazki sa w bazie i je generujsze przez gd (np dodajesz cos do nich)...

.. aby 1000 requestów otwarcia obrazka z php gd, nie powodowalo 1000 wygenerowań go na nowo, 1000 pobrań z bazy...

a jesli to statystyki to moze latwiej bedzie generowac wykres po stronie przegladarki? jakims JS? z xmla?

albo np http://code.google.com/intl/pl-PL/apis/chart/types.html
ahold
Przepraszam, faktycznie źle to napisałem.

Proszę wybacz mi maly_swd jeżeli mój ton wypowiedzi odebrałeś negatywnie.




Memcache okazało się idealnym rozwiązaniem.

Nie wiedzialem tylko jak zapisać obiekt obrazka, więc użyłem drobnego triku:

  1. <?php
  2. ImagePNG($graph);
  3. $send_it = ob_get_clean();
  4. ?>



Potem wywołanie z memcacha + header.

Problem uważam za rozwiązany.
maly_swd
Ahold -> no przestan:) za takie cos sie obrazac? Tylko napisalem ze nie doczytalem do konca i ze zrozumieniem:)

Luzik.. powodzenia w tworzeniu..

pozdr
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.