Kiedy płacisz za każdy przesłany gigabajt, transfer przestaje być czymś abstrakcyjnym i staje się prawdziwymi pieniędzmi. Jeden nieostrożny skrypt, który pobiera ciężkie obrazki i wideo, może w ciągu nocy pochłonąć miesięczny budżet. Dobra wiadomość jest taka, że zużyciem można zarządzać i nie jest to trudne, jeśli raz zrozumiesz mechanikę.

Ten poradnik nauczy Cię liczyć transfer przed startem zadania, mierzyć rzeczywiste zużycie i zmniejszać je kilkukrotnie prostymi metodami. Mówimy tylko o ekonomice transferu, mającej zastosowanie do każdej taryfy z płatnością za objętość, niezależnie od typu proxy.

Wprowadzenie: dlaczego transfer trzeba liczyć z wyprzedzeniem

Przy płatności za gigabajty każde żądanie ma swoją cenę. Problem polega na tym, że ta cena jest niewidoczna aż do momentu otrzymania rachunku lub wyzerowania salda. Większość początkujących liczy zużycie post factum, a trzeba odwrotnie: oszacować budżet przed uruchomieniem i uwzględnić zapas.

Co otrzymasz w rezultacie

Po przeczytaniu poradnika będziesz w stanie rozłożyć dowolną stronę internetową na czynniki wagowe, napisać prosty licznik transferu w Pythonie lub Node, zastosować techniki oszczędzania, które zmniejszają zużycie o 70-95 procent, oraz poprawnie obliczyć budżet projektu. Zrozumiesz również, kiedy bardziej opłaca się płacić za objętość, a kiedy wybrać taryfę bez limitów.

Dla kogo jest ten poradnik

  • Dla tych, którzy zajmują się scrapingiem i zbieraniem danych przez proxy.
  • Dla specjalistów od automatyzacji, którzy wysyłają żądania partiami.
  • Dla marketerów i analityków pracujących z zewnętrznymi źródłami.
  • Dla wszystkich, którzy chcą płacić mniej za ten sam rezultat.

Co warto wiedzieć wcześniej

Podstawowa znajomość żądań HTTP będzie atutem, ale nie jest wymagana. Wyjaśnimy kluczowe terminy prostym językiem. Do części praktycznej przyda się minimalne doświadczenie w uruchamianiu skryptów w Pythonie lub Node.js, ale kod podajemy gotowy z komentarzami.

Ile czasu to zajmie

Na przeczytanie i zrozumienie teorii poświęcisz około 30 minut. Konfiguracja licznika transferu zajmie 15-20 minut. Wdrożenie technik oszczędzania w Twoim projekcie zależy od jego złożoności, ale podstawy zastosujesz w godzinę.

Przygotowanie wstępne: narzędzia i dostęp

Zanim zaczniesz liczyć i oszczędzać transfer, przygotuj zestaw narzędzi. Wszystkie są darmowe i działają na Windows, macOS i Linux.

Wymagane narzędzia

  • Python 3.10 lub nowszy - do skryptów zliczających transfer.
  • Node.js 18 lub nowszy - alternatywa dla osób zaznajomionych z JavaScriptem.
  • Biblioteka requests dla Pythona - instalowana poleceniem pip install requests.
  • Biblioteka Playwright - do pracy z headless-browserem, instalowana przez pip install playwright i playwright install.
  • Przeglądarka z narzędziami deweloperskimi - wystarczy każda nowoczesna, wbudowany panel Network jest potrzebny do ręcznej analizy stron.
  • Dostęp do panelu klienta Twojego serwisu proxy - tam sprawdzisz rzeczywiste statystyki transferu.

Wymagania systemowe

Wystarczy dowolny komputer wyprodukowany w ciągu ostatnich dziesięciu lat. Pamięci RAM wystarczy 4 gigabajty, ale dla headless-browsera wygodniej jest mieć 8. Miejsce na dysku potrzebne to około 2 gigabajty na silniki przeglądarki Playwright.

Co zainstalować i skonfigurować

  1. Pobierz i zainstaluj Pythona z oficjalnej strony, podczas instalacji zaznacz opcję dodania do PATH.
  2. Otwórz terminal i sprawdź instalację poleceniem python --version.
  3. Zainstaluj bibliotekę requests poleceniem pip install requests.
  4. Jeśli planujesz pracę z przeglądarką, zainstaluj Playwright poleceniem pip install playwright, a następnie uruchom playwright install chromium.
  5. Upewnij się, że masz pod ręką parametry połączenia z proxy: adres, port, login i hasło.

Wskazówka: Utwórz osobny folder do eksperymentów z transferem. Dzięki temu nie pogubisz się w plikach i łatwo cofniesz zmiany, jeśli coś pójdzie nie tak.

⚠️ Uwaga: Nigdy nie przechowuj loginu i hasła do proxy bezpośrednio w kodzie, który gdzieś wysyłasz. Używaj zmiennych środowiskowych lub osobnego pliku konfiguracyjnego, który nie wpadnie w niepowołane ręce.

✅ Weryfikacja: Jeśli polecenia python --version i pip --version zwracają numery wersji bez błędów, przygotowanie zakończone sukcesem.

Podstawowe pojęcia prostym językiem

Zanim zaczniesz liczyć bajty, wyjaśnijmy terminy. Bez żargonu, łopatologicznie.

Czym jest transfer

