Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> MVC i optymalizacja
MWL
post 8.04.2009, 18:45:01
Post #1





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

Ostrzeżenie: (0%)
-----


Witam, chcę zapytać czy ktoś zgodzi się z tezą że MVC spowalnia działanie stron. Chodzi mi o to że jeśli najpierw model pobiera wszystkie potrzebne dane a potem dopiero są wszystkie wyświetla, trzeba bez sensu czekać na załadowanie danych, gdy podczas zwykłych, standardowych stron, mogli byśmy korzystać z metody flush(). Co o tym sądzicie? A może znacie jakieś inne, sprytne rozwiązania.

Ten post edytował MWL 8.04.2009, 18:45:34


--------------------
Wpadaj na mój kanał o PHP. Dużo mięsa 🥩!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
erix
post 8.04.2009, 18:58:15
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




W ogóle, obiektowy model (paradygmat) spowalnia działanie skryptów. Bez paranoi; jeśli byś pisał wszystko strukturalnie, to przy większych projektach więcej czasu straciłbyś na poszukiwaniach gdzie-co-jest niż stratach w generowaniu stron.

Cytat
standardowych stron, mogli byśmy korzystać z metody flush().

To znaczy? Jakoś nie bardzo sobie to jestem w stanie uzmysłowić.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
MWL
post 8.04.2009, 19:03:10
Post #3





Grupa: Zarejestrowani
Postów: 493
Pomógł: 32
Dołączył: 14.04.2008
Skąd: Lenkowski.net

Ostrzeżenie: (0%)
-----


Wiem że struktura nie jest fajna, ale chodzi mi o to że jeśli mamy dajmy na to nasza klasę, to można zauważyć, że elementy ładują się kolejno, ale nie jest to realizowane za pomocą żadnych skryptów. I jeśli mam powiedzmy bazę danych, na której siedzi w tym samym momencie około 100000 userów baza będzie działała wolno. Co jeśli działali byśmy na zasadzie: weź dane, wypisz (flush), następne zapytanie select, kolejny flush i powinno działać to szybciej. Tym czasem MVC pobiera wszystko (wszystkie zapytania do bazy) następnie dopiero rysuje widoki.


--------------------
Wpadaj na mój kanał o PHP. Dużo mięsa 🥩!
Go to the top of the page
+Quote Post
piaseq
post 8.04.2009, 19:50:46
Post #4





Grupa: Zarejestrowani
Postów: 161
Pomógł: 25
Dołączył: 6.09.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Moim zdaniem nawet jeśli przyniosłoby to jakieś korzyści w postaci wzrostu wydajności, to koszt sprzętu niwelującego tą różnicę przy modelu obiektowym byłby znacznie mniejszy nakładu dodatkowego czasu potrzebnego na modyfikację takiego serwisu.
Go to the top of the page
+Quote Post
erix
post 8.04.2009, 20:04:08
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
to można zauważyć, że elementy ładują się kolejno, ale nie jest to realizowane za pomocą żadnych skryptów.

No jak nie...? Przecież wiele elementów, to skrypty JS działające na zasadzie progressive enhancement...

Cytat
Tym czasem MVC pobiera wszystko (wszystkie zapytania do bazy) następnie dopiero rysuje widoki.

To raczej nie kwestia obciążenia CPU, ale pamięci.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
guitarnet.pl
post 10.04.2009, 19:03:30
Post #6





Grupa: Zarejestrowani
Postów: 74
Pomógł: 4
Dołączył: 7.03.2008

Ostrzeżenie: (0%)
-----


moze lekko nie na temat ale polecam ten filmik albo ksiazke ktora ten osobnik (autor wtyczki YSlow do firebuga) napisal: http://www.youtube.com/watch?v=BTHvs3V8DBA

Moje doswiadczenia sa podobne, o malo nie dalem sie zwariowac na punkcie optymalizacji mvc, srubujac czasu pomiedzy operacjami o kolejne microsekundy ale powyzszy filmik rzucil nowe swiatlo na optymalizacje.
Wg Steve'a 5% rezultatu optymalizacji przypada na strone serwera a pozostale 95% na strone klienta
Nie umniejszajac waznosci pisania szybkiego kodu php i jego optymalizacji mozna zauwazyc ze optymalizujac php operuje sie na microsekundach a optymalizujac juz wygenerowany html operuje sie na sekundach co przeklada sie na fizyczne skrocenie czasu zaladowania strony

