![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Przyjaciele php.pl Postów: 554 Pomógł: 0 Dołączył: 4.04.2002 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Witam
W mojch szablonach wszechobecne są znaczniki blokow typu: Kod <cos:cos param1="1" param2="2"> jakis sobie tekst</cos:cos> Aby wychwycic te bloki uzywalem wyrazenia:
Jednak przy wiekszych stringach preg_replace_callback potrafi sie wykonywac i 12 sekund. Potem wyniki sa keszowane i dla end usera to nie ma znaczenia, jednak dla administratora przebudowywującego strone jest to nie do przyjęcia. Czy ktoś juz zagłębiał sie w problem wykrywania bloków ( autorowie systemow szablonów mowa o was ![]() pozdrawiam rzSeattle -------------------- "Real children don't go hoppity-skip unless they are on drugs."
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Hmm, dziwne. Ja w obecnym projekcie uzywam wlasnie preg_replace_callback na kilku(nastu) KB kodu i wykonuje sie on dlugo (ale i tak mniej niz sekunde...) ale glownie ze wzgledu na to co sie dzieje w callbacku (pobieranie danych z bazy i pare innych), jak zostawilem pustego (z odpowiednim returnem) callbacka to calosc smigala standardowo w jakies kilkanascie milisekund.
W systemie szablonow tez tego uzywam i to z znaaaaaacznie bardziej skomplikowanym regexpem (mam jeden - laczony z kilkunastu malych - do wylapywania kazdej - no prawie - mozliwej konstrukcji, wlasnie sprawdzilem.. caly ma ponad 600 znakow), jedna chyba roznica jest taka, ze ja jade plik zrodlowy linia po linii, a nie calosc (bylo mi to potrzebne, zeby moc latwo pokazac w ktorej linii szablonu jest blad). No i nie wiem jak Ty, ale ja kompiluje szablony do php, podobnie jak Smarty tylko, ze szybciej i bez zbednych pierdol ![]() Jeszcze jedna roznica polega na tym, ze ja najpierw wylapuje wszystko co jest w delimiterach przeze mnie ustawionych, a dopiero wewnatrz callbacka robie preg_match z tym duzym regexpem, byc moze to ma jakis wplyw na wydajnosc. W kazdym razie czasy generacji szablonow z reguly maja 2 zera po przecinku, a nierzadko nawet 3, takze cos napewno masz nie tak jak powinno byc. Napisz moze cos wiecej, co masz na mysli przez wieksze stringi. -------------------- Brak czasu :/
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 554 Pomógł: 0 Dołączył: 4.04.2002 Skąd: Tychy Ostrzeżenie: (0%) ![]() ![]() |
Poekserymentowalem trochę i wychodzi na to, że o wiele szybciej wyłapać pocztątki bloków, a potem dopiero w pętli wyłapywać całe bloki bez backreference. Chciałem to zrobic jednym wyrażeniem, czysto i szybko, jednak szwankuje to na stringach o wielkosci nawet tak małej jak 20 - 30 lini standardowego kodu html z dwoma zdefiniowanymi blokami. Dodatkowo to napewno nie wina funkcji callbackowej ponieważ gdy wsadzę tego rexpa do preg_match_all to czas parsowania jest równe długi.
No nic trzeba do tego dopisac stros z blokami i powinno funkcjonować. Jak dzisiaj sie obrobie to przedstawie przyklad tego co parsowalem w osobnym skrypcie. -------------------- "Real children don't go hoppity-skip unless they are on drugs."
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Ciekawe.. jakos nie przypominam sobie, zeby backreferences dawaly tak w kosc.
Jak mozesz to wyizoluj jakis dzialajacy kawalek kodu do parsowania + przykladowy szablon i umiesc go tutaj to zobacze u siebie czy nie da sie z tym czegos zrobic. -------------------- Brak czasu :/
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 401 Pomógł: 5 Dołączył: 14.09.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat(FiDO @ 2005-09-16 19:51:27) Ciekawe.. jakos nie przypominam sobie, zeby backreferences dawaly tak w kosc. Jak mozesz to wyizoluj jakis dzialajacy kawalek kodu do parsowania + przykladowy szablon i umiesc go tutaj O tak dyskusja Ciekawa i ja z chęcia poeksperymentuję, więc do prośby się przyłączam. -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
No wiec nie wytrzymalem zbyt dlugo i w chwili wolnej zrobilem sobie maly tescik
![]() Regexpa skopiowalem z pierwszego posta nie robiac (celowo) zadnych zmian. Jako przykladowy szablon uzylem wygenerowany przez siebie pliczek ok 10KB z dosc duza iloscia elementow blokowych (tak co kilka linijek sie pojawialy srednio). Testowalem to na P3 450, na ktorym moj obecny projekt generuje sie ponad 10x dluzej niz na moim kompie, wiec spodziewalem sie zdazyc zjesc kolacje w tym czasie ![]() NIestety nie udalo sie.. zjesc kolacji w tym czasie, bo po odpaleniu tego w przegladarce okazalo sie, ze czas wykonania calosci wynosil ok 0.0003 sekundy. Tak wiec albo mierzyles nie ten kawalek kodu co trzeba, albo masz cos "popsute" z systemem lub php, albo cos jeszcze innego co mi teraz nie przychodzi do glowy. W kazdym razie przynajmniej udalo mi sie zdementowac powolnosc back-references. -------------------- Brak czasu :/
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
IMO warto zajrzeć do PRADO, jest tam "system szablonów" działający na podobnej zasadzie. Całość opiera się na kilku regexpach a nasŧępnie na zabawie ze stosem i strpos..
-------------------- Łukasz Dywicki
Independent Java and open source software consultant. Blog - Java, OSGi, integracja oprogramowania.. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.07.2025 - 14:49 |