Transfer to ilość danych, które przeszły przez Twoje połączenie. Składa się z tego, co wysłałeś do serwera, i tego, co serwer odesłał w odpowiedzi. Przy płatności za gigabajty liczone są oba kierunki, ale przychodzący transfer (odpowiedzi serwera) jest zwykle kilkakrotnie większy niż wychodzący.

Z czego składa się żądanie

Gdy otwierasz stronę, przeglądarka wysyła żądanie i otrzymuje odpowiedź. Odpowiedź składa się z nagłówków (informacje pomocnicze o rozmiarze, typie, kodowaniu) oraz treści (właściwa zawartość: HTML, obrazek, skrypt). Treść prawie zawsze waży znacznie więcej niż nagłówki.

Kluczowe terminy

  • Żądanie GET - zwykłe żądanie pobrania treści. Zwraca zarówno nagłówki, jak i treść.
  • Żądanie HEAD - żądanie tylko nagłówków, bez treści. Oszczędza transfer, gdy treść nie jest potrzebna.
  • Content-Length - nagłówek, który podaje rozmiar treści odpowiedzi w bajtach.
  • Accept-Encoding - nagłówek, którym prosisz serwer o skompresowanie odpowiedzi.
  • gzip i brotli - algorytmy kompresji, które kilkukrotnie zmniejszają wagę danych tekstowych.
  • Przekierowanie - przekierowanie z jednego adresu na inny. Każde przekierowanie to dodatkowe żądanie i transfer.
  • Headless-browser - przeglądarka bez okna graficznego, sterowana kodem. Ładuje wszystko to, co zwykła przeglądarka, w tym ciężkie zasoby.

Główna zasada oszczędzania

Nie ładuj tego, co nie jest potrzebne do zadania. Brzmi to oczywiscie, ale to właśnie łamanie tej zasady zjada pieniądze. Jeśli potrzebujesz tekstu z karty produktu, nie potrzebujesz zdjęć produktu, wideorecenzji, banerów reklamowych ani trackerów analitycznych.

Z czego składa się waga strony: rzeczywista analiza

Celem tej sekcji jest pokazanie na konkretnym przykładzie, że większość wagi strony zwykle nie jest Ci potrzebna. Weźmy typową stronę sklepu internetowego.

Składniki wagi i ich udział

Przeciętna nowoczesna strona waży od 2 do 5 megabajtów. Waga rozkłada się mniej więcej tak:

  • Obrazy - 50-70 procent wagi. Zdjęcia produktów, banery, ikony w wysokiej rozdzielczości.
  • Skrypty JavaScript - 15-25 procent. Logika interfejsu, widżety, czaty, liczniki.
  • Czcionki - 5-10 procent. Niestandardowe czcionki pobierane jako osobne pliki.
  • Analityka i trackery - 5-15 procent. Piksele, systemy statystyk, skrypty reklamowe.
  • Wideo i multimedia - Od zera do ogromnych wartości. Automatycznie odtwarzane filmy potrafią zniszczyć budżet.
  • Dokument HTML - tylko 1-5 procent. To właśnie tam najczęściej znajdują się potrzebne Ci dane.

Praktyczny wniosek

Jeśli potrzebujesz danych tekstowych z HTML, możesz zrezygnować z 90-95 procent wagi strony. Strona o rozmiarze pięciu megabajtów zamienia się w 100-200 kilobajtów użytecznego HTML. To nie przesada, a typowy obraz sytuacji.

Jak ręcznie przeanalizować stronę

  1. Otwórz stronę w przeglądarce.
  2. Naciśnij F12, aby otworzyć narzędzia deweloperskie.
  3. Przejdź do zakładki Network.
  4. Odśwież stronę klawiszem F5.
  5. Na dole panelu zobaczysz całkowity rozmiar pobranych danych i liczbę żądań.
  6. Posortuj żądania według kolumny Size, aby zobaczyć najcięższe zasoby.
  7. Zwróć uwagę na kolumnę Type: img to obrazki, script to skrypty, font to czcionki.

Wskazówka: W panelu Network znajdują się filtry według typów zasobów. Kliknij przycisk Img, aby zobaczyć łączną wagę wszystkich obrazów. Zazwyczaj ta liczba szokuje.

✅ Weryfikacja: Powinieneś zobaczyć, że dokument HTML waży dziesiątki razy mniej niż suma obrazów i skryptów. To potwierdza, że główna rezerwa oszczędności leży w rezygnacji z multimediów.

Krok 1: Mierzymy rzeczywiste zużycie swojego zadania

Cel etapu: nauczyć się dokładnie liczyć, ile transferu zużywa Twój skrypt, aby świadomie zarządzać zużyciem.

Liczenie transferu w Pythonie

Biblioteka requests pozwala sprawdzić rozmiar każdej odpowiedzi. Będziemy sumować długość treści oraz przybliżony rozmiar nagłówków.

  1. Utwórz plik traffic_counter.py w swoim folderze roboczym.
  2. Wpisz do niego import biblioteki: import requests.
  3. Skonfiguruj ustawienia proxy jako słownik z kluczami http i https.
  4. Przed pętlą żądań utwórz zmienną total_bytes równą zero.
  5. Po każdym żądaniu dodawaj do niej długość zawartości response.content.
  6. Dla dokładności dodaj rozmiar nagłówków, licząc długość ich reprezentacji tekstowej.
  7. Na koniec podziel total_bytes przez 1048576, aby otrzymać megabajty.

