Jak przyspieszyć bloga dla szybkich łącz


The_All_New_Atom_1280x1024

Do niedawna byłem zwolennikiem twierdzenia "Zmniejszając pliki graficzne do niezbędnego minimum mój blog będzie ładował się szybko" i spędzałem kolejne godziny na odchudzeniu obrazka o kilka bajtów – zmieniłem zdanie.

Jak szybko wyświetla się blog

Dla łącz szerokopasmowych (neostrada, chello, aster itp.) kryterium "jak szybko ładuje się strona" nie jest już wyłącznie jej rozmiar – o ile w tradycyjnych połączeniach dial-up (przez linię telefoniczną) największe znaczenie miała waga pliku (na modemie 56,6k plik 130 kB ściągał się ok. 19 sekund, plik 260kB ok. 38 sekund itd.) o tyle przy obecnych łączach megabitowych plik 130 kB ściąga się ok. 1 sekundę, a plik 260 kB 2 sekundy.

Ta większa połowa

Mniej ważna staje się ilość przesyłanych danych – czas wyświetlenia coraz częściej wynika z czasu jaki przeglądarka potrzebuje by porozumieć się z serwerem co do tego jakie pliki ma ściągnąć. Z każdym zapytaniem przeglądarki i odpowiedzią serwera czas wyświetlenia się strony wzrasta mniej więcej o 0,2 sekundy. Skutek? Blog składający się z 20 elementów już na starcie ma opóźnienie rzędu 4 sekund (0,2s x 20 elementów = 4 sekundy), do którego doliczamy jeszcze czas potrzebny na pobranie danych danych:

  • Blog ważący 260kB i składający się z 10 elementów załaduje się po ok. 4 sekundach (2 x 130kB = 2 sekundy, 10 x 0,2s = 2 sekundy)
  • Blog ważący 130kB i składający się z 30 elementów załaduje się po ok. 7 sekundach (1 x 130kB = 1 sekunda, 30 x 0,2s = 6 sekund)

I w ten sposób mniejszy blog ładuje się dłużej niż większy. Różnica trzech sekund niby nie jest duża, ale co jeśli ilość elementów wzrośnie do 50, 60, 100? Postanowiłem zebrać więcej danych i jak zwykle celem stała się lista prenumerowanych kanałów RSS:

Zestawienie blogów i opóźnień wynikających z liczby części składnich

s = sekund(a), el = elementy/ów

  1. zielony bloger – 109 el. = 21,8s opóźnienia
  2. AntyWeb – 93 el. = 18,6s opóźnienia
  3. e-Biznes i Programy Partnerskie – 82 el. = 16,4s opóźnienia
  4. Polski Blogger – 80 el. = 16s opóźnienia
  5. Aula Polska – 73 el. = 14,6s opóźnienia
  6. experymenty informatyczne – 71 el. = 14,2s opóźnienia
  7. BlueMan devBlog – 70 el. = 14s opóźnienia
  8. IT Blog – 56 el. = 11,2s opóźnienia
  9. Kartonki – 46 el. = 9,2s opóźnienia
  10. WebAudit Blog – 45 el. = 9s opóźnienia
  11. eM jak Media – 43 el. = 8,6s opóźnienia
  12. Kornakiewicz Web Log – 42 el. = 8,4s opóźnienia
  13. kminek.pl – 41 el. = 8,2s opóźnienia
  14. Świadome-finanse – 37 el. = 7,4s opóźnienia
  15. Tommalla’s IT Blog – 37 el. = 7,4s opóźnienia
  16. przełam sieć – 35 el. = 7s opóźnienia
  17. testblog – 34 el. = 6,8s opóźnienia
  18. zaistniejwsieci – 33 el. = 6,6s opóźnienia
  19. eRIZ’s weblog – 33 el. = 6,6s opóźnienia
  20. net to – 26 el. = 5,2s opóźnienia
  21. Grafon Weblog – 22 el. = 4,4s opóźnienia
  22. Zarabianie na blogach – 19 el. = 3,8s opóźnienia
  23. identity 2,0 – 16 el. = 3,2s opóźnienia
  24. TopBlogger10 el. = 2s opóźnienia

Widać, że rozpietość jest znaczna, ale jak zmniejszyć liczbę plików do absolutnego minimum?

Jak zmniejszyć opóźnienie

Odrzucając możliwość wyłączenia wtyczek, dodatków, ogołocenia bloga z obrazków lub prewencyjnego zlikwidowania całej strony do dyspozycji mamy jeszcze drugą opcję zazwyczaj wymagającą wiedzy z zakresu HTML, PHP, JavaScript, CSS i obróbki grafiki.

Jutro pierwszy z dwóch wpisów miniserii o tym, jak krok po kroku pozbyć się niechcianego balastu w postaci zbyt dużej liczby plików bez zmiany wyglądu bloga. Zapraszam!