obiektowka spowalnia, oczywiste i pozera wiecej pamieci ale straty wg mnie z tym zwiazane sa znikome w porownaniu do plusow
aby minimalizowac te straty mamy mnostow mechanizmow do dyspozycji, chociazby cacheowanie na roznym poziomie, od query cache poczawszy przez cachowanie wynikow zapytan na poziomie php czy cachowanie widowko czy tez calego buffor'a. Czas generowania stron z kilkupoziomowym cachem niewiele odbiega od czasu generowania strukturalnego php czy statycznego html

Luzny przyklad jednego z projektow
1. zoptymalizowany mvc z 3 zapytaniami wykonuje sie w 0.013s
2. zoptymalizowany mvc 3 widoki z cache wykonuje sie w 0.0011s
3. zoptymalizowany mvc caly z cache wykonuje sie w 0.0009s
4. statyczny html 0.0004s
Laczny czas ladowania html do przegladarki 2.2s z czego jak widac wygenerowanie koncowego htmla z php jest znikoma czescia procesu

1. optymalizacja z uzyciem YSlow etags, expires headers skraca czas z 2.2s do 0.9s przy drugim ladowaniu
2. "css spread" lub rozlozenie obrazkow na 2 subdomeny skraca czas do 0.55s
3. przelozenie css na gore HEAD i JS tuz przezd </BODY> skraca czas jedynie do 0.45 aczkolwiek uzytkownik widzi strone duzo szybciej

Ktos ma jakies doswiadczenia w tym kierunku? gdzie co i jak drastycznie przyspiesza strone?


--------------------
Skrypty php, ajax, javascript
Go to the top of the page
+Quote Post
dr_bonzo
post 10.04.2009, 19:39:39
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Cytat
Co jeśli działali byśmy na zasadzie: weź dane, wypisz (flush), następne zapytanie select, kolejny flush i powinno działać to szybciej. Tym czasem MVC pobiera wszystko (wszystkie zapytania do bazy) następnie dopiero rysuje widoki.

Zawsze pozostaje ci przejsc na klasyczny wzorzec SC, lub TBWK.


*) SC = spagetti code [sql + php + html wymieszany obok siebie]
TBWK = totalny balagan w kodzie


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
vokiel
post 10.04.2009, 20:57:10
Post #8





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


@guitarnet.pl: Odnośnie optymalizacji, tej części po stronie klienta dorzucę parę jeszcze:
4. Kompresja js
5. Złączenie wielu plików js i css w jeden (oczywiście jeden js i jeden css winksmiley.jpg)
6. css sprite - czyli łączenie pojedynczych obrazków w jeden (przykład jquery ui)


--------------------
Go to the top of the page
+Quote Post
guitarnet.pl
post 10.04.2009, 21:06:35
Post #9





Grupa: Zarejestrowani
Postów: 74
Pomógł: 4
Dołączył: 7.03.2008

Ostrzeżenie: (0%)
-----


@vokiel: swieta prawda smile.gif

4. kompresji js osobiscie unikam ze wzgledu na dziwne zachowanie jquery, zaobserwowalem bledy js zglaszane przez firebuga z silnika jquery podczas gdy niekompresowany plik js nie mial tych bledow, co najdziwniejsze losowo, polecam natomiast minimalizacje bialych znakow co jest nieszkodliwe zarowno css jak i js
alternatywnie do kompresji js mozna wlaczyc gzip, przy zalozeniu ze te 20% ludzi ktorzy uzywaja przegladarek bez gzipa nie zobaczy strony, kwestia podejscia

z wlasnych eksperymentow moge powiedziec ze przerzucenie wszystkich plikow JS na koniec pliku html zamiast w HEAD daje przyspieszenie ponad 50%. W wiekszosci przegladarek jak napotkane zostanie <script> to przegladarka czeka na calkowite sciagniecie tego pliku i wstrzymuje renderowanie strony i sciaganie innych plikow
mozna ten proces dokladnie zobaczyc w zakladce NET firebuga