Logika jest prosta: len(response.content) zwraca liczbę bajtów w treści odpowiedzi. Nagłówki są liczone jako suma długości kluczy i wartości. Dla większości zadań treść odpowiedzi to główna część transferu, więc nawet proste liczenie po content daje dokładność około 95 procent.

Ważna uwaga: response.content zwraca już rozpakowane dane, jeśli serwer przesłał skompresowaną odpowiedź. Rzeczywisty transfer w sieci mógł być mniejszy dzięki kompresji. Aby zmierzyć dokładnie przesłane bajty, sprawdź nagłówek Content-Length z odpowiedzi – pokazuje on rozmiar treści, tak jak przeszła przez sieć.

Dokładne liczenie przesłanych bajtów

  1. Po żądaniu odwołaj się do response.headers.get('Content-Length').
  2. Jeśli wartość istnieje, użyj jej jako rzeczywistej wagi treści w bajtach.
  3. Jeśli nagłówka nie ma (np. przy transmisji strumieniowej), kieruj się długością content, pamiętając, że to rozmiar rozpakowany.

Liczenie transferu w Node.js

W Node można użyć wbudowanego modułu https lub biblioteki axios. Zasada jest ta sama: sumujemy rozmiar otrzymanych danych.

  1. Utwórz plik traffic_counter.js.
  2. Podłącz bibliotekę do wykonywania żądań.
  3. Utwórz zmienną totalBytes z wartością zero.
  4. Dla każdej odpowiedzi pobieraj nagłówek content-length lub licz długość bufora danych.
  5. Dodawaj tę wartość do totalBytes.
  6. Na koniec wypisz totalBytes podzielone przez 1048576, aby uzyskać megabajty.

Wskazówka: Loguj wagę każdego żądania osobno, a nie tylko sumę. Dzięki temu od razu zobaczysz, który URL zużywa najwięcej, i będziesz mógł go precyzyjnie zoptymalizować.

Porównanie ze statystykami panelu klienta

Twój własny licznik i statystyki serwisu proxy mogą się nieco różnić. To normalne. Przyczyny rozbieżności:

  • Serwis liczy cały transfer połączenia, w tym pakiety usługowe i ustanawianie bezpiecznego kanału.
  • Twój licznik uwzględnia tylko przydatne obciążenie odpowiedzi.
  • Nagłówki żądań, wymiana DNS i ponowne nawiązywanie połączeń dodają niewielki narzut.
  1. Uruchom swój skrypt na 100 żądań i zapisz wynik swojego licznika.
  2. Wejdź do panelu klienta serwisu proxy przed i po uruchomieniu.
  3. Zanotuj różnicę w odczytach panelu.
  4. Porównaj ze swoim licznikiem. Rozbieżność na poziomie 10-20 procent to norma – to narzuty połączenia.

⚠️ Uwaga: Zawsze uwzględniaj w budżecie narzut połączenia. Rzeczywiste zużycie prawie zawsze jest o 10-20 procent wyższe niż to, co pokazuje liczenie przydatnego obciążenia po stronie klienta.

✅ Weryfikacja: Jeśli Twój licznik pokazuje wartość zbliżoną do różnicy w panelu klienta z uwzględnieniem narzutu, oznacza to, że liczenie jest skonfigurowane poprawnie i możesz ufać swoim pomiarom.

Krok 2: Podstawowe techniki zmniejszania transferu

Cel etapu: zastosować proste techniki, które zmniejszają zużycie bez skomplikowanego kodu. Zaczniemy od najbardziej dostępnych.

Technika 1: włączamy kompresję przez Accept-Encoding

Dane tekstowe (HTML, JSON, skrypty) świetnie się kompresują. Poprosząc serwer o skompresowaną odpowiedź, zmniejszasz transfer 3-5 razy.

  1. Do nagłówków żądania dodaj Accept-Encoding z wartością gzip, br, deflate.
  2. Biblioteka requests w Pythonie robi to automatycznie i sama rozpakowuje odpowiedź.
  3. Upewnij się, że nie wyłączyłeś tej opcji ręcznie.
  4. Sprawdź nagłówek odpowiedzi Content-Encoding: jeśli znajduje się tam gzip lub br, kompresja działa.

Br oznacza brotli – nowocześniejszy algorytm, który kompresuje mocniej niż gzip. Większość serwerów go obsługuje. Aby korzystać z brotli w Pythonie, zainstaluj pakiet brotli poleceniem pip install brotli.

Wskazówka: Kompresja jest darmowa pod względem transferu i prawie darmowa pod względem obciążenia procesora. Zawsze miej ją włączoną. To pierwsza rzecz, którą należy sprawdzić przy wysokim zużyciu.

Technika 2: używamy HEAD zamiast GET

Gdy potrzebujesz tylko nagłówków – na przykład sprawdzić, czy strona istnieje, poznać jej rozmiar lub datę modyfikacji – użyj żądania HEAD. Zwraca ono nagłówki bez treści.

  1. Zamiast requests.get wywołaj requests.head.
  2. Sprawdź potrzebne nagłówki w response.headers.
  3. Treść nie jest wtedy przesyłana, a oszczędność sięga 99 procent przy takich kontrolach.

Typowe scenariusze dla HEAD: sprawdzanie statusu linków, określanie rozmiaru pliku przed pobraniem, sprawdzanie daty ostatniej modyfikacji dla pamięci podręcznej.