Kommentarze: 31 »

  • Krzysztof Lis pisze:

    Fajnie, że jestem wysoko (nisko?) w zestawieniu, ale to pewnie dlatego, że mój blog jest brzydki i praktycznie nie posiada graficznych elementów wystroju. ;)

  • Robert Drózd pisze:

    Najbardziej zwalniają ładowanie wszystkie elementy zewnętrzne takie jak MyBlogLog czy inne widżety tego typu. W przypadku elementów ładowanych z tego samego serwera, są one bardzo często keszowane i ładują się tylko raz.

    • Łukasz Sobek pisze:

      Dobrze,że chociaż tyle :) Keszowanie Awatarków MyBlogLog byłoby ciekawe, ale przy tej ilości użytkowników nie zmieściłoby wszystkich. Ciekawe czy i jak awatarki lądują w keszu – przecież to obrazek jak każdy inny.

  • ledo pisze:

    widzę, że niestety jestem w czołówce, trzeba będzie trochę nad tym popracować jak będzie chwila czasu

  • Pavel pisze:

    Ja mam pytanie następujące: Jak zmierzyć opóźnienie?
    Tj. Czym się posługiwałeś?

    Nie zapominałbym także o jakości hostingu, bo to z jakim opóźnieniem odpowie serwer na pojedyncze zapytanie zależy też od tego. Co za tym idzie, ilość czasu potrzebnego na załadowanie 10 elementów o tej samej wielkości na jednym blogu może być zupełnie różna niż na innym blogu – funkcja przyrostu czasu do przyrostu plików o tych samych wielkościach niekoniecznie musi być liniowa dla 2 różnych blogów.

    Akurat obserwuję to negatywne zjawisko u siebie, więc uczulam. :)

    • Łukasz Sobek pisze:

      Jak zmierzyć opóźnienie? Tj. Czym się posługiwałeś?

      Dziękuję :). O tym nie napisałem. Do zliczenia liczby elementów korzystałem z panelu info przeglądarki Opera, ponieważ daje dokładne wyniki. Reszta to obliczenia: ilość elementów x 0,2 sekundy = opóźnienie. Wymienione 0,2 sekundy wynika ze sposobu pobierania danych: najpierw przegladarka komunikuje się jaki element pobrać a potem go pobiera (chyba, że jest zapisany w keszu) i tak jest za kazdym razem niezaleznie od tego czy elementów jest 20 czy 200.

      Nie zapominałbym także o jakości hostingu, bo to z jakim opóźnieniem odpowie serwer na pojedyncze zapytanie zależy też od tego.

      Tak, dobry hosting jest równie ważny, ale z perspektywy bloggera trudniej jest zmienić hosting niż podciągnąć bloga. Nawet przy słabym hostingu dużo zyskamy gdy elementów będzie np. 20 mniej.

      PS. Funkcja przyrostu plików w czasie zawsze jest geometryczna ;)

  • Pavel pisze:

    Z tą funkcją to faktycznie zamotałem, zwłaszcza siebie. :)

    Niemniej właśnie mi przyszedł inny pomysł – pipeling.
    Jakby wziąć pod uwagę użytkowników używających tej funkcji nowoczesnych przeglądarek, cały misterny plan dodawania 0,2s do każdego zapytania idzie w las. ;)
    A udział tych przeglądarek, jak pewnie wiesz, stale rośnie.

    http://www.mozilla.org/projects/netlib/http/pipelining-faq.html

    • Szymon pisze:

      Pipeling ma również kilka ograniczeń, więc nie zaszkodzi ograniczać liczbę plików. Wszystko jednak z głową, bo popaść w paranoję łatwo ;)

    • Łukasz Sobek pisze:

      Szczerze? – Nie wiedziałem, że coś takiego istnieje, znam tylko określenie „multithreading” i nie wiem czy to jest to samo. Dziękuję za linka i umozliwienie zapoznania się z tematem :)

  • Szymon pisze:

    Byłbym zapomniał…
    Rozumiem, że porównanie jest dla głównych stron. Warto by to chyba podkreślić. Na stronach komentarzy sytuacja zmienia się przecież diametralnie.

    Swoją drogą złapałeś mnie akurat przed dietą. Choć teraz to już raczej tylko sprawdzenie, na co można sobie pozwolić w nowym szablonie. Coraz bardziej kusi mnie by kolejny był mniej ascetyczny, więc gdzieś będzie trzeba to wyrównać.

    • Łukasz Sobek pisze:

      Tak, chodzi o strony główne, czyli tam, gdzie zazwyczaj czytelnik działa bez polecenia. Strony komentarzy siłą rzeczy są większe (np. obecnie na tej stronie jest 35 elementów).

      Asceza to ćwiczenie a nie styl życia ;)

  • Marek Miller pisze:

    Noo, ciekawe ciekawe. Czekam na więcej w tym temacie :)

  • lavinka pisze:

    Serwer ma znaczenie. Odkąd wrzucam zdjęcia na picasę i z niej ahrefami na warszavkę-zdjęcia ładują się o niebo prędzej niż z te z serwera wirtualnej. Ale już zwiastuny albumów na picasie robione zdaje się w ramkach-spowalniają stronę i to ostro. Zastanawiam się czy nie zrobić zwykłych banerów. a href+img

    • Łukasz Sobek pisze:

      Metoda prób i błędów nigdy nie straci na aktualności :) Z tymi serwerami byłoby logiczne, google musi obsłuzyć dużo więcej osób niż wp, więc ich serwery raczej będą szybsze. Z drugiej strony ciekawe jak te zwiastuny są robione, skoro aż tak spowalniają.

  • [...] Każdy może zrobić coś z niczego. Druga część miniserii będzie o tym, jak powyższy sposób zastosowałem w innych miejscach szaty graficznej topblogger.pl i strona główna ma tylko 10 elementów. [...]

  • tfiedoruk pisze:

    Musisz zaktualizować dane bo zmieniłem thema ;)

  • tfiedoruk pisze:

    Teraz mam opóźnienie 4,4s i 27 elementów na nowym layu (jak wyłączy się banner reklamowy to jeszcze mniej).

    Ile robiłeś prób? Bo u mnie to różnie w czasie wygląda:

    22 Feb 2008 21:29 CET 4.81 seconds
    22 Feb 2008 21:28 CET 6.63 seconds
    22 Feb 2008 21:27 CET 7.45 seconds
    22 Feb 2008 21:21 CET 4.45 seconds

    Więc i lepiej i gorzej.

    Pod uwagę trzeba też brać fakt w jakim trybie pracuje php na danym serwerze gdzie jest Blog. Tryb cgi powoduje wolniejsze pierwsze wczytywanie, a php jako mod apache tego już nie powoduje.

    • Łukasz Sobek pisze:

      To co opisałem raczej niewiele ma wspólnego z php, bo ono jest wewnetrzną sprawą serwera. Tu chodzi o komunikację miedzy serwerem i przeglądarką, a wartość 0,2 sekund, która przy 27 elementach sumarycznie bedzie wynosiła 5,4 sekundy jest wartością przyblizoną. Zresztą potwierdziły to twoje testy – raz szybciej, raz wolniej ale np. trzech sekund zwyczajnie nie da rady wydusić ze strony z 27 elementami. :)

  • [...] nie czytaliście wczorajszego wpisu i w pewnym momencie pogubicie się zapraszam do wpisów Jak przyspieszyć bloga dla szybkich łącz i 8 kroków do zmniejszenia ilości obrazków na stronie które zawierają pierwsze dwa [...]

  • eRIZ pisze:

    czas wyświetlenia coraz częściej wynika z czasu jaki przeglądarka potrzebuje by porozumieć się z serwerem

    Nie zgodziłbym się z tym… Coraz częściej jest to jednak hosting. ;/

    sekund niby nie jest duża, ale co jeśli ilość elementów wzrośnie do 50, 60, 100?

    Lepiej IMHO się skupić na optymalizacji po stronie serwera… Co do liczby elementów, to można się spierać – do jednego serwera może być dłuższa, a do innego krótsza droga. Trzeba jeszcze uwzględnić, czy elementy są ściągane przez keep-alive…

    • Łukasz Sobek pisze:

      Nie zgodziłbym się z tym… Coraz częściej jest to jednak hosting. ;/

      Porównałbym to do twierdzenia, że jeśli naprawimy drogi to nie będzie już żadnych wypadków. Strona ładująca się w trzy sekundy może sobie pozwolić na wolniejszy serwer niż strona ładująca się w trzydzieści.

      Lepiej IMHO się skupić na optymalizacji po stronie serwera… Co do liczby elementów, to można się spierać – do jednego serwera może być dłuższa, a do innego krótsza droga. Trzeba jeszcze uwzględnić, czy elementy są ściągane przez keep-alive…

      Zgadzam się, że wszystko trzeba uwzglednić i o wszystko można się spierać. Rozumiem, że dla kogoś kto ma dostęp przebudowa serwera może dać bardzo dobre skutki, ale większość z nas nie jest w tanie dokupić dwóch kości pamięci, włożyć je w płytę główną i mieć sprawę z głowy. A zmiana serwera jest dość kłopotliwym przedsięwzięciem. Najprostszym rozwiązaniem jest zmniejszyć obciążenie serwera (poskarżyć się hostowi też trzeba :)

  • eRIZ pisze:

    Porównałbym to do twierdzenia, że jeśli naprawimy drogi to nie będzie już żadnych wypadków.

    IMHO, nie. :P
    Nawet czysty tekst przesyłany przez LZMA będzie przesyłany wieczność, jeśli hosting jest do bani. (hipotetycznie)

    Najprostszym rozwiązaniem jest zmniejszyć obciążenie serwera

    Heh, ciekawe, jak. Jeśli hosting sobie nie radzi z kilkoma require bez zapytań, bo jeden z klientów hostingu współdzielonego sobie kampanię reklamową urządził, to o czym rozmawiamy…? I to, co ciekawe, w jednym z „porządnych” klastrów, taka sytuacja się zdarza kilka razy na rok…?

  • Kornakiewicz pisze:

    A ja właśnie zabieram się za zmianę szablonu, choć i tak najwięcej trwa pobieranie MBL i statystyk zewnętrznych.

Zostaw komentarz