![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
wpadłem na pewien sposób tworzenia szablonów i chciałbym wiedzieć co o tym myślicie
![]() oczywiście to co tu prezentuję to wersja "robocza" tylko taki zarys ![]() plik główny szablon (template/head.php) mam nadzieję że wszystko jest jasne
Powód edycji: [erix] przeniosłem
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 662 Pomógł: 45 Dołączył: 26.03.2007 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Hmmm a po co to ? Strasznie tandetny pomysl, strasznie bedzie wygląda plik szablonu (o ile można to nazwać szablonem).
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Ja też wpadłem na pewien pomysł tworzenia szablonów. Mianowicie po wstawieniu każdej zmiennej tekst szablonu byłby wysyłany na serwer w Mozambiku zakodowany w base64, tam byłby odkodowywany i wysyłany z powrotem. I też chciałbym wiedzieć, co o tym myślicie.
sazian -> to, że coś jest wykonalne, nie znaczy, że powinno się to realizować. Wybacz, ale głupszego algorytmu przetwarzania szablonów nie widziałem. Przyjrzyj się uważnie, co ty tam tak naprawdę robisz; mi to wygląda na zabawy kodem na oślep. -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
w założeniach miał to być jak najprostszy "system szablonów" do własnego użytku nie dający żadnych "dodatkowych" możliwości a jedynie oddzielający kod php od HTML
korzystanie z szablonów typu smary(tak wiem już się go nie stosuje) czy opt powoduje wywoływanie całej masy dodatkowych operacji co wydłuża czas ładowania strony natomiast łączenie php z HTML'em sprawia że kod jest mało czytelny więc szukałem jak najprostszego sposobu na rozdzielenie php i HTML'a i tak "urodziło się to" ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Twój kod nie nada się do niczego
![]() views.php
przyklad.php
sciezkadofolderuszablonow/glowny.php
sciezkadofolderuszablonow/logo.php Takie szablony mają jednak taką wadę, że łatwo w nich namieszać. Koniecznie trzeba przyjąć zasadę aby kod w szablonie był odpowiedzialny tylko za wygląd. Pobieranie jakichkolwiek danych to pomyłka. Skrypt który tworzy obiekt tego szablonu musi zająć się np. przekazaniem mu tablicy z wynikami, które już w szablonie możesz wyświetlić za pomocą pętli. -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
Twój kod nie nada się do niczego ![]() wstawiłem ![]()
przecież to plik php więc ma pełną funkcjonalność php co prawda dodawanie fętli czy instrukcji warunkowych jest nieco utrudnione przez konieczność dodawania $result.= zrobiłem tak poniewarz chciałem mieć możliwość wczytania wyniku do zmiennej edit: a mógłby mi ktoś powiedzieć w czym jest lepsze <?php echo $this->tekst; ?> od mojego rozwiązania ![]() Ten post edytował sazian 14.04.2009, 19:02:35 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 4 Dołączył: 7.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
-------------------- Skrypty php, ajax, javascript
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
sazian, zrobiłeś jedną pętlę i już wygląda paskudnie.
![]() -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 045 Pomógł: 141 Dołączył: 19.09.2006 Skąd: B-tów Ostrzeżenie: (0%) ![]() ![]() |
no fakt wygląda paskudnie
![]() ![]() teraz gdy to dokładniej przemyślałem muszę przyznać wam rację to nie był najlepszy pomysł pytam czysto teoretycznie: poza tym że paskudnie wygląda macie jakieś zastrzeżenia od samego sposobu ![]() |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 4 Dołączył: 7.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
@l0ud
kolega guitarnet.pl nie nazywa sie Brian Lozier, czytaj artykul do konca zanim sie wypowiesz.. akurat-przyklad ktory podalem posluzyl mi do napisania wlasnego systemu szablonow w duzym stopniu opartym na tym wlasnie rozwiazaniu zanim zabralem sie za kodowanie testowalem dosc dlugo czasy wykonywania roznych skryptow szablonow i roznych rozwiazan od momentu przypisania zmiennych do wyrenderowania gotowego htmla (bez udzialu cache) oraz zuzycie pamieci takiego skryptu, dodatkowo cale rozwiazanie musialo dzialac w srodowisku mvc a rozwiazanie mialo skracac do minimum czas pomiedzy standardowymi operacjami w php bez wdrazania dodatkowych procedur czy koniecznosci prekompilacji szablonow, alternatywa? nie wiem co dokladnie cie razi w tamtym rozwiazaniu z artykulu, nie podales zadnych przykladow tylko ogolnikowe zdanie, zadnych alterntywnych rozwiazan wiec ciezko sie ustosunkowac do twojej "opinii", wlasciwie nie da sie ustosunkowac do czegokolwiek w twojej wypowiedzi? -------------------- Skrypty php, ajax, javascript
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Oj, chyba nie zrozumiałeś mojego posta
![]() Dając link do jakiegoś rozwiązania, automatycznie je sugerujesz. Nie musisz być przecież jego autorem ![]() Ten post edytował l0ud 14.04.2009, 20:54:48 -------------------- XMPP: l0ud@chrome.pl
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 4 Dołączył: 7.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
zrozumialem ze "kolega guitarnet.pl" zaproponowal podobne rozwiazanie jak kolega sazian, ktore oczywiscie odbiega od "norm"
![]() ok my bad, pozno juz jest za dlugo przed monitorem... ![]() -------------------- Skrypty php, ajax, javascript
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Tak, są zastrzeżenia. Prosiłem, byś się przyjrzał kodowi, najwidoczniej nie przyjrzałeś się, bo dość bezkrytycznie podchodzisz do parsowania tego samego szablonu co najmniej kilkanaście razy, zanim ostatecznie wygenerujesz rezultat. Dodaj sobie do szablonu linijkę $i++ i na końcu ją wyświetl, to zobaczysz (przynajmniej w teorii), co mam na myśli... Chciałeś skrócić czas generowania strony, a tymczasem "ten przeładowany" Smarty czy OPT bez problemu pobiją Twój kod przy pierwszym lepszym szablonie z dokładnością do rozmiaru ładowanego kodu.
Twoja wiedza o działaniu systemów szablonów bazuje w większości na mitach niemających pokrycia w rzeczywistości. Każdy system szablonów potrzebuje jakiegoś interfejsu programistycznego, większość dodaje także dedykowany język do tworzenia szablonów. Mimo tego, ze względów wydajnościowych są one kompilowane do kodu PHP i jedyny dodatkowy narzut czasowy to dwie operacje dyskowe na porównanie czasów ostatniej modyfikacji, by sprawdzić, czy plik źródłowy nie został zmieniony. Na dokładkę na serwerze produkcyjnym najczęściej można to bezproblemowo wyłączyć. Poza tym - ZERO! Aby pracować, OPT potrzebuje wczytać zaledwie niecałe 25 KB kodu + ew. 12 KB źródeł funkcji + 15 KB jądra (5 plików) bez względu na to, jak bardzo zaawansowane możliwości wykorzystujesz, gdyż i tak podczas kompilacji są one redukowane do najprostszego kodu PHP. Pozostałe 0,5 MB kodu przydaje się tylko podczas kompilacji i tak poza zajmowaniem odrobiny miejsca na dysku nie ma żadnego wpływu na wydajność. I gdzie tu masz "całą masę dodatkowych operacji"? Dla porównania, Zend_View, który także jest systemem szablonów bez względu na to, jak nazwą go autorzy, to 35 KB kodu robiącego prawie to samo + kod każdego helpera, jakiego użyjesz, nawet jeśli służy on po prostu do zrobienia pętli... tak naprawdę jedyne usprawnienie wydajności, jakie można uzyskać, to mniejsza objętość kodu do załadowania podczas uruchamiania skryptu i nic poza tym. -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 4 Dołączył: 7.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
twierdzisz ze 15kB skrypt nie moze zarezerwowac 50MB pamieci a 100kB skrypt 2MB?
raczej odnosilbym sie tu do czasu wykonywania skryptu i rozmiar pamieci rezerwowanej przez skrypt a nie objetosc kodu zrodlowego -------------------- Skrypty php, ajax, javascript
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Bardzo dziwnych twierdzeń się doczytałeś. Czytaj to, co jest napisane, a nie dorabiasz jakieś dziwne teorie, bo nic takiego nie napisałem. Po prostu wiem, jak działają systemy szablonów i w tych wydajnych żadna tego typu alokacja nie zachodzi sama z siebie, bo niby co tam by miało być trzymane? Cały "algorytm", jaki jest tam wykonywany to:
Kod $dane['foo'] = 'tralala'; $dane['bar'] = 'xyz'; // itd... require('./templates/szablon.php'); A w systemach z dodatkowym językiem require jest dodatkowo obudowany jednym ifem, który sprawdza czy szablon nie uległ modyfikacji i w razie potrzeby dopiero ładuje kompilator, który może już alokować dużo pamięci i mieć skomplikowane algorytmy. Oczywiście, jest kwestia obsługi błędów, sposobu jej realizacji, ale tu też nie ma specjalnie skomplikowanych rzeczy - trochę dodatkowych warunków i ewentualnie doładowywanie i wykonywanie bardziej skomplikowanego kodu, gdy wystąpi błąd. Kombinowanie z innym rozstawieniem warunków, szukanie podwójnie wykonywanych testów... - to już są małe detale. De facto wszystko redukuje się do stopnia złożoności interfejsu i właśnie objętości podstawowego kodu, który trzeba załadować. PHP też potrzebuje czasu na jego przeparsowanie, a jeśli podczas wykonywania nie ma właściwie nic, co mogłoby kod spowalniać, czas parsowania zaczyna być decydujący. I żeby nie było, kiedyś, bawiąc się w benchmarki, dołączyłem do nich dla zabawy minimalistyczny system szablonów, ale z identyczną zasadą działania, upakowany na paru kilobajtach kodu. I różnica na jego korzyść była wyraźnie widoczna... Tak więc nie ma tu żadnych herezji - za bardzo uogólniłeś, by się do czegoś przyczepić. Te "wydajne" systemy szablonów mają taką, a nie inną specyfikę, że za bardzo tam nie ma czego przyspieszać i właściwie wydajność sprowadza się do tego, ile rzeczy musi być załadowanych i z jakich elementów PHP skrypt korzysta... a na złość cioci mnóstwo osób twierdzi, że to właśnie dzięki wywaleniu pętli, warunków itd. system szablonów staje się szybszy. Ten post edytował Zyx 16.04.2009, 09:37:55 -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 74 Pomógł: 4 Dołączył: 7.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat tak naprawdę jedyne usprawnienie wydajności, jakie można uzyskać, to mniejsza objętość kodu do załadowania podczas uruchamiania skryptu i nic poza tym. czy smarty czy zend, czy inne paskudztwo czy tez prywatny system to parsowanie/renderowanie zajmuje podobana jednostke czasu, bo dzieki autoload z 1MB zrodla czy 60kB zrodla jadowane jest tylko to co potrzeba np 300 bajtow wiec ilosc kodu jest tu bez znaczenia moim zdaniem bo i tak nie jest ladowany -------------------- Skrypty php, ajax, javascript
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Moderatorzy Postów: 4 465 Pomógł: 137 Dołączył: 26.03.2004 Skąd: Gorzów Wlkp. ![]() |
Panowie - to nie miejsce na dyskusje. Są od tego tematy, ot chociażby: Temat: Widok_renderowanie_widoku
-------------------- To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness; chaotic, confused, vulnerability, to inform yourself. Think for yourself. Question authority. |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 869 Pomógł: 53 Dołączył: 20.10.2003 Skąd: Przeworsk Ostrzeżenie: (0%) ![]() ![]() |
Kombinujecie jak koń pod górkę.
IMHO zwykły include do php-owego pliku jest najlepszym rozwiązaniem. Takie klasy to tylko zbędne utrudnianie sobie życia i marnowanie cennego czasu. Nie jestem specjalistą w obiektowym programowaniu, ale jaki jest sens deklarowania, że konstruktor jest funkcją publiczną? Pisanie klasy dla jednej funkcji też nie jest zbyt rozważne. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 23.06.2025 - 11:16 |