Technika 3: rezygnujemy z niepotrzebnych przekierowań

Każde przekierowanie to dodatkowe pełne żądanie i odpowiedź. Jeśli strona ciągle przekierowuje z http na https lub z jednego adresu na inny, płacisz za zbędne pętle.

  1. Od razu używaj końcowego adresu: z https i bez zbędnych ukośników.
  2. Jeśli wiesz, że adres przekierowuje na www, od razu korzystaj z wersji www.
  3. W bibliotece możesz wyłączyć automatyczne podążanie za przekierowaniami parametrem allow_redirects ustawionym na False, aby kontrolować proces ręcznie.
  4. Zbierz mapę przekierowań raz i od tej pory chodź bezpośrednio na końcowe adresy.

Technika 4: wyłączamy ładowanie obrazów i multimediów w prostych żądaniach

Gdy pracujesz przez bibliotekę requests, a nie przez przeglądarkę, nie ładujesz automatycznie obrazków. requests pobiera tylko ten URL, który podałeś. To ogromna przewaga nad przeglądarką.

Jeśli potrzebujesz tylko HTML, requests.get zwróci Ci HTML bez obrazów, ponieważ obrazki są pobierane przez przeglądarkę jako osobne żądania na podstawie linków w HTML. Biblioteka tego nie robi, jeśli jej o to nie poprosisz.

Wskazówka: Do zadań zbierania danych tekstowych wybieraj proste biblioteki HTTP zamiast przeglądarki. Oszczędność transferu pojawia się automatycznie, bo nie ładujesz multimediów, czcionek i trackerów.

✅ Weryfikacja: Porównaj wagę tej samej strony załadowanej przez requests i przez przeglądarkę. Różnica wynosi zwykle 10-30 razy na korzyść prostego żądania.

Krok 3: Praca z headless-browserem i blokowanie zasobów

Cel etapu: nauczyć się blokować ciężkie typy zasobów w przeglądarce. To największe oszczędności transferu, gdy przeglądarka jest jednak konieczna.

Kiedy przeglądarka jest niezbędna

Czasami nie da się obejść bez przeglądarki: dane są ładowane przez skrypty po otwarciu strony, istnieje ochrona przed prostymi żądaniami, lub treść jest generowana dynamicznie. W takim przypadku przeglądarka ładuje wszystko po kolei, a transfer rośnie. Rozwiązaniem jest przechwytywanie i blokowanie niepotrzebnych typów zasobów.

Blokowanie zasobów w Playwright

Playwright pozwala przechwytywać każde żądanie przeglądarki i decydować, czy je przepuścić, czy anulować. Będziemy anulować obrazki, czcionki, multimedia i style.

  1. Utwórz plik browser_saver.py.
  2. Zaimportuj sync_playwright z playwright.sync_api.
  3. Uruchom przeglądarkę w trybie headless.
  4. Utwórz kontekst z ustawieniami proxy przez parametr proxy.
  5. Skonfiguruj handler tras przez page.route dla wszystkich URL-i.
  6. Wewnątrz handlera sprawdzaj typ zasobu przez request.resource_type.
  7. Jeśli typ znajduje się na liście blokowanych – wywołaj route.abort.
  8. W przeciwnym razie wywołaj route.continue_.

Lista typów do blokowania w typowym zadaniu zbierania tekstu: image, media, font, stylesheet. Czasami można blokować też część skryptów, ale ostrożnie – bez nich treść może się nie załadować.

Przykład logiki handlera

Handler otrzymuje obiekt żądania. Bierzesz request.resource_type i porównujesz z listą zablokowanych. Jeśli zasób to obrazek lub czcionka, anulujesz go, a przeglądarka nie zużywa na niego transferu. Jeśli to dokument lub potrzebny skrypt, przepuszczasz go.

Ważna uwaga: Blokowanie image, media i font prawie nigdy nie psuje zbierania danych tekstowych, ale oszczędza główną masę transferu. Zacznij właśnie od nich, a blokowanie skryptów i stylów dodawaj dopiero po sprawdzeniu, że strona nadal zwraca potrzebne dane.

Blokowanie zasobów w Puppeteer na Node

  1. Włącz przechwytywanie żądań przez page.setRequestInterception z wartością true.
  2. Subskrybuj zdarzenie request.
  3. W handlerze sprawdzaj request.resourceType.
  4. Dla obrazków, czcionek i multimediów wywołuj request.abort.
  5. Dla pozostałych wywołuj request.continue.

⚠️ Uwaga: Blokowanie stylów czasem przeszkadza dynamicznej treści, która zależy od widoczności elementów. Jeśli po zablokowaniu stylów dane zniknęły, przywróć stylesheet do listy dozwolonych.

Wskazówka: Dodaj licznik zablokowanych i przepuszczonych żądań. Zobaczysz w liczbach, że blokowane jest 80-90 procent żądań, a to bezpośrednia oszczędność pieniędzy.

Dodatkowe oszczędności w przeglądarce

  • Wyłącz ładowanie obrazów na poziomie ustawień kontekstu, jeśli silnik to obsługuje.
  • Nie otwieraj zbędnych kart – każda ładuje swój zestaw zasobów.
  • Zamykaj stronę zaraz po pobraniu danych, nie trzymaj jej otwartej.
  • Wykorzystuj ponownie jeden kontekst przeglądarki dla serii stron zamiast go restartować.

