x

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt

Optymalizacja aplikacji po stronie serwera

Hosting rzadko ma wpływ na prędkość

autorzy: Paweł Kiśluk, Łukasz Bakaj

Serwer (zwany inaczej hostingiem WWW) ma bezpośredni wpływ na wszystkie opóźnienia, które wynikają z generowania strony dla każdego użytkownika. Kiedy klika on w link i czeka ten ułamek sekundy (czasem nawet kilka sekund!), to czeka właśnie na uruchomienie serwera. Hosting jednak rzadko ma wpływ na prędkość wczytywania zdjęć lub to, czy strona będzie się „zacinać”. Dlatego przede wszystkim należy skupić się na odpowiedniej optymalizacji aplikacji. W tej części naszego poradnika podajemy garść zaleceń – sprawdź, co zrobić, żeby Twoja witryna działała szybciej.

Optymalizacja reguł w .htaccess / nginx, np. funkcje Expires i Cache-Control w .htaccess

Dzięki niej będziesz mógł ustalić datę ważności wszystkich opublikowanych plików. Optymalizacja reguł daje znać przeglądarce, kiedy będzie musiała ponownie pobrać ten sam element. Co to znaczy? Przeglądarka nie będzie pobierać tego samego elementu przy każdej wizycie użytkownika. Pliki zapisywane są w pamięci przeglądarki, dzięki czemu możemy zmniejszyć obciążenie serwera, przyśpieszyć ładowanie strony i wczytywanie się podstron.

Funkcja Cache-Control umożliwia więcej działań. Informuje przeglądarkę, kiedy dany plik wygaśnie i będzie konieczne jego ponowne pobranie. Możesz wykorzystać Cache-Control przez serwery proxy oraz CDN, czyli Content Delivery Network. Pozwoli to na dostosowanie czasu w zależności od typu dostępu. Wartości zawarte w nagłówkach zawierają czas (w sekundach!), po którym pliki wygasną.

Funkcje Expires i Cache-Control pomagają przyśpieszyć wczytywanie stron, a tym samym usprawniają działanie sklepów i aplikacji internetowych. Efekt jest korzystny nie tylko dla serwera, ale dla każdego użytkownika, który wchodzi na naszą stronę. Cache-Control będzie przydatny szczególnie przy większych portalach – wszystko dzięki większej liczbie możliwości konfiguracyjnych. Pamiętaj, że część usługodawców hostingów od razu włącza nagłówki w plikach statycznych na serwerach każdego klienta.

Przykładowe ustawienie cache:

       # Media: images, icons, video, audio, HTC

        location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|$

          expires 1M;

          access_log off;

          add_header Cache-Control “public”;

        }

        # CSS and Javascript

        location ~* \.(?:css|js)$ {

          expires 1y;

          access_log off;

          add_header Cache-Control “public”;

        }

abstrakcja

Użycie kompresji gzip, czyli kompresji tekstowej

Dlaczego trzeba na to zwrócić uwagę? Przy włączeniu kompresji gzip możemy być pewni, że serwer będzie kompresować dane w sposób, którego użytkownik nie zauważy w trakcie przeglądania strony czy sklepu. Dane będą dekompresowane dopiero przez przeglądarkę. Taka kompresja pozwala oszczędzić miejsce na serwerze, a sama strona będzie się włączać dużo szybciej.

Kompresji gzip można poddać pliki arkusza stylów CSS, pliki HTML, kody JavaScript i wszelkie inne treści, które są wysyłane bezpośrednio do przeglądarki użytkownika w postaci tekstu.

Przykładowe ustawienie gzip:

gzip  on;

  gzip_http_version 1.0;

  gzip_comp_level 2;

  gzip_min_length 1100;

  gzip_buffers     4 8k;

  gzip_proxied any;

  gzip_types

    # text/html is always compressed by HttpGzipModule

    text/css

    text/javascript

    text/xml

    text/plain

    text/x-component

    application/javascript

    application/json

    application/xml

    application/rss+xml

    font/truetype

    font/opentype

    application/vnd.ms-fontobject

    image/svg+xml;

  gzip_static on;

  gzip_proxied        expired no-cache no-store private auth;

  gzip_disable        "MSIE [1-6]\.";

  gzip_vary           on;

Aktualizacja wersji interpretera PHP

Jak przy większości aktualizacji, nowa wersja PHP jest szybsza od poprzedniej. Aktualizacje są tworzone z obserwacji pracy użytkowników oraz zgłaszanych przez nich problemów. Jeśli jakiś kod nigdy nie był użyty,
w nowszej wersji zostanie on całkowicie pominięty.

