Dziś rano otrzymałem wiadomość e-mail z informacją, że moja witryna Wordpress została automatycznie zaktualizowana do najnowszej wersji. Wiedziałem o tej funkcji, ale zawsze zastanawiałem się, jak to działa.
PHP nie jest procesem stale działającym: działa tylko na żądanie. O ile wiem, Wordpress może aktualizować się tylko wtedy, gdy ktoś ładuje stronę internetową. Ale proces aktualizacji nie przebiega natychmiastowo, więc z pewnością użytkownik odwiedzający witrynę miałby bardzo wolne ładowanie strony.
Czy istnieje inna sztuczka, której używają do automatycznych aktualizacji? Szukałem wszędzie, ale nie znalazłem żadnego wyjaśnienia.
php
automatic-updates
DisgruntledGoat
źródło
źródło
Odpowiedzi:
System, którego tu szukasz, nazywa się „WP Cron”. Jest to system przetwarzania w tle w WordPressie, który pozwala na występowanie zdarzeń poza normalnym przetwarzaniem. Nadal potrzebują wyzwalacza, aby je uruchomić, ale nie przeszkadzają w ładowaniu stron z powodu procesu w tle.
Tak, ktoś musi załadować twoją stronę. Wyłączony w pliku default-filter.php, znajdziesz następujący wiersz kodu:
add_action( 'init', 'wp_cron' );
Tak więc przy każdym ładowaniu strony działa funkcja wp_cron. Ta funkcja została zakończona w wp-obejmuje / cron.php, a jej zadaniem jest sprawdzenie zaplanowanych zdarzeń w bazie danych. Jeśli są jakieś procesy, które trzeba uruchomić w tle, to wywołuje funkcję spawn_cron.
Spawn cron ma dwie możliwe metody działania, ale pierwszą i najczęstszą jest wywołanie funkcji wp_remote_post w celu nawiązania połączenia z samym sobą, pod adresem URL wp-cron.php. Wykonując to dodatkowe żądanie HTTP, uruchamia inny proces PHP, który wykonuje całą rzeczywistą pracę. Żądanie, które tutaj wysyła, nie jest blokowane, z limitem czasu wynoszącym 0,01 sekundy. Tak więc nie ma tutaj żadnych wyników. Celem tego żądania jest po prostu rozpoczęcie nowego procesu w tle. Po wykonaniu tej czynności po prostu wraca, więc użytkownik oglądający nigdy nie ma żadnych opóźnień.
Proces wp-cron.php jest tym, co faktycznie działa, aktualizację i wszystko inne. Wiele procesów w WordPress jest obsługiwanych przez system cron. Zaplanowane publikowanie po publikacji, przetwarzanie pingów, sprawdzanie aktualizacji, wszystko, co musi się wydarzyć poza normalnym przepływem, można zaplanować, a następnie uruchomić w razie potrzeby.
Ale tak, naprawdę musi się zdarzyć normalny hit na stronie, aby rozpocząć proces. I nie, WordPress.org nie kontaktuje się bezpośrednio z Twoją witryną, aby rozpocząć, Twoja strona musi otrzymać pewien ruch, aby ją uruchomić. Wykona się każda forma ruchu.
źródło
W rzeczywistości wypychana jest automatyczna aktualizacja
wp.org
. Proces aktualizacji nadal działa w Twojej witrynie, ale w tle za pośrednictwemwp-cron
.Po wydaniu nowej niewielkiej aktualizacji chłopaki z WordPress zaczynają ją aktualizować. Rzeczywisty proces aktualizacji rozpoczyna się po sprawdzeniu
wp.org
dostępności witryny , aktualizacja jest teoretycznie dostępna, a witryna jest losowo wybierana do aktualizacji.Ponieważ każda witryna sprawdza
wp.org
dostępność nowych wersji (zwykle dwa razy dzienniewp-cron
), rolloutserver wie, ile witryn potrzebuje aktualizacji.Następnie rozpoczyna się wdrażanie, które rozpoczyna się powoli - 1 ze 128 witryn jest aktualizowana automatycznie. Jest to monitorowane, a jeśli sukces nie wskazuje na problemy z wdrożeniem, więcej witryn otrzymuje automatyczną aktualizację (zwykle następnym krokiem będzie 1 na 64 i nadal rośnie w ten sposób), dopóki nie zostaną dostarczone wszystkie automatyczne aktualizacje.
Dzięki temu programiści mogą zatrzymać wdrażanie, jeśli wystąpią jakiekolwiek problemy, ale ostatnia aktualizacja od
3.8
do3.8.1
miała 100% skuteczność.Witryny wybrane przez
1 out of 128
są w rzeczywistości losowe. Cóż, niezupełnie, ale jeśli chcesz wiedzieć, działa to tak:Adres URL witryny wymagającej aktualizacji zostaje zaszyfrowany przy użyciu
MD5
. Wykorzystanie tylko trzech pierwszych znaków tego skrótu i konwersja do niegobase10
daje 4096 możliwości. Aktualizacja rozpoczęła się dla witryn mających liczbę obliczoną między 0 a 31 (4096/32 = 128).Okej, wydaje mi się, że to w końcu dość losowe;)
W moim przypadku, ponieważ prowadzę wiele stron WordPress, aktualizacje zajęły 1 dzień - było całkiem zabawne, gdy wszystkie strony były aktualizowane.
Na wypadek gdybyś się zastanawiał: D
btw, tutaj jest artykuł na make.wordpress.org opisujący proces, jak to się stało.
źródło
Mówiąc bardzo szeroko, gdy użytkownik odwiedza witrynę, wordpress sprawdza, czy upłynął czas wygaśnięcia, a jeśli zostanie wykryte wygaśnięcie, na serwer wysyłane jest kolejne żądanie „uruchomienia” działań związanych z wygasłym zdarzeniem. To dlatego użytkownik nie odczuwa zauważalnego opóźnienia w ładowaniu strony, ponieważ serwer wykonuje rzeczywistą akcję (w tym przypadku aktualizację) w osobnym procesie.
To działa, ale czas nie jest bardzo dokładny. Im większy ruch w witrynie, tym bardziej będzie ona dokładna.
Ludzie, którzy chcą uzyskać lepszą wydajność i dokładniejsze taktowanie, mogą zablokować edytor tekstu „proces” wewnętrznego crona i użyć procesu cron systemu operacyjnego do uruchomienia sprawdzania timerów.
źródło