✅ Weryfikacja: Uruchom przeglądarkę z blokowaniem i bez na jednej stronie, porównaj transfer za pomocą swojego licznika. Oszczędność powinna wynieść 70-90 procent. Jeśli mniej, sprawdź, czy handler tras faktycznie działa.

Krok 4: Pamięć podręczna i deduplikacja żądań

Cel etapu: przestać dwa razy pobierać to samo. Powtarzane żądania do niezmienionych danych to wyrzucone pieniądze.

Dlaczego pojawiają się powtórki

W dużych zadaniach ten sam zasób jest żądany wielokrotnie: wspólny skrypt na wszystkich stronach, powtarzające się linki, ponowne uruchomienie upadłego skryptu od początku. Każde powtórzenie to transfer, za który płacisz ponownie.

Proste buforowanie odpowiedzi

  1. Załóż słownik lub lokalną bazę, gdzie kluczem jest URL, a wartością odpowiedź.
  2. Przed żądaniem sprawdź, czy URL znajduje się w pamięci podręcznej.
  3. Jeśli jest – pobierz dane z pamięci podręcznej, nie wykonując żądania sieciowego.
  4. Jeśli nie ma – wykonaj żądanie i zapisz odpowiedź w pamięci podręcznej.
  5. Dla trwałej pamięci podręcznej między uruchomieniami zapisuj odpowiedzi do plików lub lokalnej bazy.

Taka pamięć podręczna jest szczególnie skuteczna, gdy debugujesz skrypt i uruchamiasz go wiele razy z rzędu. Drugie i kolejne uruchomienia pobierają dane z dysku i nie zużywają ani bajta transferu sieciowego.

Deduplikacja listy URL-i

  1. Przed rozpoczęciem pracy zbierz wszystkie URL-e w jedną listę.
  2. Przekształć listę w zbiór, aby usunąć duplikaty.
  3. Znormalizuj adresy: usuń zbędne parametry, doprowadź do jednolitej postaci z ukośnikami.
  4. Przetwarzaj wyłącznie unikalne adresy.

Wskazówka: Często duplikaty są zamaskowane różnymi parametrami na końcu adresu, które nie zmieniają zawartości. Odetnij znaczniki śledzenia i sortowania przed porównaniem, a liczba unikalnych URL-i wyraźnie się zmniejszy.

Żądania warunkowe dla oszczędności

Jeśli okresowo sprawdzasz te same strony, używaj żądań warunkowych. Serwer zwróci pełną odpowiedź tylko wtedy, gdy dane się zmieniły.

  1. Przy pierwszym żądaniu zapisz nagłówki ETag i Last-Modified z odpowiedzi.
  2. Przy ponownym żądaniu przekaż je z powrotem w nagłówkach If-None-Match i If-Modified-Since.
  3. Jeśli dane się nie zmieniły, serwer zwróci krótką odpowiedź ze statusem 304 bez treści.
  4. Oszczędzasz wagę całej treści, płacąc tylko za malutki nagłówek.

✅ Weryfikacja: Po wdrożeniu pamięci podręcznej ponowne uruchomienie skryptu na tych samych danych powinno pokazywać transfer bliski zeru. Jeśli transfer nadal jest duży, sprawdź, czy sprawdzanie pamięci podręcznej następuje przed żądaniem sieciowym, a nie po nim.

Krok 5: Obliczanie budżetu transferu

Cel etapu: nauczyć się prognozować zużycie i uwzględniać zapas, aby nie zostać bez salda w środku zadania.

Podstawowy wzór

Podstawowy wzór jest prosty: całkowity transfer równa się liczbie stron pomnożonej przez średnią wagę jednej strony. Ale diabeł tkwi w szczegółach i my je uwzględnimy.

  1. Określ średnią wagę jednej przetworzonej strony po wszystkich optymalizacjach.
  2. Pomnóż przez planowaną liczbę stron.
  3. Dodaj narzut połączenia – około 15 procent na wierzch.
  4. Dodaj zapas na powtórki i błędy – kolejne 20 procent.
  5. Otrzymana liczba to Twój realistyczny budżet transferu.

Jak zmierzyć średnią wagę

  1. Uruchom swój zoptymalizowany skrypt na próbce 50-100 stron.
  2. Oblicz całkowity transfer swoim licznikiem.
  3. Podziel przez liczbę stron – otrzymasz średnią wagę jednej strony.
  4. To właśnie tę liczbę użyj we wzorze, a nie teoretyczne założenia.

Przykład obliczeń

Załóżmy, że po zablokowaniu multimediów średnia waga strony wyniosła 150 kilobajtów. Musisz przetworzyć 100 000 stron. Liczymy: 150 kilobajtów razy 100 000 daje 15 000 000 kilobajtów, czyli około 14,3 gigabajta. Dodajemy 15 procent narzutu i 20 procent zapasu – łącznie około 19,5 gigabajta. To właśnie na taki wolumen należy orientować się przy wyborze taryfy.

Porównaj to z sytuacją bez optymalizacji: gdyby każda strona ważyła 3 megabajty, te same 100 000 stron dałoby 300 gigabajtów. Różnica piętnastokrotna – to dosłownie różnica w rachunku.

Wskazówka: Zawsze wykonuj próbne uruchomienie na małej próbce przed dużym startem. Zmierzona średnia waga jest bardziej wiarygodna niż jakiekolwiek przypuszczenia i uchroni Cię przed nieprzyjemną niespodzianką w rachunku.