Optymalizacja bazy danych

Im nowsza wersja bazy danych, tym mniej jednoczesnych połączeń i krótszy czas wykonywania zapytań MySQL. Podobnie jak przy PHP, nowsza wersja oznacza większą i lepszą wydajność. Jednak migracja danych na nową wersję powinna być wykonywana z dużą ostrożnością! Warto również spróbować zoptymalizować zapytania SQL, np. wykorzystać odpowiednie silniki baz danych i indexy.

Bardziej skomplikowane matchowanie (obliczenia) jest wykonywane po stronie backendu, a nie samej bazy danych. Dzięki analizie, która wykaże, co dana aplikacja ma wykonać, trzeba będzie wywnioskować, jakie zapytania mogą być uruchomione. Przy LEFT/INNER JOIN i ORDER będzie trzeba dobrać odpowiednie indexy na kolumny. Wybranie dopasowanej technologii do potrzeb to podstawa. Przy wyszukiwaniu pełnotekstowym sprawdzi się Elasticsearch i Mariadb. Pamiętaj, że Java zajmuje sporo dostępnych zasobów serwera. Jeśli planujesz duże zbiory danych ( >1 mld ) i zamierzasz na nich wykonywać obliczenia, to wspomniana wyżej Mariadb może nie podołać zadaniom. Tutaj lepiej sprawdzą się bazy kolumnowe. Maria za to doskonale sprawdzi się przy mniejszych zbiorach danych.

kodowanie

Wykorzystanie protokołu HTTP/2, HTTP3

Protokół HTTP (z ang. Hypertext Transfer Protocol) jest zestawem reguł, według których przebiega komunikacja w sieci Web. Jest to oczywiście mocne streszczenie tego, co HTTP zawiera. W tym przypadku komunikacja oznacza żądania klienta (najczęściej jest to życzenie stworzenia przeglądarki WWW), które dotyczą konkretnych danych, oraz odpowiedzi serwera HTTP. Nowsza wersja protokołu zapewnia wydajniejsze działanie sieci Web. Pliki są pobierane w odpowiedniej kolejności, a zapytania kompresowane. Protokół HTTP/2 sprawia, że działanie sieci Web jest znacznie wydajniejsze. Na chwilę obecną z tego standardu korzysta około 15 proc. witryn – zalety nowej wersji protokołu są na tyle kuszące, że niedługo będzie standardem. Zrób krok w kierunku internetu przyszłości: wykorzystaj zalety HTTP2 związane z SEO i faktu, że zdecydowana większość stron działa w pełnym szyfrowaniu SSL. Ostatnią wersją protokołu jest HTTP/3, który w przeciwieństwie do poprzednich wersji nie opiera się na TCP (protokół sterowania transmisją), tylko wykorzystuje on protokół transportowy UDP (protokół pakietów użytkownika). Jest to protokół bezpołączeniowy, więc nie traci czasu na nawiązywanie połączenia i śledzenie sesji. Dzięki protokołowi UDP dane są przesyłane dużo szybciej między przeglądarką a serwerem.

Wykorzystanie komercyjnego serwera WWW

Każda istniejąca strona internetowa do funkcjonowania potrzebuje web serwerów. Do najważniejszych zaliczamy Apache i Nginx. Na chwilę obecną swoją pozycję na rynku budują także inne komercyjne rozwiązania, jak np. LiteSpeed. Jest on znacznie wydajniejszy i pozwala na szybsze wczytywanie się stron internetowych. Co ciekawe, dla użytkowników WordPress przygotowano specjalną, autorską wtyczkę: LiteSpeed WordPress Cache, która w połączeniu z LiteSpeed Web Server znacząco przyśpiesza wczytywanie się strony WWW. Tym samym możesz zaobserwować optymalizację wykorzystywania zasobów swojego serwera.

Więcej na temat roli serwera w SEO przeczytasz w rozdziale “Serwer – o czym pamiętać, by pomóc, 
a nie przeszkodzić w działaniach SEO“.

Profilowanie aplikacji (Xdebug) i wykrycie „zamulaczy”

Profilowanie aplikacji pomaga wychwycić funkcje, które spowalniają wczytywanie się strony czy aplikacji. Dla php można skorzystać z Xdebug – a także z wbudowanych profilerów w silnik strony, np. zintegrowanych profilerów Prestashop. Dzięki profilowaniu można wykryć funkcje oraz zapytania do bazy danych, które potrzebują najwięcej czasu i których działanie można zoptymalizować.