Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: speedup generowania strony
Forum PHP.pl > Forum > PHP
elmozaur
Witajcie.
Moj problem jest taki:
strona generowana przez php zawiera duze ilosci dodatkow typu TinyMCE, jquery, pluginy funkcje liczace, sortujace itp.
Generalnie czas temu jakis okazalo sie ze stronka lekko "zamula sie" nawet przy przelaczaniu podstron.

Jakie sa metody keszowania,lub z doswiadczenia co mozecie polecic aby raz pobrane skrypty, pliki nie musialy byc ponownie pobierane...
A mze sa jakies metody keszowania czesci kodu PHP ?

za wszelkie info z gory dziekuje.
Grzesiek
dotangelo
Przenieś elementy statyczne na pod-domenę, ustaw "Cache Expire time", żeby nie musiał za każdym razem ich pobierać.
Skompresuj javascript/css, następnie użyj GZip, dla nich, oraz "dla outputu" HTML'owego.
Funkcje sortujące/liczące - to już jest oddzielny temat, poczytaj to oraz rozważ wprowadzenie innych algorytmów sortowania/liczenia.
Cache - oczywiście możesz użyć cache wbudowanego np. w Smarty albo tej klasy (bądź napisać swoją).

Jeśli chcesz więcej informacji, obczaj moją stopkę - Complex Optimization Guide, albo pytaj tutaj.
skrypta
z tym kompresowaniem css i js to lepiej sprawdz czy aby na pewno zaoszczedzisz czas, standardowo dostepne kompresory JS uzywaja base64 i z czasem dekompresji bywa roznie, czasami dekompresja zabiera wiecej czasu niz sciagniecie pliku bezkompresji, sprawdz jak jest w twoim przypadku

wtyczka firebug + yslow (lub page speed)
zakladka NET i zobacz czasu sciagania i wywolan na stronie, zerknij ktore elementy opozniaja najbardziej zaladowanie strony
troche wiecej wskazowek optymalizacji strony tutaj

na poczatek przerzuc pliki css na sama gore a pliki JS (jesli mozeliwe) na samdol przed element </body>
wlacz gzip ale wylacz gzipowanie plikow flv, swf jesli masz

wtyczka yslow prawde ci powie smile.gif
dotangelo
Cytat
z tym kompresowaniem css i js to lepiej sprawdz czy aby na pewno zaoszczedzisz czas, standardowo dostepne kompresory JS uzywaja base64 i z czasem dekompresji bywa roznie, czasami dekompresja zabiera wiecej czasu niz sciagniecie pliku bezkompresji, sprawdz jak jest w twoim przypadku


Skoryzstaj z tej metody, a wszystko będzie ok: http://forum.php.pl/index.php?showtopic=12...rt=#entry641430
zegarek84
to co kompresujesz to nie powinieneś za każdym razem jeśli treść się nie zmienia gdyż sszkoda mocy obliczeniowej... pozatym jeśli przeglądarka odebrała dane pliki js, css i img wcześniej to przy ponownym zapytaniu jesli nie zmienione wysyłaj odpowiedni nagłówek "HTTP/1.0 304 Not Modified" wtedy pliki nie będą pobrane po raz drugi... aby zmniejszyć ilość zapytań http przy następnym wywołaniu strony to ustawiaj w nagłówkach czas wygaśnięcia dla plików przez jaki na pewno danych plików nie zmodyfikujesz (co chwila o danym adresie js, css i img raczej nie będziesz zmieniał na serwerze ;p)....

co do tej kompresji co wspomniałem wyżej na początku zapisz gdzieś wersję skompresowaną a potem ją wysyłaj...

co do skrytów js to większość osób inicjując operacje na dokumencie kożysta z onload - to zdarzenie jest niby po wczytaniu całego dokumentu ale jest też po wczytaniu wszystkich obrazków na które musisz czekać aż się ściągną z neta - skożystaj w mozilli/operze z DOMContentLoaded... ogólnie poczytaj w google jak wpiszesz domready to sporo możesz się dowiedzieć o co w tej tematyce chodzi - na ie jest inny sposób - są gotowe rozwiązania w necie które dla wszystkich przeglądarek działają wcześniej niż onload a po załadowaniu DOM - jest jeszcze jeden sposób - wywołanie funkcji startującej możesz umieścić na końcu przed lub za </body> i będziesz miał wczytane do DOM wszystkie elementy powyżej a więc wszytkie elementy...

