Buforowanie całej strony — potrzeba szybkości
Opublikowany: 2020-10-02
Buforowanie stron internetowych i buforowanie całej strony to techniki przyspieszające ładowanie stron internetowych. Jest to bardzo powszechna praktyka, która jest stosowana niemal wszędzie ze względu na ogromne korzyści, jakie przynosi w zakresie wydajności witryny. Buforowanie działa dzięki temu, że serwer sieciowy jest znacznie wydajniejszy w wykonywaniu swojej pracy. Buforowanie całej strony jest bardziej zaawansowaną formą buforowania, więc aby zrozumieć buforowanie całej strony, zacznijmy od normalnego buforowania i kompilacji od tego miejsca.
Joe's Auto-Parts Shop — statyczna witryna internetowa

Wyobraź sobie Joego. To facet, który posiada i prowadzi duży magazyn pełen części samochodowych. Z przodu magazynu znajduje się lada, do której przyjeżdżają klienci, aby kupić jego części. Kiedy klient przybywa, aby kupić niektóre części, transakcja przebiega według następującej procedury:
- Klient wręcza Joemu listę części samochodowych.
 - Joe bierze pierwszą część i kładzie ją na blacie.
 - Joe bierze drugą część i kładzie ją na blacie.
 - I tak do końca listy.
 - Klient płaci i wychodzi.
 
Więc jak to się ma do statycznej strony internetowej?
Strona statyczna to taka, która nie korzysta z żadnych baz danych, skryptów PHP ani innych programów. Pomyśl o prostej witrynie, która zawiera tylko strony HTML i obrazy. Joe i jego magazyn reprezentują części tej prostej strony internetowej, takie jak ta:
- Magazyn jest serwerem fizycznym.
 - Joe to oprogramowanie serwera WWW, np. Apache
 - Części samochodowe to pliki składające się na stronę internetową np. obrazy i pliki HTML.
 
Procedura obsługi tej prostej witryny to:
- Przeglądarka żąda strony internetowej od Apache działającego na serwerze.
 - Apache odczytuje pierwszy plik z dysku i wysyła go do przeglądarki.
 - Apache odczytuje drugi plik z dysku i wysyła go do przeglądarki.
 - I tak dalej, aż wszystko sprowadzi.
 - Przeglądarka wyświetla ukończoną stronę internetową.
 
Ta konfiguracja działa dobrze w przypadku małych witryn, ale szybko zawodzi pod presją.
Joe jest zajęty – buforowanie ratuje dzień

System Joego działa dobrze, dopóki nie zacznie być zajęty. W rzeczywistości jest tak zajęty, że spędza większość czasu chodząc od lady do magazynu, że nie może nadążyć za wszystkimi nowymi klientami.
Joe mógłby kupić dodatkowy magazyn i zatrudnić kogoś do pracy, aby zaspokoić dodatkowe zapotrzebowanie. Ale jest to kosztowne i nie maksymalizuje zasobów, które już posiada. Zamiast tego Joe myśli o tym, jak mógłby usprawnić swój proces w swoim magazynie.
Joe zdaje sobie sprawę, że 90% części, które sprowadza dla klientów, to tylko 10. Postanawia więc trzymać te 10 części pod ladą, skąd może je od razu zabrać, gdy ktoś o nie poprosi. Teraz może obsłużyć większość zapytań klientów prosto z lady bez konieczności wchodzenia do magazynu. To jest znacznie szybsze.
Buforowanie robi coś bardzo podobnego na serwerze WWW. Podobnie jak Joe wraca do magazynu, najwolniejszą czynnością podczas obsługi plików statycznych jest ładowanie pliku z urządzenia pamięci masowej. Buforowanie polega na utrzymywaniu najczęściej żądanych plików w pamięci RAM, gdzie można uzyskać do nich dostęp tysiące razy szybciej niż odczytywanie ich z pamięci.

Ten rodzaj buforowania działa świetnie w przypadku obrazów i innych plików statycznych, ale WordPress to dynamiczna witryna internetowa ze skryptami PHP i bazą danych.
Wprowadź pamięć podręczną całej strony.
Joe's Life staje się skomplikowane – PHP, bazy danych i buforowanie