⚠️ Uwaga: Nie zapominaj o zapasie. Realne zadania zawsze zaskakują: część stron okaże się cięższa, część żądań trzeba będzie powtórzyć. Budżet bez zapasu kończy się w najmniej odpowiednim momencie.

Tabela technik oszczędzania

Poniżej zestawienie głównych technik: ile oszczędza każda z nich i czym za to płacisz.

  • Kompresja gzip i brotli – oszczędza 60-80 procent na danych tekstowych – płacisz niewielkim obciążeniem procesora podczas dekompresji.
  • Rezygnacja z przeglądarki na rzecz biblioteki HTTP – oszczędza 90-95 procent – płacisz tym, że nie otrzymasz danych ładowanych przez skrypty.
  • Blokowanie obrazów i multimediów w przeglądarce – oszczędza 50-70 procent – płacisz konfiguracją przechwytywania żądań, ryzyko minimalne.
  • Blokowanie czcionek – oszczędza 5-10 procent – płacisz prawie niczym, czcionki nie są potrzebne do danych.
  • Blokowanie skryptów i stylów – oszczędza 15-25 procent – płacisz ryzykiem, że treść się nie załaduje, wymaga sprawdzenia.
  • HEAD zamiast GET – oszczędza do 99 procent przy żądaniach weryfikacyjnych – płacisz tym, że nie otrzymasz treści odpowiedzi.
  • Eliminacja przekierowań – oszczędza 10-30 procent na stronach z przekierowaniami – płacisz jednorazowym czasem na zebranie mapy adresów.
  • Buforowanie odpowiedzi – oszczędza do 100 procent przy powtórzeniach – płacisz miejscem na dysku na pamięć podręczną.
  • Deduplikacja URL-i – oszczędza 10-40 procent, jeśli są duplikaty – płacisz jednorazową normalizacją listy.
  • Żądania warunkowe z ETag – oszczędzają do 99 procent, gdy dane się nie zmieniają – płacisz przechowywaniem znaczników wersji.

✅ Weryfikacja: Oblicz budżet według wzoru i porównaj z saldem na taryfie. Jeśli zapas się mieści, możesz startować. Jeśli nie, wróć do technik oszczędzania i zmniejsz średnią wagę strony.

Krok 6: Kiedy bardziej opłaca się nielimitowany pakiet, a kiedy płatność za objętość

Cel etapu: dokonać uczciwego wyboru taryfy pod konkretne zadanie, a nie przepłacać z powodu błędnego modelu rozliczeń.

Kiedy opłaca się płatność za gigabajty

  • Zadanie jest jednorazowe lub rzadkie, wolumeny niewielkie.
  • Dobrze zoptymalizowałeś transfer i dokładnie znasz zużycie.
  • Średnia waga strony jest niska dzięki blokowaniu multimediów.
  • Szczytowe obciążenie występuje rzadko, przez większość czasu transferu jest mało.
  • Zależy Ci na przejrzystości: płacisz dokładnie za to, co wykorzystałeś.

Kiedy opłaca się pakiet nielimitowany ze stałą ceną

  • Zadanie jest stałe, wolumeny duże i stabilne.
  • Jesteś zmuszony pracować przez przeglądarkę i ładować ciężkie strony.
  • Potrzebne są obrazy, wideo lub inne ciężkie multimedia jako część zadania.
  • Zużycie jest nieprzewidywalne i może gwałtownie wzrosnąć.
  • Wazny jest dla Ciebie spokój psychiczny: stała płatność bez ryzyka przekroczenia.

Jak obliczyć punkt przejścia

  1. Weź cenę za gigabajt w taryfie z płatnością za objętość.
  2. Weź cenę taryfy nielimitowanej za ten sam okres.
  3. Podziel cenę nielimitowanego pakietu przez cenę za gigabajt – otrzymasz wolumen w gigabajtach, przy którym taryfy się wyrównują.
  4. Jeśli Twoja prognoza zużycia jest wyższa niż ten wolumen – wybierz pakiet nielimitowany.
  5. Jeśli niższa – wybierz płatność za objętość.

Na przykład pakiet nielimitowany kosztuje tyle, co 50 gigabajtów w taryfie jednostkowej. Oznacza to, że jeśli wydajesz więcej niż 50 gigabajtów, pakiet nielimitowany jest tańszy. Jeśli mniej – bardziej opłaca się płacić za objętość. Twój zmierzony budżet z kroku 5 od razu daje odpowiedź.

Wskazówka: Najpierw zoptymalizuj transfer, a potem wybieraj taryfę. Dobra optymalizacja często przenosi Cię ze strefy nielimitowanej do strefy opłacalnej płatności jednostkowej i oszczędza znaczną kwotę.

Strategia łączona

Czasami optymalne jest utrzymywanie dwóch podejść: lekkie zadania tekstowe obsługiwać w taryfie jednostkowej, a ciężkie przeglądarkowe – w pakiecie nielimitowanym. Podział według typu zadania często jest korzystniejszy niż jedna taryfa na wszystko.

✅ Weryfikacja: Oblicz oba warianty w pieniądzach dla swojej rzeczywistej prognozy. Powinieneś otrzymać konkretną kwotę oszczędności wynikającą z właściwego wyboru. Jeśli różnica jest groszowa, wybierz taryfę, którą łatwiej zarządzać.

Sprawdzenie wyniku: lista kontrolna