samo js zawsze się wykonuje od zera (mogłeś zaoszczędzić czas na jego wczytywanie tak jak wspomniałem wyżej)... zerknij na te algorytmy operacji js które się wykonują za jakiś czas świeżym umysłem i raczej często da się większość rzeczy zoptymalizować - może nie potrzebnie przy danym zdarzeniu przeszukujesz cały dom?? - może wszystkie potrzebne elementy było wczytać do tablicy a potem tylko do tej tablicy się odwoływać??...

co do tej strony nie musisz się tak samo stosować - ja mam to inaczej rozwiązane a przyokazji dodane zabezpieczenie przed hotlinkowaniem ale jakby idea jest taka sama:
Optymalizacja witryn w PHP
a na tej stronie jest wspomniane jak zrobić by strony szybko się ładowały także przy pierwszym wczytywaniu (nie musisz wszystko aż tak optymalizować):
Best Practices for Speeding Up Your Web Site

co do tych obrazków jeszcze na które się czeka podczas wczytywania to wysyłąj je z parametrem wysokości i szerokości żeby strona "nie skakała" - pewnie o czymś zapomniałem ale to już masz nakierowanie...

ps.
jak juz kolega wyżej nadmienił a dodam - nie wszystkie pliki warto kompresować gzip gdyż już wcześniej one są spakowane - oprócz flash nie warto też kompresować obrazków - no jedynie .bmp o ile jest duży to na nim na transferze zaoszczędzisz ale i chyba tu ni ewarto ;p - każdy inny kompresja gdzip w zasadzie nic nie da...
Fifi209
Cache ! Cache! Cache! Używaj cache to bardzo dobry mechanizm.

@up
Co do obrazków: moim zdaniem najlepiej zapisywać je w png, jakość do wagi ma się tutaj świetnie.

@topic
Najlepiej pokaż tą stronę. Bo z tego co piszesz wszystko leży w momencie przesyłania, a z nazwy tematu leży to już przy generowaniu.
zegarek84
Cytat(fifi209 @ 30.07.2009, 12:21:38 ) *
@up
Co do obrazków: moim zdaniem najlepiej zapisywać je w png, jakość do wagi ma się tutaj świetnie.

wiem - ale widzisz, że pisałem ogólnikowo - bmp normalnie to chyba nkt nie urzywa a co do niego i gzip to jako oftop napisałem jakby jednak komuś był potrzebny ;p... co do cache też pisałem ogólnikowo i podałem link gdzie też wspominają o wykożystaniu memcache aby minimalizować ilość zapytań sql oraz skomplikowanych operacji php... pozatym wysyłanie odpowiednich nagłówków na ponowną wizytę też bym nazwał cache gdyż jednak taka optymalizacja trochu potrafi odciążyć - no już samo przechowywanie skompresowanych wersji plików gotowych do wysłąnia to już każdy musi uznać jako jeden ze sposobów cache (w końcu nie kompresuje się za każdym razem tylko po modyfikacji...)....

ogólnie to jest dosyć szeroki temet ;p...
Fifi209
Cytat(zegarek84 @ 30.07.2009, 11:30:56 ) *
wiem - ale widzisz, że pisałem ogólnikowo - bmp normalnie to chyba nkt nie urzywa a co do niego i gzip to jako oftop napisałem jakby jednak komuś był potrzebny ;p... co do cache też pisałem ogólnikowo i podałem link gdzie też wspominają o wykożystaniu memcache aby minimalizować ilość zapytań sql oraz skomplikowanych operacji php... pozatym wysyłanie odpowiednich nagłówków na ponowną wizytę też bym nazwał cache gdyż jednak taka optymalizacja trochu potrafi odciążyć - no już samo przechowywanie skompresowanych wersji plików gotowych do wysłąnia to już każdy musi uznać jako jeden ze sposobów cache (w końcu nie kompresuje się za każdym razem tylko po modyfikacji...)....

