![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
Szukam sposobu na konfiguracje frameworka. stwierdzilem ze konfiguracji moze byc tak duzo ze sesnownie byloby wykorzystac plik xml to trzymania konfiguracji.
Tu meczy mnie kilka watpliwosci, ktroe mam nadzieje pomozecie mi rozwiac. Jak czytac plik konfiguracyjny XML. Waham sie miedzy PEAR::Config a SimpleXML z php5 a mmoze warto siegnac po inne rozwiazanie. Druga sprawa to wydajnosc. Oczywiscie szkoda by bylo zeby kazde wywolanie strony wizalo sie z przetworzeniem XML'a wiec wymyslilem sobie ze sprasuje plik tylko przy pierwszym ladowniau i umieszcze go w tablicy $_SESSION albo stworze obiekt do ktorego wrzuce konfiguracje i umieszcze calosc w zmiennej sesji. Powiedzcie mi czy moje myslenie idzie w dobrym kierunku i jak Wy to robicie. Bede tez wdzieczny za linki ![]() -------------------- Jeśli życie to kara to nieźle nabroiłem ;-)
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Co do wydajności. Przy pierwszym wczytaniu xml załaduj go do cache. Sesja będzie trzymala xml tylko dla danego gościa. Kolejny gostek bedzie musial znowu wczytywac xml. Cache będzie dzialal dla każdego. W przypadku zmiany konfiguracji wystarczy tylko cache usunąć.
Jest parę bibliotek do cache - poszukaj -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
Cytat(nospor @ 2005-07-04 11:44:40) Co do wydajności. Przy pierwszym wczytaniu xml załaduj go do cache. Sesja będzie trzymala xml tylko dla danego gościa. Kolejny gostek bedzie musial znowu wczytywac xml. Cache będzie dzialal dla każdego. W przypadku zmiany konfiguracji wystarczy tylko cache usunąć. No ale cache tez gdzies trzeba zapisac i pewnie na dysku wiec i tak bede mial odczyt z dysku co zajmuje chwile tyle ze wydaje mi sie postac bedzie inna np. tablica php a skoro tak to moze wogole lepiej trzymac konfiguracje w tablicy i tak ja stworzyc na poczatku? -------------------- Jeśli życie to kara to nieźle nabroiłem ;-)
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
heh - ale pamietaj o 2 rzeczach.
1. Sesja również jest trzymana na dysku - w serializowanej tablicy, któa jest ładowana do pamięci w trakcie uruchamiania skrytpu. Twoje cache może byc ładowane w identyczny sposób. 2. możesz podzielić konfiguracje na grupy, i ładować odpowiednie tylko w razie potrzeb - co jeszcze bardziej podniesie wydajność cache. -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat odczyt z dysku co zajmuje chwile tyle Odczyt zawartości pliku jest i tak o wiele szybszy niż odczyt i parsowanie pliku xml
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
Cytat(DeyV @ 2005-07-04 11:54:33) 1. Sesja również jest trzymana na dysku - w serializowanej tablicy, któa jest ładowana do pamięci w trakcie uruchamiania skrytpu. Twoje cache może byc ładowane w identyczny sposób. 2. możesz podzielić konfiguracje na grupy, i ładować odpowiednie tylko w razie potrzeb - co jeszcze bardziej podniesie wydajność cache. ad. 1 - jestem tego swiadom. wiec moze skrypt powinien sprawdzac czy istnieje plik z serializowana konfiguracja jesli tak to go czyta jesli nie to przetwarza XML i zapisuje taki plik. Do serializacji uzylbym po prostu f-cji serialize. A wracajac do sesji jesli zamisat zwyklego pliku uzylbym bazy danych do przechowywania sesji to dla duzej konfiguracji moglbym osiagnac jakies zyski czasowe? ad. 2 no powiedzmy ze podziele sobie konfigurace ja czesci: a) baza danych ![]() c) dopuszczalne wartosci dla tablic POST i GET d) dane dodatkowe dla konkretnego modelu nic wiecej na razie nie trzymam w konfiguracji wiec przy takim podziale punkty a-c laduje zawsze bo sa niezbede do odslugi zapytania i d zalaczam dopiero gdy odnaleziono model. Ale dochodza mi tu dodatkowe operacje odczytu w koncu zawsze jakis podel jest wywolywany wiec w takim przypadku odczytuje 2 pliki i jeszcze musze sprawdzic czy istnieja a to kolejne dwa ruchy glowicy. Moze otwieranie jednego duzego pliku z cala konfiguracja trwa nieco mnie? chyba to przetestuje ![]() -------------------- Jeśli życie to kara to nieźle nabroiłem ;-)
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Cytat A wracajac do sesji jesli zamisat zwyklego pliku uzylbym bazy danych do przechowywania sesji to dla duzej konfiguracji moglbym osiagnac jakies zyski czasowe? Nie będzie takowych - odczyt z dysku jest szybszy niż zapytania do bazy. Cytat a) baza danych istniejace w systemie modele (kozystam z MVC) c) dopuszczalne wartosci dla tablic POST i GET d) dane dodatkowe dla konkretnego modelu To wszystko można zcache'wac - pozatym podpunkt ![]() -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
Zrobilem sobie przykladowy kod ale cos "dserializowanie" mi nie dziala, oto kod:
a wywoluje to w innym pliku:
no ale po odczycie pliku cache i uzyciu unserialize ciagle dane sa zserializowane. Cos przeoczylem?? -------------------- Jeśli życie to kara to nieźle nabroiłem ;-)
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
readfile wyrzuca ci plik na wyjscie a zwraca liczbe a nie zawartosc pliku. uzyj file_get_contents.
pozatym sprawdz czy ci wogole w chodzi w czytanie cache:
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
Cytat(nospor @ 2005-07-04 14:24:35) readfile wyrzuca ci plik na wyjscie a zwraca liczbe a nie zawartosc pliku. uzyj file_get_contents. pozatym sprawdz czy ci wogole w chodzi w czytanie cache: o tym zapomnialem ![]()
czyta mi ladnie i zapisuje ale unserialize zwraca blad: Warning: unserialize() [function.unserialize]: Node no longer exists in configuration.class.php on line 13 to samo dla lini 14 -------------------- Jeśli życie to kara to nieźle nabroiłem ;-)
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
będę strzelal, gdyż nigdy nie uzywalme simplexml_load_file. Ty chyba serializujesz referencje do obiektów (nodów), które przy wczytywaniu z cache poprostu nie istnieją, czyli ze serialize dzialalo na referencjach a nie obiektach
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
Cytat(nospor @ 2005-07-04 14:39:43) będę strzelal, gdyż nigdy nie uzywalme simplexml_load_file. Ty chyba serializujesz referencje do obiektów (nodów), które przy wczytywaniu z cache poprostu nie istnieją, czyli ze serialize dzialalo na referencjach a nie obiektach nie jestem pewien czy dobrze Cie rozumiem ale oto wartosc wczytana z cache: Cytat O:16:"SimpleXMLElement":3:{s:4:"lang";O:16:"SimpleXMLElement":1:{s:7:"default";s:2:"pl";}s:5:"ldata";a:2:{i:0;O:16:"SimpleXMLElement":3:{s:2:"id";s:2:"pl";s:6:"coding";s:10:"ISO 8859-2";s:4:"name";s:6:"Polski";}i:1;O:16:"SimpleXMLElement":3:{s:2:"id";s:2:"en";s:6:"coding";s:10:"ISO 8859-1";s:4:"name";s:7:"English";}}s:2:"db";O:16:"SimpleXMLElement":5:{s:2:"db";s:5:"mysql";s:4:"host";s:9:"localhost";s:5:"login";s:4:"user";s:4:"pass";s:4:"pass";s:8:"database";s:4:"data";}} poza tym w manualu: Cytat object simplexml_load_file ( string filename [, string class_name [, int options]] ) i na stronie http://zend.com/php5/articles/php5-simplexml.php : Cytat With SimpleXML, element names are automatically mapped to properties on an object, and this happens recursively. wiec wyglada to na obiekty wg mnie EDIT: napisalem podobna klase dla sesji:
plik test.php:
i o dziwo tez mam problemy: Cytat Warning: session_start() [function.session-start]: Node no longer exists in test.php on line 5 Warning: var_dump() [function.var-dump]: Node no longer exists in class\configuration2.class.php on line 11 object(SimpleXMLElement)#1 (0) { } sprawdzilem dla innych aplikacji ktore wczesniej dzialaly i przy wywolaniu session_start() jest tez ten problem, wyglada wiec na to ze to serwer zawodzi, zrestartowalem i nic, ktos ma pomysl jak emu zaradzic? Uzywam php 5.0.3 Ten post edytował squid 4.07.2005, 14:12:15 -------------------- Jeśli życie to kara to nieźle nabroiłem ;-)
|
|
|
![]()
Post
#13
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Eh, znany błąd, nie można serializować obiektów simplexml. Najpierw sobie to do tablicy przekonwertuj.
-------------------- |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
Cytat(bela_666 @ 2005-07-04 16:47:11) Eh, znany błąd, nie można serializować obiektów simplexml. Najpierw sobie to do tablicy przekonwertuj. przegladalem changelog'a do 5.0.4 i zalatano tam kilka dziur odnosnie simpleXML ale czy zalatano i ten? bo ja niezauwazylem ale moze czytac nie umiem ![]() EDIT: a jak dokonac takiej konwersji z obiektu do tablicy?? Ten post edytował squid 4.07.2005, 16:01:22 -------------------- Jeśli życie to kara to nieźle nabroiłem ;-)
|
|
|
![]()
Post
#15
|
|
![]() Developer Grupa: Moderatorzy Postów: 2 844 Pomógł: 20 Dołączył: 25.11.2003 Skąd: Olkusz ![]() |
Przenosze.
php pro -> PHP5 czemu, chyba nie musze tlumaczyc. |
|
|
![]()
Post
#16
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(squid @ 2005-07-04 16:49:13) Cytat(bela_666 @ 2005-07-04 16:47:11) Eh, znany błąd, nie można serializować obiektów simplexml. Najpierw sobie to do tablicy przekonwertuj. przegladalem changelog'a do 5.0.4 i zalatano tam kilka dziur odnosnie simpleXML ale czy zalatano i ten? bo ja niezauwazylem ale moze czytac nie umiem ![]() EDIT: a jak dokonac takiej konwersji z obiektu do tablicy?? Albo jakąś funkcją simplexml2array albo, co ja preferuje, wszystko po kolei parsujemy w foreach -------------------- |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
-------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
probowalem z foreachami ale tak latwo sie nie dalo, ostatecznie uzylem f-cji z manuala i wyglada to tak:
-------------------- Jeśli życie to kara to nieźle nabroiłem ;-)
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Całe to parsowanie XML do zserializowanej tablicy/obiektu simplexml/whatever ma na celu zwiększenie wydajności, więc simplexml2array jest IMHO błędnym rozwiązaniem.
Bo dostajesz dosyć skomplikowaną tablicę, odzwierciedlającą jakoś tam strukturę XMLa. A przecież nie potrzebujesz tablicy. Potrzebujesz obiektów skonfigurowanych za pomocą tej tablicy. Sama tablica nic nie robi. Szybciej jest zserializować gotowe do użycia obiekty, niż tworzyć je od nowa na podstawie tej tablicy za każdym razem. Nie żebym się chwalił, ale patrz phiend2 ![]() |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
@hawk - załóżmy, że ten config się zmienia bądź jest zależny od jakimś parametrów - np. z konfiga o stopień wyżej - tablica się zmieni a ty znowu będziesz cache'ował kilka czy kilkanaście obiektów :?:
-------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 16:57 |