Strona wczytuje się szybciej — i wiemy dokładnie o ile
Zaczęliśmy od pomiaru, żeby nie zgadywać. Ping do serwera wynosił 25 ms przy zerowych stratach, więc sieć była w porządku. Cały koszt siedział w tym, ile bajtów wysyłamy i ile czasu zajmuje ich przygotowanie.
Liczby przed i po, pierwsze wejście z pustym cache przeglądarki:
| | transfer | pełne wczytanie | |---|---|---| | ekran logowania | 5 525 KB → 520 KB | 7 717 ms → 665 ms | | strona odkrywania | 4 520 KB → 2 402 KB | 3 850 ms → 1 576 ms |
Największa pojedyncza strata: kompresja, która nie działała
W konfiguracji serwera kompresja była włączona, ale lista typów plików pozostała zakomentowana. Efekt: dokument HTML szedł spakowany, a cały kod strony leciał surowy. Po naprawie ta jedna rzecz zdjęła 1 695 KB do 440 KB.
Doszło do tego podawanie gotowych, spakowanych plików zamiast pakowania ich przy każdym żądaniu — przy jednym rdzeniu procesora to różnica, którą widać.
Obrazki: 5 847 KB → 617 KB
Tło ekranu logowania ważyło 5 MB i pobierało się w teście 12,6 sekundy. Na ekranie powitalnym, czyli pierwszej rzeczy, jaką ktoś u nas widzi. Było zapisane w formacie z kanałem przezroczystości, którego ten obraz w ogóle nie używa — sama ta zmiana zbiła je do 391 KB, bez utraty rozdzielczości.
Logo ważyło 426 KB i wyświetla się w rozmiarze 80 pikseli, a jest na każdej podstronie. Oryginał zachowaliśmy pod inną nazwą do podglądów w mediach społecznościowych — tam wagi nie widać, bo pobierają go roboty, nie odwiedzający.
Druga tura: czas po stronie serwera
Po transferze przyszła kolej na to, ile serwer myśli. Wynik mierzony już na samym serwerze, bez narzutu sieci: strona odkrywania 80 ms, ekran logowania 12 ms.
Największa pozycja: 16 077 okładek anime trzymało adresy do cudzych serwerów. Każda szła w pełnym rozmiarze z obcego CDN-u, z osobnym nawiązaniem połączenia. Pobraliśmy je do siebie i przeskalowaliśmy — 16 027 z 16 027, zero błędów, 371 MB. Okładka nigdy nie wyświetla się większa niż ~300 pikseli, więc oryginałów świadomie nie trzymamy; tam, gdzie przetworzenie dałoby plik cięższy niż źródło, zostawiamy bajty w spokoju.
Przy tej samej okazji naprawiliśmy realny błąd: w podpowiedziach wyszukiwarki i wynikach dla anime obrazki bywały zepsute, bo kod doklejał ścieżkę lokalną do adresu zewnętrznego.
Uczciwa uwaga o pomiarach
Pomiary z drugiej tury robiliśmy na serwerze, i to nie jest kosmetyka. Ping do serwera wzrósł tego dnia z 25 do 53 ms, a przy szyfrowanym połączeniu samo to dokłada około 170 ms. Porównywanie tych liczb z poprzednimi z zewnątrz mówiłoby więcej o łączu tego dnia niż o serwisie. Liczby bajtów są odporne na ten problem i podajemy je bez zastrzeżeń.