ogólnie to jest dosyć szeroki temet ;p...


To tak jest to dość szeroki temat.

Cache używa się na różnych poziomach...i o tym też już było. winksmiley.jpg

Ogólnie:
- Jeżeli masz powiedzmy news'y na stronie, cachujesz to i jeżeli ktoś edytuje, usunie, napisze nowego to wtedy tylko podmieniasz plik cache. winksmiley.jpg
- SQL - analogicznie, jeżeli coś zmienia wartość to wywołujesz zapytanie (select) i zapisujesz wszystko do cache w postaci zserializowanej tablicy. (tak na moje oko)
skrypta
"co do tych obrazków jeszcze na które się czeka podczas wczytywania to wysyłąj je z parametrem wysokości i szerokości żeby strona "nie skakała"(...)"

skakac nie sobie skacze, w tym zadnej krzywdy nie ma, najwazniejsze zeby DOM nie musial byc przebudowywany ponownie dlatego wlasnie stisuje sie width/height przy obrazkach
Fifi209
Cytat(skrypta @ 3.08.2009, 23:24:07 ) *
skakac nie sobie skacze, w tym zadnej krzywdy nie ma, najwazniejsze zeby DOM nie musial byc przebudowywany ponownie dlatego wlasnie stisuje sie width/height przy obrazkach


Toś teraz dowalił, co ma rozmiar obrazka do DOM? Dokładnie tyle co CSS do DOM. ;>

P.S. Aby inni mogli zrozumieć, "stisuje sie" klawisz alt jak i słownik ortograficzny.
dotangelo
Width i Height powinno się stosować aby właśnie zapobiegać skakaniu. Ponadto, jeśli wyświetlasz zawsze obrazek wielkości 200x150px (width/height), a w rzeczywistości ma on 800x600px, to ySlow Ci powie że powinieneś go przeskalować.
skrypta
wyrazilem sie nieprecyzyjnie, chodzilo mi o ten aspekt:
http://code.google.com/speed/page-speed/do...ImageDimensions

"skakanie" jako negatywne odczucie wizualne dla uzytkownika to moim zdaniem nie jest glowny problem, problem to wydluzony czas ladowania strony z tego powodu

fifi209 > trzymajmy sie merytoryki, nie ma sie co ekscytowac
zegarek84
w linku co podałeś jest kotwica "#SpecifyImageDimensions" - i tam to co pisze... hmmm.. no co pisze?? - czytałeś nasze posty w ogóle?? - kto chce programować to przydało by się żeby znał angielski na poziomie podstawowym - a słownictwo z programowaniem jest inne więc można powiedzieć że na niższym niż normalny podstawowy a na dokumentację trochu lepiej ;p....

i teraz tak - kwestiję skalowania którą też miałem an myśli a nie wymieniłem omówił/wspomniał @dotangelo - co do tego "skakania" które może być to i ja pisałem a kiedy szybciej skrypty js wczytać to chyba też pisałem a czytać mi się nie chce ale pamięć mam fotograficzną ;p - ogólnie jeśli chcesz znaczć wszystkie askpekty wczetywania skryptów js przed onload to wpisz w gogle domready - to jest chyba zdarzenie dla jquery ale będzie więcej opisów standardowych - chyab też pisałem jak normalnie zrobić to dla większości przeglądarek z poziomu podstawowego - a jak nie to zacznij od:
addEventListener
i zainteresuj się dla mozilli i opery nauralniejszym DOMContentLoaded - ale daje Ci to tylko tyle i chyba tez wcześniej wspomniałem że nie musisz czekać na pobranie obrazków - więcej po stronie klijenta nic nie zrobisz ;p - a o nagłówkach na pewno pisałem i o optymalizacji skomplikowanych obliczeń po stronie js ;p
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.