Przejdź przez listę, aby upewnić się, że poprawnie skonfigurowałeś liczenie i oszczędzanie transferu.

  • Licznik transferu w Pythonie lub Node uruchamia się i podaje liczby bez błędów.
  • Odczyty licznika zgadzają się ze statystykami panelu klienta z uwzględnieniem narzutu.
  • W żądaniach włączona jest kompresja, w odpowiedziach widnieje Content-Encoding gzip lub br.
  • Do zadań weryfikacyjnych używany jest HEAD zamiast GET.
  • Chodzisz bezpośrednio na końcowe adresy bez zbędnych przekierowań.
  • Do zadań tekstowych używasz biblioteki HTTP zamiast przeglądarki, gdzie to możliwe.
  • W przeglądarce skonfigurowane jest blokowanie obrazów, multimediów i czcionek.
  • Skonfigurowane jest buforowanie odpowiedzi, ponowne uruchomienie prawie nie zużywa transferu.
  • Lista URL-i jest oczyszczona z duplikatów.
  • Budżet obliczony według wzoru z zapasem 15 i 20 procent.
  • Wybrano taryfę odpowiadającą prognozie zużycia.

Jak to przetestować

  1. Uruchom zoptymalizowany skrypt na próbce 100 stron.
  2. Zanotuj transfer przed i po w panelu klienta.
  3. Podziel przez liczbę stron i porównaj ze średnią wagą z obliczeń.
  4. Jeśli się zgadza – system działa, można skalować.

✅ Weryfikacja: Jeśli próbne uruchomienie zmieściło się w prognozowanym budżecie na 100 stron, jesteś gotowy do pełnego startu. Pomnóż wynik przez skalę i upewnij się, że saldo wystarczy.

Typowe błędy i ich rozwiązania

Omówimy częste problemy napotykane przy liczeniu i oszczędzaniu transferu.

Błąd 1: licznik pokazuje mniej niż panel

Przyczyna: liczysz tylko treść odpowiedzi, a serwis uwzględnia całą wymianę sieciową z narzutem. Rozwiązanie: uwzględnij korektę o 15-20 procent i traktuj to jako normę, a nie błąd.

Błąd 2: kompresja nie działa

Przyczyna: nie zainstalowano pakietu dla brotli lub ręcznie wyłączono Accept-Encoding. Rozwiązanie: zainstaluj pakiet brotli, sprawdź nagłówki żądania i upewnij się, że odpowiedź zawiera Content-Encoding.

Błąd 3: po zablokowaniu zasobów zniknęły dane

Przyczyna: zablokowałeś skrypty lub style, od których zależy ładowanie treści. Rozwiązanie: przywróć script i stylesheet do dozwolonych, blokuj tylko image, media i font.

Błąd 4: transfer nie spada przy buforowaniu

Przyczyna: sprawdzanie pamięci podręcznej następuje po żądaniu sieciowym, a nie przed nim. Rozwiązanie: najpierw sprawdzaj pamięć podręczną, a dopiero w przypadku braku danych wykonuj żądanie sieciowe.

Błąd 5: przeglądarka zużywa transfer nawet z handlerem

Przyczyna: handler tras jest podpięty pod niewłaściwy wzorzec URL lub po rozpoczęciu ładowania. Rozwiązanie: ustaw przechwytywanie przed otwarciem strony i na wszystkie URL-e przez gwiazdkę.

Błąd 6: rzeczywiste zużycie jest kilkakrotnie wyższe niż prognoza

Przyczyna: średnia waga pochodzi z teorii, a nie z pomiarów na próbnym uruchomieniu. Rozwiązanie: zawsze mierz średnią wagę na rzeczywistej próbce przed dużym startem.

Błąd 7: budżet skończył się w środku zadania

Przyczyna: nie uwzględniono zapasu na powtórki i narzut. Rozwiązanie: dodawaj do prognozy 35 procent łącznego zapasu i kontroluj saldo w trakcie.

Błąd 8: wiele powtarzanych żądań do jednego adresu

Przyczyna: duplikaty na liście URL-i spowodowane różnymi znacznikami na końcu adresu. Rozwiązanie: normalizuj adresy, odcinaj parametry śledzenia i zamieniaj listę na zbiór.

Dodatkowe możliwości i optymalizacja

Gdy podstawowe oszczędności są wdrożone, można wycisnąć jeszcze więcej.

Przetwarzanie strumieniowe dużych odpowiedzi

Jeśli odpowiedź jest duża, a potrzebujesz tylko jej części, czytaj ją strumieniowo i przerywaj czytanie, gdy tylko zdobędziesz to, czego potrzebujesz. Dzięki temu nie pobierzesz całego pliku. To przydatne, gdy dane znajdują się na początku dużego dokumentu.

Ograniczanie rozmiaru odpowiedzi

Ustaw maksymalny rozmiar odpowiedzi, którą jesteś gotów przyjąć. Jeśli serwer oddaje więcej, przerwij ładowanie. To ochrona przed niespodziewanie ciężkimi stronami, które mogłyby zużyć dużo transferu naraz.

Przetwarzanie wsadowe i równoległość

Równoległe żądania same w sobie nie oszczędzają transferu, ale pozwalają szybciej ukończyć zadanie i wcześniej dostrzec problem ze zużyciem. Utrzymuj rozsądną liczbę jednoczesnych połączeń, aby nie stracić kontroli nad transferem.