--------------------
Skrypty php, ajax, javascript
Go to the top of the page
+Quote Post
Crozin
post 10.04.2009, 22:39:42
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
przy zalozeniu ze te 20% ludzi ktorzy uzywaja przegladarek bez gzipa nie zobaczy strony, kwestia podejsci
Przeglądarki serwują Ci takie coś jak HTTP_ACCEPT_ENCODING na podstawie którego możesz określić czy dana przeglądarka obsługuje gzip czy nie.
Go to the top of the page
+Quote Post
erix
post 10.04.2009, 23:33:57
Post #11





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
4. Kompresja js

Bujda na kółkach. Opłaci się gzipnąć i wysłać do klienta. Dekompresja kodu JS nieraz zajmuje parę sekund, pogooglaj, a znajdziesz odpowiednie materiały.

Cytat
6. css sprite - czyli łączenie pojedynczych obrazków w jeden (przykład jquery ui)

Nieraz tak się nie da... Choćby powtarzalne tła. Elementy interfejsu - owszem, ale tła - w większości przypadków nie da rady.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
vokiel
post 12.04.2009, 13:56:52
Post #12





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Odnośnie kompresji js źle się wyraziłem, miałem na myśli usunięcie zbędnych znaków, w taki sam sposób można postąpić z css. Nie chodziło mi o kompresję na zasadzie zastępowania nazw funkcji etc. Użyłem złego słowa.
A co do usuwania zbędnych znaków powoduje to tylko zmniejszenie objętości plików, co za tym idzie ciut szybsze ściąganie u klienta.

@erix
Tak jak najbardziej, nie da się wszędzie użyć css sprite. Ale jest to bardzo przydatne w przypadku wielu małych ikonek, typu te w edytorach WYSIWYG. Co jedno żądanie i pobranie jednego pliku to nie 30 winksmiley.jpg


--------------------
Go to the top of the page
+Quote Post
guitarnet.pl
post 14.04.2009, 16:57:47
Post #13





Grupa: Zarejestrowani
Postów: 74
Pomógł: 4
Dołączył: 7.03.2008

Ostrzeżenie: (0%)
-----


@vokiel
wersja z usunieciem bialych znakow to nazywa sie minified
wersja pliku compressed to w przypadkach w ktorych sie spotkalem uzywa np base62 encode wliczajac w to zmiane powtarzajacych sie nazw zmiennych, funkcji itp
kompresja gzip to co innego aczkolwiek zgodze sie ze nalezy uwaznie stosowac obie wersje

@erix
zgodze sie, z moich doswiadczen wynika ze np jquery kompresowany base62 ma tendencje do dziwnych zachowan (o czym wspomina Steve w powyzszym filmie) jak zauwazyles taka dekompresja pochlonie jakis czas, czy to wewnetrzna base62 czy gzip, warto sprawdzic czy zaoszczedzony czas na transferze np 150kB jest wiekszy niz sciagneiciu 15kB i dekompresji szczegolnie na wolniejszych przegladarkach/komputerach, w moim przypadku ma
zastanawiam sie jednak jak ma sie algorytm gzip do kompresji base62, co lepsze, wady, zalety, tu troche brakuje mi wiedzy?


jest jeszcze jeden aspekt - ladowanie reklam.. ostatnio zauwazylem bardzo duze problemy arbomedii, smartcontext i tradedoubler przy ladowaniu ich plikow, jakkolwiek zoptymalizuje strone to wszystko pada na leb jak tylko napotka na jeden z tych plikow,
mistrzem jest smartcontext ktory laduje podwojnie wiekszosc plikow, laduje w ciemno biblioteke jquery 55kB i 90% z plikow uzywa naglowka 301 dla swoich gif'ow i js.. porazka. czas ladowania zoptymalizowanej strony spada z 1.12s do 6s


--------------------
Skrypty php, ajax, javascript
Go to the top of the page
+Quote Post
erix
post 14.04.2009, 18:22:27
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ja sobie kompresor base62 darowałem, gzipa zostawiam.

O ile base62 jest męczony przez silnik JS, to gzip przez natywne mechanizmy przeglądarki (patrz: kompresja strumienia HTTP). Wnioski nasuwają się same. winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.06.2025 - 06:09