W tym samym mieście co Joe otwiera się nowy warsztat Toyoty, w którym Joe dostarcza części zamienne. To jest świetne dla Joe, z wyjątkiem jednego problemu, Toyota zamawia części tylko według numeru części Toyoty. Dają Joemu ogromny katalog, aby mógł sprawdzić numery części Toyoty i dopasować je do części w swoim magazynie, gdy tylko otrzyma od nich zamówienie.
Ale to znowu spowalnia Joe.
Za każdym razem, gdy musi sprawdzić część dotyczącą Toyoty w katalogu, zajmuje mu to dużo czasu. Nawet jeśli jest to jedna z części pod ladą, nie może po prostu sięgnąć po nią, ponieważ najpierw musi sprawdzić numer części Toyoty w katalogu. Jego stary system trzymania 10 najczęściej zamawianych części pod ladą wciąż pomaga, ale nowe wyszukiwania w katalogu są teraz dużym wąskim gardłem.
Joe ponownie się nad tym zastanawia i znajduje rozwiązanie. Zauważa, że większość zamówień Toyoty należy do niewielkiej grupy. Wypisuje więc ściągawkę z najczęstszymi numerami części Toyoty i odpowiadającymi im częściami i przykleja ją do blatu.
Teraz nie musi korzystać z katalogu w przypadku większości zamówień Toyoty, może spojrzeć na ściągawkę i niemal natychmiast zamienić numer części Toyoty na część, którą może pobrać.
Witryny WordPress mają podobny problem jak Joe. WordPress buduje każdą stronę internetową na żądanie przeglądarki. Strony HTML ładowane przez przeglądarkę nie istnieją, dopóki nie poprosisz o nie WordPress.
W ten sposób WordPress tworzy stronę Twojej witryny:
- Przeglądarka żąda strony internetowej z WordPressa.
 - Skrypt PHP akceptuje żądanie i pyta bazę danych o to, czego potrzebuje do zbudowania strony.
 - Baza danych wyszukuje i zwraca wszystkie informacje do procesu PHP.
 - Skrypt PHP buduje stronę z tymi informacjami i wysyła je do przeglądarki.
 
Jest to dużo pracy i jest powodem, dla którego niebuforowane strony WordPress potrzebują wielokrotnie więcej zasobów komputerowych niż strony statyczne.
Podobnie jak Joe, Twoja witryna WordPress bardzo często otrzymuje żądania dotyczące tych samych stron, takich jak strona docelowa Twojej witryny, ponieważ ta strona jest obsługiwana za każdym razem, gdy pojawia się nowy użytkownik. W konfiguracji bez pamięci podręcznej WordPress musi przetworzyć to żądanie za pomocą skryptów PHP i wykonać zapytania do bazy danych dla każdego odwiedzającego, mimo że za każdym razem tworzy dokładnie tę samą stronę.
To powoduje wiele powielania pracy.
Buforowanie całej strony rozwiązuje ten problem. Zauważa, że określone żądanie i strona, która jest generowana, są zawsze takie same, więc buforuje kopię strony w pamięci RAM. Przechowuje również ściągawkę żądań, które utworzyły te strony, więc gdy odwiedzający zażąda strony, którą wygenerował, zanim udostępni ją bezpośrednio z pamięci RAM, zamiast tworzyć ją ponownie.
To znacznie zmniejsza obciążenie serwera WWW poprzez ominięcie wielu procesów PHP i wyszukiwań w bazach danych oraz poprzez serwowanie wcześniej wygenerowanych stron bezpośrednio z pamięci RAM. Może to zapewnić dynamiczną witrynę WordPress, która jest prawie tak wydajna, jak witryna statyczna.
Buforowanie i buforowanie całej strony to doskonałe technologie, które wykorzystują zasoby serwera internetowego, aby zmaksymalizować wydajność serwera internetowego i zapewnić sprawną witrynę WordPress.