Logowanie i monitoring w czasie rzeczywistym

  1. Prowadź bieżący licznik transferu i wyświetlaj go co kilkaset żądań.
  2. Ustaw próg, po osiągnięciu którego skrypt się zatrzymuje.
  3. Dzięki temu nigdy nie przekroczysz budżetu niezauważenie.

Wskazówka: Automatyczne zatrzymanie po przekroczeniu limitu transferu to najlepsza polisa. Skrypt sam zatrzyma się na zadanym progu, a przekroczenie stanie się niemożliwe nawet przy błędzie w logice.

Praca tylko z potrzebnymi fragmentami API

Jeśli dane są dostępne przez API, żądaj tylko potrzebnych pól, tam gdzie to obsługiwane. Wiele interfejsów pozwala określić, które pola mają zostać zwrócone, co drastycznie zmniejsza wagę odpowiedzi w porównaniu do pełnego zestawu.

FAQ: częste pytania o oszczędzanie transferu

Czy transfer wychodzący jest liczony przy płatności za gigabajty

Zwykle liczy się zarówno przychodzący, jak i wychodzący, ale wychodzący (Twoje żądania) jest wielokrotnie mniejszy niż przychodzący (odpowiedzi serwera). Główne oszczędności zawsze dotyczą transferu przychodzącego.

Jak dokładne jest liczenie po stronie klienta

Dokładność wynosi około 85-95 procent w porównaniu do rzeczywistego transferu sieciowego. Różnica to narzut połączenia. Do planowania budżetu to wystarczy, jeśli uwzględnisz korektę.

Czy można całkowicie zrezygnować z przeglądarki

Do wielu zadań zbierania tekstu – tak, prosta biblioteka HTTP wystarczy i oszczędza transfer kilkukrotnie. Przeglądarka jest potrzebna tylko tam, gdzie treść jest generowana przez skrypty po załadowaniu strony.

Czy kompresja jest włączona domyślnie

W większości nowoczesnych bibliotek – tak, ale warto to sprawdzić. Dla brotli może być potrzebny osobny pakiet. Zawsze weryfikuj nagłówek Content-Encoding w odpowiedzi.

Co blokować w przeglądarce w pierwszej kolejności

Zacznij od obrazów, multimediów i czcionek – to największa i najbezpieczniejsza oszczędność. Skrypty i style blokuj dopiero po sprawdzeniu, że dane nadal się ładują.

Jak sprawdzić, czy budżet wystarczy

Zmierz średnią wagę strony na próbnym uruchomieniu, pomnóż przez liczbę stron, dodaj 35 procent zapasu i porównaj z saldem taryfy. Jeśli się mieści – wystarczy.

Czy pamięć podręczna pomaga przy jednorazowym przejściu

Przy jednorazowym przejściu bez powtórzeń korzyść jest niewielka, ale pamięć podręczna znacznie oszczędza przy debugowaniu i ponownych uruchomieniach. Natomiast żądania warunkowe i deduplikacja pomagają nawet podczas jednego przejścia.

Co jest bardziej opłacalne dla dużych stałych wolumenów

Zazwyczaj pakiet nielimitowany ze stałą ceną. Oblicz punkt przejścia: podziel cenę pakietu nielimitowanego przez cenę za gigabajt i porównaj z prognozą zużycia.

Czy liczba przekierowań wpływa na rachunek

Tak, każde przekierowanie to dodatkowe żądanie i odpowiedź. Na stronach z łańcuchami przekierowań wyeliminowanie zbędnych skoków oszczędza zauważalną część transferu.

Jak nie przekroczyć budżetu przypadkowo

Skonfiguruj bieżący licznik i automatyczne zatrzymanie po osiągnięciu progu transferu. Skrypt sam się zatrzyma, a przekroczenie stanie się niemożliwe nawet przy błędzie.

Podsumowanie

Przeszedłeś drogę od niezrozumienia, gdzie znika transfer, do pełnej kontroli nad zużyciem. Teraz potrafisz rozłożyć wagę strony na komponenty i widzisz, że większość wagi nie jest Ci potrzebna. Skonfigurowałeś licznik transferu i porównujesz go ze statystykami panelu. Stosujesz kompresję, używasz HEAD zamiast GET, usuwasz przekierowania i wolisz lekkie biblioteki HTTP od ciężkiej przeglądarki.

Gdy przeglądarka jest jednak potrzebna, blokujesz obrazki, multimedia i czcionki, zmniejszając transfer o 70-90 procent. Buforujesz odpowiedzi i nie sięgasz dwa razy po to samo. A co najważniejsze – liczysz budżet według wzoru z zapasem i świadomie wybierasz taryfę, a nie na chybił trafił.

Co robić dalej

  1. Wdróż podstawowe techniki w swoim bieżącym projekcie już dziś.
  2. Przeprowadź próbne uruchomienie i zmierz rzeczywistą średnią wagę strony.
  3. Przelicz budżet i w razie potrzeby zmień taryfę.
  4. Skonfiguruj automatyczne zatrzymanie po limicie jako zabezpieczenie.

Oszczędzanie transferu to umiejętność, która zwraca się w każdym projekcie. Raz zainwestowany czas w konfigurację pomiarów i optymalizację sprawi, że będziesz płacić wielokrotnie mniej przy tych samych wynikach. Zacznij od małych kroków, zmierz efekt w liczbach, a zdziwisz się, o ile tańsza może być ta sama praca.