{"id":4797,"date":"2021-01-24T15:58:13","date_gmt":"2021-01-24T14:58:13","guid":{"rendered":"https:\/\/szmigiel.design\/?p=4797"},"modified":"2021-01-27T13:41:49","modified_gmt":"2021-01-27T12:41:49","slug":"zawsze-swiezy-cache-czyli-konfiguracja-robota-indeksujacego-w-litespeed-cache","status":"publish","type":"post","link":"https:\/\/retro.szmigiel.design\/pl\/blog\/zawsze-swiezy-cache-czyli-konfiguracja-robota-indeksujacego-w-litespeed-cache\/","title":{"rendered":"Zawsze \u015bwie\u017cy cache, czyli konfiguracja robota indeksuj\u0105cego w LiteSpeed Cache"},"content":{"rendered":"\n<h2 class=\"shallow wp-block-heading\">Pe\u0142zaj\u0105c po stronie<\/h2>\n\n\n\n<p class=\"shallow\">Wykorzystanie pami\u0119ci podr\u0119cznej potrafi drastycznie zredukowa\u0107 czas \u0142adowania dynamicznych stron internetowych. Dzieje si\u0119 tak jednak tylko w momencie, kiedy pami\u0119\u0107 podr\u0119czna jest wygenerowana i \u015bwie\u017ca (tzn. jej czas \u017cycia jest aktualny, a pliki mog\u0105 zosta\u0107 wys\u0142ane do przegl\u0105darki u\u017cytkownika).<\/p>\n\n\n\n<p class=\"shallow\">Cz\u0119sto aktualizowane strony, strony oparte o du\u017c\u0105 liczb\u0119 zmiennych, albo np. systemy e-commerce nie mog\u0105 korzysta\u0107 z d\u0142ugiego czasu \u017cycia pami\u0119ci podr\u0119cznej, co zwi\u0119ksza prawdopodobie\u0144stwo, \u017ce odwiedzaj\u0105cy nie trafi\u0105 na przygotowan\u0105 wcze\u015bniej stron\u0119 i b\u0119d\u0105 musieli zaczeka\u0107 na jej wygenerowanie.<\/p>\n\n\n\n<p class=\"shallow\">Popularnym rozwi\u0105zaniem tego problemu jest uruchomienie robota indeksuj\u0105cego, kt\u00f3ry na podstawie dost\u0119pnej mapy strony, cyklicznie od\u015bwie\u017ca pami\u0119\u0107 cache, bez udzia\u0142u u\u017cytkownik\u00f3w. Dzi\u0119ki pracy robota, odwiedzaj\u0105cy stron\u0119 znacznie cz\u0119\u015bciej trafi\u0105 na \u015bwie\u017c\u0105 pami\u0119\u0107 podr\u0119czn\u0105, co wp\u0142ynie pozytywnie na ich interakcj\u0119 z naszym serwisem, oraz zmniejszy prawdopodobie\u0144stwo porzucenia strony (w wyniku zbyt d\u0142ugiego czasu oczekiwania na jej za\u0142adowanie).&nbsp;<\/p>\n\n\n\n<p class=\"shallow\">LiteSpeed Cache, dost\u0119pny dla u\u017cytkownik\u00f3w CMS WordPress korzystaj\u0105cych z serwer\u00f3w LiteSpeed oferuje funkcjonalno\u015b\u0107 robota indeksuj\u0105cego. Niestety zagadnienia natury user experience, toporny interfejs wtyczki oraz wykorzystanie kiepskiego t\u0142umaczenia maszynowego w polskiej wersji wtyczki sprawiaj\u0105, \u017ce poprawna konfiguracja robota nie nale\u017cy do najbardziej oczywistych czynno\u015bci.<\/p>\n\n\n\n<p class=\"shallow\">Przy okazji wdro\u017cenia, nad kt\u00f3rym obecnie pracuj\u0119, przyjrza\u0142em si\u0119 zagadnieniom crawlera nieco dok\u0142adniej.<\/p>\n\n\n\n<p class=\"shallow\">Niniejszy artyku\u0142 zawiera opis dzia\u0142ania robota indeksuj\u0105cego we wtyczce LiteSpeed Cache dla WordPress w wersji 3.6.1 oraz propozycj\u0119 jego konfiguracji dla hostingu EWH w dhosting. Artyku\u0142 nie wyczerpuje zagadnienia \u2014 nie zg\u0142\u0119biam si\u0119 np. w tworzenie osobnych robot\u00f3w indeksuj\u0105cych dla r\u00f3l u\u017cytkownik\u00f3w lub symulacji ciasteczek.<\/p>\n\n\n\n<p class=\"shallow\"><strong>Je\u015bli nie wiesz, czym jest LiteSpeed Cache i jakie funkcjonalno\u015bci oferuje, zapraszam najpierw do przeczytania poprzednich artyku\u0142\u00f3w na ten temat<\/strong>:<\/p>\n\n\n\n<p class=\"shallow\"><a href=\"https:\/\/retro.szmigiel.design\/pl\/blog\/najlepsza-wtyczka-cache-dla-wordpress\/\">Najlepsza wtyczka cache dla WordPress<\/a><\/p>\n\n\n\n<p class=\"shallow\"><a href=\"https:\/\/retro.szmigiel.design\/pl\/blog\/skuteczna-optymalizacja-grafik-w-wordpress-dzieki-wtyczce-litespeed-cache\/\">Skuteczna optymalizacja grafik w WordPress dzi\u0119ki wtyczce LiteSpeed Cache<\/a><\/p>\n\n\n\n<p class=\"shallow\"><a href=\"https:\/\/retro.szmigiel.design\/pl\/blog\/wieksza-wydajnosc-stron-internetowych-dzieki-implementacji-esi-w-litespeed-cache\/\">Wi\u0119ksza wydajno\u015b\u0107 stron internetowych dzi\u0119ki implementacji ESI w LiteSpeed Cache<\/a><\/p>\n\n\n\n<p class=\"shallow\">Mo\u017cesz tak\u017ce \u015bledzi\u0107 tag <a href=\"https:\/\/retro.szmigiel.design\/pl\/tematy\/litespeed-cache-dla-wordpress\/\">LiteSpeed Cache dla WordPress<\/a> na moim blogu, gdzie pojawiaj\u0105 si\u0119 wpisy zwi\u0105zane z t\u0105 wtyczk\u0105.<\/p>\n\n\n\n<h2 class=\"shallow wp-block-heading\">Jak dzia\u0142a crawler (robot indeksuj\u0105cy) w LiteSpeed Cache?<\/h2>\n\n\n\n<p class=\"shallow\">Crawler dzia\u0142a powtarzalnie i jest wywo\u0142ywany przez cron \u2014 wbudowany w WordPress i uruchamiany przez wej\u015bcie na stron\u0119 lub przez wywo\u0142anie pliku wp-cron.php.<\/p>\n\n\n\n<p class=\"shallow\">Kompletny cykl dzia\u0142ania robota indeksuj\u0105cego liczony jest od zindeksowania mapy strony (sitemap) do zako\u0144czenia generowania cache dla ka\u017cdego rekordu dost\u0119pnego w ramach mapy (robot symuluje otwarcie ka\u017cdej strony z mapy i tym samym wymusza wygenerowanie cache).<\/p>\n\n\n\n<p class=\"shallow\">Proces mo\u017cna stre\u015bci\u0107 w kilku punktach:<\/p>\n\n\n\n<ol class=\"shallow wp-block-list\"><li><strong>Pobierz i przetw\u00f3rz map\u0119 strony<\/strong>, zapisuj\u0105c w bazie wszystkie adresy do za\u0142adowania i wygenerowania pami\u0119ci podr\u0119cznej.<\/li><li><strong>Uruchom proces robota<\/strong> na czas ustawiony w konfiguracji i rozpocznij \u0142adowanie ka\u017cdego adresu, po kolei a\u017c do dotarcia do ostatniego adresu lub do wyczerpania czasu.<\/li><li><strong>Zr\u00f3b przerw\u0119<\/strong> w indeksowaniu na czas ustawiony w konfiguracji.<\/li><li>Je\u017celi w punkcie 2 robot nie dotar\u0142 do ko\u0144ca mapy strony, kontynuuj \u0142adowanie adres\u00f3w z mapy, rozpoczynaj\u0105c od miejsca, na kt\u00f3rym sko\u0144czy\u0142 si\u0119 punkt 2. Je\u017celi robot dotar\u0142 do ko\u0144ca mapy strony, zatrzymaj robota do czasu nast\u0119pnego indeksowania mapy stron (rozpocz\u0119cia cyklu).<\/li><\/ol>\n\n\n\n<p class=\"shallow\">Przy czym punkty 2 i 3 pracuj\u0105 w p\u0119tli do czasu dotarcia do ostatniego adresu z mapy strony lub \u2014 je\u017celi nast\u0105pi szybciej \u2014 do nast\u0119pnego ponownego uruchomienia cyklu (dlatego wa\u017cne jest wykonanie test\u00f3w i ustawienie czasu cyklu na d\u0142u\u017cszy ni\u017c trwa od\u015bwie\u017cenie pami\u0119ci podr\u0119cznej dla wszystkich adres\u00f3w strony).<\/p>\n\n\n\n<h2 class=\"shallow wp-block-heading\">Wymagania techniczne niezb\u0119dne do uruchomienia crawlera<\/h2>\n\n\n\n<p class=\"shallow\">Do uruchomienia robota indeksuj\u0105cego nie wystarczy jedynie <strong>hosting oparty o serwer LiteSpeed<\/strong>. Opr\u00f3cz tego <strong>funkcjonalno\u015b\u0107 robota nie mo\u017ce by\u0107 wy\u0142\u0105czona administracyjnie<\/strong> (je\u017celi tak si\u0119 stanie, na stronie podsumowania zobaczysz tak\u0105 informacj\u0119).<\/p>\n\n\n\n<p class=\"shallow\">Co r\u00f3wnie wa\u017cne, a czego nie dowiesz si\u0119 z komunikat\u00f3w o b\u0142\u0119dzie wy\u015bwietlanych na stronach wtyczki, <strong>WordPress musi mie\u0107 dost\u0119p do funkcji PHP <em>sys_getloadavg<\/em><\/strong>. Funkcja ta zwraca wtyczce informacj\u0119 o aktualnym obci\u0105\u017ceniu konta hostingowego (serwera) i umo\u017cliwia spowolnianie robota indeksuj\u0105cego tak, aby nie zmonopolizowa\u0142 wszystkich zasob\u00f3w.<\/p>\n\n\n\n<p class=\"shallow\"><strong>To wa\u017cne, poniewa\u017c niekt\u00f3re hostingi (w tym polecany przeze mnie <a href=\"https:\/\/dhosting.pl\/pp-szmigiel\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external\">dhosting<\/a>) domy\u015blnie uniemo\u017cliwiaj\u0105 wywo\u0142anie tej funkcji<\/strong>.&nbsp;<\/p>\n\n\n\n<p class=\"shallow\">Doprowadza to do kuriozalnej sytuacji, w kt\u00f3rej robot, mimo poprawnej konfiguracji i braku zwracanych b\u0142\u0119d\u00f3w, nie dzia\u0142a. W kodzie wtyczki w wersji 3.6.1 znajduje si\u0119 warunek, kt\u00f3ry sprawdza, czy funkcja jest dost\u0119pna, ale je\u017celi nie jest \u2014 po prostu wy\u0142\u0105cza dzia\u0142anie robota bez informowania o tym w \u017caden spos\u00f3b u\u017cytkownika.<\/p>\n\n\n\n<p class=\"shallow\">Je\u017celi wi\u0119c na stronie podsumowania, mimo konfiguracji robota i jego manualnego w\u0142\u0105czenia, nie pojawiaj\u0105 si\u0119 informacje o wielko\u015bci mapy strony \u2014 sprawdzenie czy funkcja <em>sys_getloadavg<\/em> jest dost\u0119pna, b\u0119dzie dobrym tropem podczas pr\u00f3by ustalenia, dlaczego robot nie dzia\u0142a. Przy okazji podzi\u0119kowania dla <a href=\"https:\/\/damianslimak.pl\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\" class=\"external\">Damiana \u015alimaka<\/a> za odkrycie \u017ar\u00f3d\u0142a tego problemu.&nbsp;<\/p>\n\n\n\n<h2 class=\"shallow wp-block-heading\">Status robota (robot\u00f3w) indeksuj\u0105cych<\/h2>\n\n\n\n<p class=\"shallow\">Za konfiguracj\u0119 robota indeksuj\u0105cego w LSCWP (LiteSpeed Cache for WordPress) odpowiada dedykowana zak\u0142adka wtyczki pn. \u201eRobot indeksuj\u0105cy\u201d i dalsza cz\u0119\u015b\u0107 artyku\u0142u dotyczy informacji zawartych w kilku sekcjach tej zak\u0142adki.<\/p>\n\n\n\n<p class=\"shallow\">Po przej\u015bciu na g\u0142\u00f3wn\u0105 sekcj\u0119 \u2014 Podsumowanie<strong> <\/strong>\u2014 zobaczymy og\u00f3lne informacje dotycz\u0105ce stanu indeksowania oraz zadania cyklicznego (cron) robota.&nbsp;<\/p>\n\n\n\n<p class=\"shallow\">Jedna z pierwszych rzeczy, kt\u00f3re rzucaj\u0105 si\u0119 w oczy to w\u0105tpliwej jako\u015bci t\u0142umaczenie, kt\u00f3re dodatkowo komplikuje zrozumienie, jak dzia\u0142a robot.<\/p>\n\n\n\n<p class=\"shallow\">Pozwol\u0119 sobie zatem przet\u0142umaczy\u0107 frazy na ich faktyczne znaczenie:<\/p>\n\n\n\n<p class=\"shallow\"><strong>Aktualny robot indeksuj\u0105cy map\u0119 strony wystartowa\u0142 w<\/strong><\/p>\n\n\n\n<p class=\"shallow\">To czas (wzgl\u0119dny), kiedy po raz ostatni mapa strony (sitemap) zosta\u0142a przez LSCWP za\u0142adowana i zapisana w bazie danych w celu jej wykorzystania przez robota.<\/p>\n\n\n\n<p class=\"shallow\"><strong>Nast\u0119pne kompletne indeksowanie mapy witryny rozpocznie si\u0119 za<\/strong><\/p>\n\n\n\n<p class=\"shallow\">To czas (bezwzgl\u0119dny), na kiedy zaplanowane jest kolejne indeksowanie mapy strony. Innymi s\u0142owy \u2014 kiedy po raz kolejny proces indeksowania strony rozpocznie si\u0119 od nowa.<\/p>\n\n\n\n<p class=\"shallow\"><strong>Ostatnie pe\u0142ne uruchomienie wszystkich robot\u00f3w indeksuj\u0105cych<\/strong><\/p>\n\n\n\n<p class=\"shallow\">Ile czasu zaj\u0119\u0142o wszystkim robotom indeksuj\u0105cym (bo mo\u017ce ich by\u0107 wi\u0119cej ni\u017c jeden) odpytanie ka\u017cdego rekordu widocznego w mapie strony (za\u0142adowanej podczas startu cyklu robota).<\/p>\n\n\n\n<p class=\"shallow\"><strong>Ostatni czas uruchomienia robota indeksuj\u0105cego<\/strong><\/p>\n\n\n\n<p class=\"shallow\">Jak d\u0142ugo pracowa\u0142 robot indeksuj\u0105cy podczas ostatniego wywo\u0142ania. Nie dotyczy to ca\u0142ego cyklu indeksowania liczonego od pocz\u0105tku indeksowania mapy strony do odpytania ostatniego rekordu, ale pojedynczego uruchomienia robota w cyklu, czyli jego procesu (o tym dalej).<\/p>\n\n\n\n<p class=\"shallow\"><strong>Aktualny robot indeksuj\u0105cy wystartowa\u0142 w<\/strong><\/p>\n\n\n\n<p class=\"shallow\">Wprawdzie robot\u00f3w indeksuj\u0105cych mo\u017ce by\u0107 kilka, ale jednocze\u015bnie mo\u017ce dzia\u0142a\u0107 tylko jeden. Ta informacja dotyczy aktualnego robota indeksuj\u0105cego, czyli tego, kt\u00f3ry obecnie indeksuje stron\u0119, lub\u2026 Sko\u0144czy\u0142 j\u0105 indeksowa\u0107, ale nowy jeszcze nie wystartowa\u0142.<\/p>\n\n\n\n<h2 class=\"shallow wp-block-heading\">Praktyczna konfiguracja robota indeksuj\u0105cego<\/h2>\n\n\n\n<h3 class=\"shallow wp-block-heading\">1. Dodajemy map\u0119 strony<\/h3>\n\n\n\n<p class=\"shallow\">Na pocz\u0105tek przechodzimy do sekcji \u2014 <strong>Ustawienia Mapy Strony <\/strong>\u2014<strong> <\/strong>i wklejamy tam adres do mapy strony w formacie XML.<\/p>\n\n\n\n<p class=\"shallow\">Sk\u0105d j\u0105 wzi\u0105\u0107? Pocz\u0105wszy od WordPress 5.5, generowana jest automatycznie i powinna by\u0107 dost\u0119pna pod g\u0142\u00f3wnym adresem strony z dopiskiem \/wp-sitemap.xml.<\/p>\n\n\n\n<p class=\"shallow\">Mapa strony mo\u017ce by\u0107 r\u00f3wnie\u017c wygenerowana przez jedn\u0105 z wielu wtyczek SEO dla WordPress, np. Yoast SEO lub SEOPress z kt\u00f3rego sam korzystam i polecam.<\/p>\n\n\n\n<p class=\"shallow\">Opcja<strong> Drop Domain from Sitemap <\/strong>sprawia, \u017ce mapa strony zostanie przetworzona z wykluczeniem domeny. Je\u017celi korzystamy z kilku domen lub np. nietypowej konfiguracji WPML, nale\u017cy wy\u0142\u0105czy\u0107 t\u0119 opcj\u0119, aby robot poprawnie zinterpretowa\u0142 map\u0119 strony i za\u0142adowa\u0142 wszystkie adresy.<\/p>\n\n\n\n<p class=\"shallow\"><strong>Czas mapy strony<\/strong>, czyli limit czasu przeznaczony na wczytanie i przetworzenie mapy strony. Nie powinien by\u0107 zbyt kr\u00f3tki, aby upewni\u0107 si\u0119, \u017ce wszystkie adresy zosta\u0142y za\u0142adowane. Domy\u015blna warto\u015b\u0107 120 sekund wydaje si\u0119 optymalna.<\/p>\n\n\n\n<h3 class=\"shallow wp-block-heading\">2. W\u0142\u0105czamy robota<\/h3>\n\n\n\n<p class=\"shallow\">Przechodzimy do sekcji \u2014 <strong>General Settings <\/strong>\u2014 gdzie znajdziemy wi\u0119kszo\u015b\u0107 ustawie\u0144 robota.<\/p>\n\n\n\n<p class=\"shallow\">Id\u0105c od g\u00f3ry \u2014 w\u0142\u0105czamy robota indeksuj\u0105cego.<\/p>\n\n\n\n<h3 class=\"shallow wp-block-heading\">3. Ustalamy op\u00f3\u017anienie<\/h3>\n\n\n\n<p class=\"shallow\"><strong>Op\u00f3\u017anienie <\/strong>oznacza odst\u0119p czasu, wyra\u017cony w mikrosekundach, pomi\u0119dzy \u0142adowaniem kolejnych adres\u00f3w z mapy strony.\u00a0<\/p>\n\n\n\n<p class=\"shallow\">Odpowiednie ustawienie op\u00f3\u017anienia jest istotne, poniewa\u017c ma wp\u0142yw na ca\u0142kowity czas \u0142adowania wszystkich adres\u00f3w, a tym samym czas pracy robota indeksuj\u0105cego.<\/p>\n\n\n\n<p class=\"shallow\">Op\u00f3\u017anienie ma r\u00f3wnie\u017c wp\u0142yw na obci\u0105\u017cenie serwera. Przyk\u0142adowo, je\u017celi korzystasz z <a rel=\"noreferrer noopener nofollow\" href=\"https:\/\/dhosting.pl\/pp-szmigiel\" target=\"_blank\" class=\"external\">EWH w dhosting<\/a>, ale nie chcesz, aby robot uruchamia\u0142 skalowanie, ustaw op\u00f3\u017anienie na nieco wi\u0119ksz\u0105 warto\u015b\u0107, np. 10000. Spowoduje to, \u017ce kolejne adresy z mapy strony b\u0119d\u0105 \u0142adowane przez robota w odst\u0119pach co 0.01 sekundy. <\/p>\n\n\n\n<p class=\"shallow\">Warto poeksperymentowa\u0107 z warto\u015bciami w zakresie 10000 do 30000.\u00a0<\/p>\n\n\n\n<h3 class=\"shallow wp-block-heading\">4. Ustalamy czas uruchomienia (proces, p\u0119tla)<\/h3>\n\n\n\n<p class=\"shallow\"><strong>Czas uruchomienia <\/strong>to czas, przez kt\u00f3ry b\u0119dzie uruchomiony proces robota indeksuj\u0105cego, czyli jak d\u0142ugo robot b\u0119dzie wykonywa\u0142 swoj\u0105 prac\u0119.&nbsp; Warto\u015b\u0107 ta uzale\u017cniona jest od parametru serwera <em>max_execution_time<\/em> oraz limitu czasu cron (je\u017celi korzystamy z crontab zamiast crona wywo\u0142ywanego przez WordPress).&nbsp;<\/p>\n\n\n\n<p class=\"shallow\">Mo\u017cesz pozostawi\u0107 warto\u015b\u0107 domy\u015bln\u0105 (400), albo ustawi\u0107 identyczn\u0105 z <em>max_execution_time<\/em>. W najgorszym wypadku \u2014 proces robota indeksuj\u0105cego zostanie zako\u0144czony przez limit czasu, ale wystartuje ponownie.<\/p>\n\n\n\n<h3 class=\"shallow wp-block-heading\">5. Ustalamy czas bezczynno\u015bci (proces, p\u0119tla)<\/h3>\n\n\n\n<p class=\"shallow\"><strong>Interwa\u0142 mi\u0119dzy uruchomieniami<\/strong> to czas bezczynno\u015bci pomi\u0119dzy kolejnymi uruchomieniami robota ustalonymi w punkcie 4.<\/p>\n\n\n\n<p class=\"shallow\">Po co czas bezczynno\u015bci? W przypadku du\u017cych stron, limity serwera mog\u0105 uniemo\u017cliwi\u0107 robotowi za\u0142adowanie wszystkich adres\u00f3w z mapy strony w ustalonym limicie czasu i tym samym wygenerowanie pami\u0119ci podr\u0119cznej dla wszystkich stron. Dzi\u0119ki cyklicznemu uruchamianiu mo\u017ce on wykona\u0107 swoj\u0105 prac\u0119 maj\u0105c do dyspozycji mniejsze zasoby.<\/p>\n\n\n\n<p class=\"shallow\">Mo\u017cna to zrozumie\u0107 tak, \u017ce proces robota indeksuj\u0105cego i czas bezczynno\u015bci uruchamiane s\u0105 w p\u0119tli do czasu, a\u017c indeksowanie zostanie zako\u0144czone (albo zresetowane w wyniku uruchomienia go ponownie).<\/p>\n\n\n\n<p class=\"shallow\">Proponuj\u0119, aby czas bezczynno\u015bci ustawia\u0107 w zakresie pomi\u0119dzy 1 a 5 minut (300 sekund).<\/p>\n\n\n\n<h3 class=\"shallow wp-block-heading\">6. Ustalamy, jak cz\u0119sto uruchamia\u0107 robota (ca\u0142y cykl)<\/h3>\n\n\n\n<p class=\"shallow\"><strong>Interwa\u0142 robota indeksuj\u0105cego<\/strong>, czyli jak cz\u0119sto uruchamia\u0107 ca\u0142y cykl od pocz\u0105tku do ko\u0144ca (pobranie mapy strony, za\u0142adowanie wszystkich adres\u00f3w i wygenerowanie dla nich pami\u0119ci podr\u0119cznej).<\/p>\n\n\n\n<p class=\"shallow\">To prawdopodobnie najwa\u017cniejszy element konfiguracji robota i powinien by\u0107 \u015bci\u015ble uzale\u017cniony od charakteru strony, z jak\u0105 mamy do czynienia.<\/p>\n\n\n\n<p class=\"shallow\">Dla stron zawieraj\u0105cych wiele tre\u015bci dynamicznych i z kr\u00f3tkim czasem \u017cycia (TTL) pami\u0119ci podr\u0119cznej, warto\u015b\u0107 tego pola powinna by\u0107 o wiele mniejsza, ni\u017c proponowana domy\u015blnie, np. 1800, czyli p\u00f3\u0142 godziny.<\/p>\n\n\n\n<p class=\"shallow\">Dla stron nie wymagaj\u0105cych tak cz\u0119stego od\u015bwie\u017cania pami\u0119ci podr\u0119cznej wystarcz\u0105 3 godziny, albo nawet rzadziej.<\/p>\n\n\n\n<p class=\"shallow\">Jednak domy\u015blna warto\u015b\u0107 jest wg mnie bezu\u017cyteczna i dla stron, kt\u00f3rych mapa strony zawiera poni\u017cej 200 rekord\u00f3w, z powodzeniem mo\u017cna rozpocz\u0105\u0107 testy z warto\u015bci\u0105 3600 sekund, czyli pe\u0142nej godziny.<\/p>\n\n\n\n<p class=\"shallow\">Pami\u0119taj, \u017ce sam fakt ponownego uruchomienia cyklu robota indeksuj\u0105cego nie musi by\u0107 obci\u0105\u017caj\u0105cy dla serwera. Robot uruchomi si\u0119 zgodnie z zaprogramowanym interwa\u0142em, ale je\u017celi napotka na \u015bwie\u017cy cache, nie wymusi jego ponownego wygenerowania, a ca\u0142y proces mo\u017ce sko\u0144czy\u0107 si\u0119 nawet w kilka sekund.<\/p>\n\n\n\n<p class=\"shallow\">To nie dzia\u0142anie robota jest obci\u0105\u017caj\u0105ce dla serwera, ale generowanie pami\u0119ci podr\u0119cznej z tre\u015bci dynamicznych, kt\u00f3re uruchamia. Robot robi to samo, co dowolna osoba odwiedzaj\u0105ca stron\u0119, ale automatycznie.<\/p>\n\n\n\n<h3 class=\"shallow wp-block-heading\">7. Okre\u015blamy liczb\u0119 w\u0105tk\u00f3w<\/h3>\n\n\n\n<p class=\"shallow\"><strong>W\u0105tki<\/strong> okre\u015blaj\u0105 liczb\u0119 adres\u00f3w z mapy strony \u0142adowanych jednocze\u015bnie. Ten parametr, podobnie jak <strong>Op\u00f3\u017anienie<\/strong>, ma wp\u0142yw na szybko\u015b\u0107, z jak\u0105 robot za\u0142aduje wszystkie strony z mapy, ale tak\u017ce, jakie b\u0119dzie pocz\u0105tkowe obci\u0105\u017cenie serwera \u2014 wi\u0119cej o tym w punkcie 9.<\/p>\n\n\n\n<p class=\"shallow\">Domy\u015blna warto\u015b\u0107 mo\u017ce skutkowa\u0107 kr\u00f3tkim skokiem (spike) wykorzystania zasob\u00f3w serwera. Je\u017celi nie zale\u017cy Ci na szybkim od\u015bwie\u017ceniu pami\u0119ci podr\u0119cznej przez robota, ale raczej jego niezawodnym i niezauwa\u017calnym dzia\u0142aniem w tle \u2014 sugeruj\u0119 rozpocz\u0119cie test\u00f3w z tylko jednym w\u0105tkiem i stosunkowo wysokim op\u00f3\u017anieniem.<\/p>\n\n\n\n<h3 class=\"shallow wp-block-heading\">8. Ustalamy maksymalny czas \u0142adowania jednego adresu<\/h3>\n\n\n\n<p class=\"shallow\"><strong>Timeout<\/strong>, czyli jak d\u0142ugo robot b\u0119dzie oczekiwa\u0142 na za\u0142adowanie adresu, zanim przejdzie do nast\u0119pnego. Domy\u015blna warto\u015b\u0107 jest ok i je\u017celi potrzebujesz j\u0105 wyd\u0142u\u017cy\u0107 to w pierwszej kolejno\u015bci powiniene\u015b ustali\u0107, dlaczego czas generowania Twoich stron jest tak d\u0142ugi.<\/p>\n\n\n\n<h3 class=\"shallow wp-block-heading\">9. Okre\u015blamy limit obci\u0105\u017cenia serwera<\/h3>\n\n\n\n<p class=\"shallow\"><strong>Limit obci\u0105\u017cenia serwera<\/strong>, czyli ile zasob\u00f3w serwera mo\u017ce wykorzysta\u0107 robot indeksuj\u0105cy podczas dzia\u0142ania procesu.&nbsp;<\/p>\n\n\n\n<p class=\"shallow\">Podana tutaj warto\u015b\u0107 bezpo\u015brednio odnosi si\u0119 do funcji PHP <em>sys_getloadavg<\/em>.&nbsp;<\/p>\n\n\n\n<p class=\"shallow\">W przypadku EWH w dhosting warto\u015b\u0107 1 w przybli\u017ceniu oznacza 1 GHz, 10 odpowiednio 10 GHz, 16 to 16 GHz, etc. Ci\u0119\u017cko jednoznacznie okre\u015bli\u0107, jak warto\u015bci zwracane przez funkcj\u0119 maj\u0105 si\u0119 do obci\u0105\u017cenia serwera \u2014 warto dopyta\u0107 o to administrator\u00f3w, je\u017celi hosting umo\u017cliwia wykorzystanie crawlera.<\/p>\n\n\n\n<p class=\"shallow\"><strong>Istotne jest zrozumienie, \u017ce limit obci\u0105\u017cenia serwera nie jest nieprzekraczaln\u0105 \u015bcian\u0105<\/strong> i ustalenie warto\u015bci na 1 uchroni nas np. przed uruchomieniem elastycznego skalowania w dhosting.<\/p>\n\n\n\n<p class=\"shallow\">Robot indeksuj\u0105cy wywo\u0142uje jednoczesne \u0142adowanie tylu adres\u00f3w z mapy strony, ile jest w\u0105tk\u00f3w. Dopiero po ich kompletnym za\u0142adowaniu oraz odczekaniu czasu podanego w polu \u201eOp\u00f3\u017anienie\u201d, przed za\u0142adowaniem kolejnych adres\u00f3w, sprawdza warto\u015b\u0107 funkcji <em>sys_getloadavg<\/em>.&nbsp;<\/p>\n\n\n\n<p class=\"shallow\"><strong>Je\u017celi warto\u015b\u0107 zwracana przez funkcj\u0119 jest wi\u0119ksza ni\u017c ustalony limit, robot zmniejszy liczb\u0119 w\u0105tk\u00f3w o jeden i b\u0119dzie kontynuowa\u0142 swoj\u0105 prac\u0119<\/strong>.&nbsp;<\/p>\n\n\n\n<p class=\"shallow\">Hipotetycznie, je\u017celi ustalisz liczb\u0119 w\u0105tk\u00f3w na 16, ale limit obci\u0105\u017cenia na 1, zanim robot ograniczy liczb\u0119 w\u0105tk\u00f3w do 1, zd\u0105\u017cy za\u0142adowa\u0107 135 adres\u00f3w, przez ca\u0142y ten czas korzystaj\u0105c z zasob\u00f3w serwera (16 + 15 + 14 + 13 + (&#8230;) + 3 + 2 + 1 + 1 + 1 + 1 a\u017c do ko\u0144ca mapy).<\/p>\n\n\n\n<p class=\"shallow\">Dlatego konfiguracj\u0119 robota indeksuj\u0105cego warto rozpoczyna\u0107 od warto\u015bci bezpiecznych \u2014 zwi\u0119kszaj\u0105c je w razie potrzeby, ale nie odwrotnie.&nbsp;<\/p>\n\n\n\n<p class=\"shallow\">1 to dobry start, ale w razie potrzeby mo\u017cna u\u017cy\u0107 te\u017c ni\u017cszych warto\u015bci, np. 0.8. Przy czym nale\u017cy pami\u0119ta\u0107, \u017ce je\u017celi robot osi\u0105gnie 1 w\u0105tek i nie b\u0119dzie w stanie utrzyma\u0107 obci\u0105\u017cenia serwera poni\u017cej limitu \u2014 zako\u0144czy proces (przy nast\u0119pnym uruchomieniu spr\u00f3buje ponownie od miejsca, gdzie zako\u0144czy\u0142 swoj\u0105 prac\u0119).<\/p>\n\n\n\n<p class=\"shallow\">Je\u017celi chcesz, aby indeksowanie przebiega\u0142o szybko i cz\u0119sto i masz dost\u0119p do wysokich zasob\u00f3w serwera, mo\u017cesz ustawi\u0107 w\u0105tki i limit na 16.<\/p>\n\n\n\n<h2 class=\"shallow wp-block-heading\">Testowanie robota indeksuj\u0105cego<\/h2>\n\n\n\n<p class=\"shallow\">Po zako\u0144czeniu konfiguracji robota warto wykona\u0107 kilka manualnych test\u00f3w w celu sprawdzenia obci\u0105\u017cenia serwera oraz za\u0142o\u017ce\u0144, kt\u00f3re przyj\u0119li\u015bmy podczas konfiguracji.<\/p>\n\n\n\n<p class=\"shallow\">W tym celu, po zapisaniu danych formularza, przechodzimy do zak\u0142adki \u2014 <strong>Podsumowanie <\/strong>\u2014<strong> <\/strong>nast\u0119pnie z paska administracyjnego na g\u00f3rze ekranu odnajdujemy logo LiteSpeed i z menu wybieramy \u201eOpr\u00f3\u017cnij wszystko\u201d.<\/p>\n\n\n\n<p class=\"shallow\">Mo\u017cemy teraz klikn\u0105\u0107 przycisk \u201eR\u0119czne uruchomienie\u201d.<\/p>\n\n\n\n<p class=\"shallow\">Pierwsze uruchomienie powinno spowodowa\u0107 wczytanie mapy strony i wype\u0142nienie szarych p\u00f3l w kolumnie \u201eStan\u201d tabeli widocznej na stronie podsumowania.<\/p>\n\n\n\n<p class=\"shallow\">Kolejne klikni\u0119cie \u201eR\u0119czne uruchomienie\u201d spowoduje uruchomienie procesu zgodnie z konfiguracj\u0105 robota na czas ustalony w polu \u201eCzas uruchomienia\u201d.<\/p>\n\n\n\n<p class=\"shallow\">Strona zaplecza b\u0119dzie oczekiwa\u0107 na odpowied\u017a serwera tak d\u0142ugo, jak d\u0142ugo pracuje robot indeksuj\u0105cy, albo do osi\u0105gni\u0119cia limitu czasu. Je\u017celi strona zwr\u00f3ci b\u0142\u0105d (timeout), po prostu za\u0142aduj j\u0105 ponownie. Teraz, w kolumnie \u201eStan\u201d tabeli powiniene\u015b zobaczy\u0107 wype\u0142nione niebieskie i zielone pola, co \u015bwiadczy, \u017ce robot wykona\u0142 przynajmniej cz\u0119\u015b\u0107 swojej pracy.<\/p>\n\n\n\n<p class=\"shallow\"><strong>Zielone pola<\/strong> oznaczaj\u0105 liczb\u0119 adres\u00f3w z mapy strony, dla kt\u00f3rych robot napotka\u0142 \u015bwie\u017cy cache. <strong>Niebieskie <\/strong>natomiast oznaczaj\u0105 adresy, dla kt\u00f3rych TTL min\u0105\u0142 albo nieposiadaj\u0105ce cache (np. w wyniku aktualizacji tre\u015bci lub wyczyszczenia ca\u0142ej pami\u0119ci podr\u0119cznej). <strong>Kolorem czerwonym<\/strong> oznaczone s\u0105 adresy, kt\u00f3re trafi\u0142y na czarn\u0105 list\u0119 (np. w wyniku przekroczenia dozwolonego czasu \u0142adowania).<\/p>\n\n\n\n<p class=\"shallow\">Kolejne klikni\u0119cie \u201eR\u0119czne uruchomienie\u201d spowoduje albo ponowne za\u0142adowanie mapy strony i rozpocznie proces od nowa (je\u017celi robot zako\u0144czy\u0142 swoje dzia\u0142anie w wyniku tylko jednego uruchomienia), albo spowoduje kontynuowanie \u0142adowania adres\u00f3w z mapy strony w miejscu, gdzie robot zako\u0144czy\u0142 ostatni proces.<\/p>\n\n\n\n<p class=\"shallow\">Na podstawie testu, mo\u017cesz okre\u015bli\u0107, czy wprowadzone w konfiguracji warto\u015bci s\u0105 poprawne, czy wymagaj\u0105 aktualizacji.<\/p>\n\n\n\n<p class=\"shallow\">Je\u017celi masz dost\u0119p do takich danych \u2014 warto sprawdzi\u0107 obci\u0105\u017cenie serwera.<\/p>\n\n\n\n<p class=\"shallow\">Je\u017celi robot zosta\u0142 uruchomiony przez cron \u2014 mo\u017cesz podejrze\u0107 jego bie\u017c\u0105ce poczynania korzystaj\u0105c z konsoli widocznej pod tabel\u0105, klikaj\u0105c w przycisk \u201eWy\u015bwietl stan robota\u201d.<\/p>\n\n\n\n<h2 class=\"shallow wp-block-heading\">W\u0142\u0105czenie zadania cyklicznego (cron) niezale\u017cnego od WordPress<\/h2>\n\n\n\n<p class=\"shallow\">Wprawdzie WordPress posiada wbudowany system planowania zada\u0144, ale ich uruchomienie wymaga za\u0142adowania dowolnej strony w serwisie. Je\u017celi wi\u0119c nikt nie wchodzi na nasz\u0105 stron\u0119 \u2014 zaplanowane zadania nie zostan\u0105 uruchomione na czas.<\/p>\n\n\n\n<p class=\"shallow\">Rozwi\u0105zaniem tego problemu jest zaprogramowanie zadania cyklicznego uruchamianego przez serwer (hosting).&nbsp;<\/p>\n\n\n\n<p class=\"shallow\">W tym celu mo\u017cesz skorzysta\u0107 z panelu hostingu, us\u0142ugi SSH, albo poprosi\u0107 o pomoc administrator\u00f3w. W przypadku WordPress, wystarczy za pomoc\u0105 programu wget wywo\u0142ywa\u0107 adres \/wp-cron.php w folderze g\u0142\u00f3wnym Twojej strony internetowej, np. co 5 lub co 10 minut.<\/p>\n\n\n\n<p class=\"shallow\">Warto przy tym pami\u0119ta\u0107 o kilku rzeczach:<\/p>\n\n\n\n<ul class=\"shallow wp-block-list\"><li>Cron nie powinien dzia\u0142a\u0107 cz\u0119\u015bciej ni\u017c limit czasu dla crona. Przyk\u0142adowo, je\u017celi cron jest uruchamiany co 5 minut, nie powinien dzia\u0142a\u0107 d\u0142u\u017cej ni\u017c 5 minut (timeout).<\/li><li>Je\u017celi cron startuje co 5 minut, warto wykorzysta\u0107 ten interwa\u0142 przy konfiguracji robota indeksuj\u0105cego. Zar\u00f3wno \u201eczas uruchomienia\u201d, jak i \u201einterwa\u0142 mi\u0119dzy uruchomieniami\u201d mog\u0105 wynosi\u0107 5 minut \u2014 lub wielokrotno\u015b\u0107 5 minut.<\/li><li>R\u00f3wnie\u017c parametr \u201cinterwa\u0142 robota indeksuj\u0105cego\u201d mo\u017ce by\u0107 wielokrotno\u015bci\u0105 czasu, z jakim startuje cron. Dzi\u0119ki temu \u017cadne zadanie nie zostanie uruchomione z op\u00f3\u017anieniem wynikaj\u0105cym z \u201erozmini\u0119cia si\u0119\u201d startu cron oraz czasem zaplanowanych zada\u0144.<\/li><\/ul>\n\n\n\n<h2 class=\"shallow wp-block-heading\">Robot indeksuj\u0105cy \u2014 graficzny schemat dzia\u0142ania<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full image-border-gradient\"><img loading=\"lazy\" decoding=\"async\" width=\"1080\" height=\"1600\" src=\"https:\/\/retro.szmigiel.design\/wp-content\/uploads\/2021\/01\/szmigieldesign-jak-dziala-crawler-w-litespeed-cache.png\" alt=\"\" class=\"wp-image-4800\" srcset=\"https:\/\/retro.szmigiel.design\/wp-content\/uploads\/2021\/01\/szmigieldesign-jak-dziala-crawler-w-litespeed-cache.png 1080w, https:\/\/retro.szmigiel.design\/wp-content\/uploads\/2021\/01\/szmigieldesign-jak-dziala-crawler-w-litespeed-cache-346x512.png 346w, https:\/\/retro.szmigiel.design\/wp-content\/uploads\/2021\/01\/szmigieldesign-jak-dziala-crawler-w-litespeed-cache-540x800.png 540w, https:\/\/retro.szmigiel.design\/wp-content\/uploads\/2021\/01\/szmigieldesign-jak-dziala-crawler-w-litespeed-cache-1037x1536.png 1037w, https:\/\/retro.szmigiel.design\/wp-content\/uploads\/2021\/01\/szmigieldesign-jak-dziala-crawler-w-litespeed-cache-99x146.png 99w, https:\/\/retro.szmigiel.design\/wp-content\/uploads\/2021\/01\/szmigieldesign-jak-dziala-crawler-w-litespeed-cache-34x50.png 34w, https:\/\/retro.szmigiel.design\/wp-content\/uploads\/2021\/01\/szmigieldesign-jak-dziala-crawler-w-litespeed-cache-51x75.png 51w\" sizes=\"auto, (max-width:767px) 700px, (max-width:1080px) 100vw, 1080px\" \/><\/figure>\n\n\n\n<h2 class=\"shallow wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<p class=\"shallow\">Wykorzystanie szybkiej pami\u0119ci podr\u0119cznej w przypadku rozbudowanych stron internetowych opartych o systemy zarz\u0105dzania tre\u015bci\u0105 to dobry i relatywnie tani spos\u00f3b na zwi\u0119kszenie komfortu interakcji ze stron\u0105.&nbsp;<\/p>\n\n\n\n<p class=\"shallow\">Pami\u0119\u0107 podr\u0119czna jest jednak przydatna tylko wtedy, kiedy jest dost\u0119pna. Automatyczne aktualizacje WordPress i wtyczek, zmieniaj\u0105ce si\u0119 stany produkt\u00f3w lub komentarze dodawane do artyku\u0142\u00f3w &#8211; wszystkie te rzeczy mog\u0105 wymusi\u0107 uniewa\u017cnienie pami\u0119ci podr\u0119cznej, sprawiaj\u0105c, \u017ce kolejna osoba odwiedzaj\u0105ca dan\u0105 stron\u0119 b\u0119dzie czeka\u0107 znacznie d\u0142u\u017cej na jej wy\u015bwietlenie.&nbsp;<\/p>\n\n\n\n<p class=\"shallow\">Je\u017celi pozwala na to serwer, warto uruchomi\u0107 robota indeksuj\u0105cego i tym samym jak najcz\u0119\u015bciej serwowa\u0107 u\u017cytkownikom zawarto\u015b\u0107 stron internetowych z szybkiej pami\u0119ci podr\u0119cznej serwera LiteSpeed.<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Dowiedz si\u0119, jak wykorzysta\u0107 potencja\u0142 robota indeksuj\u0105cego, aby Twoja strona internetowa zawsze \u0142adowa\u0142a si\u0119 z szybkiej pami\u0119ci podr\u0119cznej.<\/p>\n","protected":false},"author":3,"featured_media":4811,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"none","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","footnotes":""},"categories":[112],"tags":[229,174,113,115],"class_list":["post-4797","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-strony-internetowe","tag-litespeed-cache-dla-wordpress","tag-optymalizacja","tag-wordpress","tag-wtyczka"],"_links":{"self":[{"href":"https:\/\/retro.szmigiel.design\/pl\/wp-json\/wp\/v2\/posts\/4797","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/retro.szmigiel.design\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/retro.szmigiel.design\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/retro.szmigiel.design\/pl\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/retro.szmigiel.design\/pl\/wp-json\/wp\/v2\/comments?post=4797"}],"version-history":[{"count":5,"href":"https:\/\/retro.szmigiel.design\/pl\/wp-json\/wp\/v2\/posts\/4797\/revisions"}],"predecessor-version":[{"id":4816,"href":"https:\/\/retro.szmigiel.design\/pl\/wp-json\/wp\/v2\/posts\/4797\/revisions\/4816"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/retro.szmigiel.design\/pl\/wp-json\/wp\/v2\/media\/4811"}],"wp:attachment":[{"href":"https:\/\/retro.szmigiel.design\/pl\/wp-json\/wp\/v2\/media?parent=4797"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/retro.szmigiel.design\/pl\/wp-json\/wp\/v2\/categories?post=4797"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/retro.szmigiel.design\/pl\/wp-json\/wp\/v2\/tags?post=4797"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}