{"id":17964,"date":"2026-02-24T08:36:37","date_gmt":"2026-02-24T07:36:37","guid":{"rendered":"https:\/\/webhosting.de\/wordpress-rest-calls-frontend-performance-cacheboost\/"},"modified":"2026-02-24T08:36:37","modified_gmt":"2026-02-24T07:36:37","slug":"wordpress-rest-calls-frontend-performance-cacheboost","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pl\/wordpress-rest-calls-frontend-performance-cacheboost\/","title":{"rendered":"WordPress REST Calls Frontend: Problemy z wydajno\u015bci\u0105 i rozwi\u0105zania"},"content":{"rendered":"<p><strong>Wywo\u0142ania REST WordPress<\/strong> we frontendzie cz\u0119sto kosztuj\u0105 czas \u0142adowania, poniewa\u017c ka\u017cde \u017c\u0105danie \u0142aduje rdze\u0144, aktywne wtyczki i motyw, co skutkuje zb\u0119dnymi polami, kosztownymi zapytaniami do bazy danych i s\u0142abym buforowaniem. Pokazuj\u0119 konkretne hamulce i rozwi\u0105zania, kt\u00f3re skracaj\u0105 czas odpowiedzi z 60-90 milisekund na po\u0142\u0105czenie do jednocyfrowych milisekund, a tym samym minimalizuj\u0105 czas \u0142adowania. <strong>Wydajno\u015b\u0107<\/strong> z przodu.<\/p>\n\n<h2>Punkty centralne<\/h2>\n<p>Kr\u00f3tko podsumuj\u0119 najwa\u017cniejsze d\u017awignie, zanim przejd\u0119 do bardziej szczeg\u00f3\u0142owych informacji. Pomo\u017ce to szybko rozpozna\u0107, od czego nale\u017cy zacz\u0105\u0107 i kt\u00f3re kroki s\u0105 skuteczne. Lista odzwierciedla typowe w\u0105skie gard\u0142a, kt\u00f3re widz\u0119 podczas audyt\u00f3w i wymienia najskuteczniejsze \u015brodki zaradcze. Mo\u017cna j\u0105 wykorzysta\u0107 jako ma\u0142\u0105 list\u0119 kontroln\u0105 dla nast\u0119pnych sprint\u00f3w i nada\u0107 im priorytety w ukierunkowany spos\u00f3b. Ka\u017cdy z punkt\u00f3w przyczynia si\u0119 do szybszego uzyskania pierwszych rezultat\u00f3w, ni\u017cszego TTFB i lepszej interakcji, a tak\u017ce do wzmocnienia <strong>Do\u015bwiadczenie u\u017cytkownika<\/strong>.<\/p>\n<ul>\n  <li><strong>Nad g\u0142ow\u0105<\/strong> zmniejszy\u0107: Zmniejsz \u0142adowno\u015b\u0107, wytnij niepotrzebne pola.<\/li>\n  <li><strong>Buforowanie<\/strong> u\u017cycie: Po\u0142\u0105czenie pami\u0119ci podr\u0119cznych OPcache, Redis i Edge.<\/li>\n  <li><strong>Hosting<\/strong> Wzmocnienie: PHP 8.3, Nginx\/LiteSpeed, dedykowane zasoby.<\/li>\n  <li><strong>AJAX<\/strong> unika\u0107: zast\u0105pi\u0107 admin-ajax.php chudymi punktami ko\u0144cowymi.<\/li>\n  <li><strong>Monitoring<\/strong> ustali\u0107: Pomiar TTFB, P95 i czasu DB w spos\u00f3b ci\u0105g\u0142y.<\/li>\n<\/ul>\n\n<h2>Dlaczego wywo\u0142ania REST spowalniaj\u0105 frontend<\/h2>\n<p>Ka\u017cde \u017c\u0105danie REST pobiera WordPress, \u0142aduje <strong>Wtyczki<\/strong> oraz aktywny motyw i haki wyzwalaczy, kt\u00f3re cz\u0119sto nie maj\u0105 nic wsp\u00f3lnego z punktem ko\u0144cowym. Domy\u015blne punkty ko\u0144cowe, takie jak \/wp\/v2\/posts, udost\u0119pniaj\u0105 wiele p\u00f3l, kt\u00f3re nigdy nie pojawiaj\u0105 si\u0119 we frontendzie, zwi\u0119kszaj\u0105c obci\u0105\u017cenie JSON i spowalniaj\u0105c transfer. Du\u017ce tabele postmeta bez znacz\u0105cych indeks\u00f3w tworz\u0105 powolne JOINy, blokuj\u0105 w\u0105tki i zwi\u0119kszaj\u0105 obci\u0105\u017cenie serwera, nawet przy niewielkiej liczbie jednoczesnych u\u017cytkownik\u00f3w. Opcje autoload dodatkowo zwi\u0119kszaj\u0105 obci\u0105\u017cenie ka\u017cdego \u017c\u0105dania, poniewa\u017c WordPress \u0142aduje je wcze\u015bnie, nawet je\u015bli punkt ko\u0144cowy ich nie potrzebuje. Dlatego te\u017c priorytetowo traktuj\u0119 diet\u0119 \u0142adunku, konserwacj\u0119 indeks\u00f3w i wczesne sprawdzanie uprawnie\u0144, aby unikn\u0105\u0107 niepotrzebnych obci\u0105\u017ce\u0144. <strong>Praca z baz\u0105 danych<\/strong> nawet si\u0119 nie uruchamia.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/02\/wordpress-performance-2491.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>REST vs. admin-ajax.php vs. niestandardowe punkty ko\u0144cowe<\/h2>\n<p>Wiele projekt\u00f3w nadal wysy\u0142a \u017c\u0105dania frontendu za po\u015brednictwem admin-ajax.php, ale ta metoda \u0142aduje kontekst administratora, w tym <strong>admin_init<\/strong> i zauwa\u017calnie spowalnia reakcje. Pomiary pokazuj\u0105: Punkty ko\u0144cowe REST \u015brednio 60-89 ms, admin-ajax.php cz\u0119sto 70-92 ms, podczas gdy minimalne niestandardowe programy obs\u0142ugi jako obowi\u0105zkowe wtyczki czasami odpowiadaj\u0105 w czasie poni\u017cej 7 ms. Im wi\u0119cej wtyczek jest aktywnych, tym bardziej stosunek ten przechyla si\u0119 na korzy\u015b\u0107 REST i admin-ajax.php, poniewa\u017c na ka\u017cde \u017c\u0105danie wykonywany jest dodatkowy kod. W przypadku gor\u0105cych \u015bcie\u017cek polegam na ma\u0142ych, specyficznych punktach ko\u0144cowych z niewielk\u0105 liczb\u0105 zale\u017cno\u015bci, kt\u00f3re wyra\u017anie wersjonuj\u0119 i udost\u0119pniam tylko niezb\u0119dne haki. Takie podej\u015bcie pozwala unikn\u0105\u0107 <strong>Nad g\u0142ow\u0105<\/strong>, redukuje konflikty i zapewnia kontrol\u0119 nad op\u00f3\u017anieniami i przepustowo\u015bci\u0105.<\/p>\n\n<h2>Podstawy hostingu zapewniaj\u0105ce szybkie odpowiedzi<\/h2>\n<p>Dobra infrastruktura zapewnia najwi\u0119ksze post\u0119py: PHP 8.3 z OPcache, wysokowydajny serwer WWW, taki jak Nginx lub LiteSpeed oraz aktywna pami\u0119\u0107 podr\u0119czna obiekt\u00f3w za po\u015brednictwem Redis lub Memcached skracaj\u0105 czas wymagany dla pami\u0119ci podr\u0119cznej. <strong>TTFB<\/strong> wyra\u017anie. Bez Redis wiele zapyta\u0144 jest powtarzanych, co niepotrzebnie obci\u0105\u017ca baz\u0119 danych i zwi\u0119ksza op\u00f3\u017anienia w szczytach. Polegam na dedykowanych, skalowalnych zasobach dla bardzo cz\u0119sto u\u017cywanych front-end\u00f3w i aktywuj\u0119 HTTP\/3 i Brotli, aby przyspieszy\u0107 cz\u0119\u015b\u0107 sieciow\u0105. Bardziej szczeg\u00f3\u0142owe wprowadzenie mo\u017cna znale\u017a\u0107 w artykule <a href=\"https:\/\/webhosting.de\/pl\/wordpress-rest-api-optymalizacja-wydajnosci-perfboost\/\">Optymalizacja wydajno\u015bci REST API<\/a>, kt\u00f3ry strukturyzuje sekwencj\u0119 krok\u00f3w strojenia. Je\u015bli po\u0142o\u017cysz ten fundament, zapobiegniesz kolejkom, zmniejszysz warto\u015bci P95, a tak\u017ce utrzymasz kr\u00f3tki czas w przypadku szczyt\u00f3w ruchu. <strong>Czas reakcji<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/02\/wp_rest_performance_meeting_8342.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Wydajne buforowanie dla REST GETs<\/h2>\n<p>Buforowanie oddziela prac\u0119 zwi\u0105zan\u0105 z procesorem od sieci i przyspiesza powtarzaj\u0105ce si\u0119 \u017c\u0105dania w sieci. <strong>Prz\u00f3d<\/strong> zauwa\u017calne. \u0141\u0105cz\u0119 OPcache dla kodu bajtowego PHP, Redis dla powtarzaj\u0105cych si\u0119 WP_Querys i pami\u0119ci podr\u0119cznych kraw\u0119dzi z ETagami, aby niezawodnie obs\u0142ugiwa\u0107 odpowiedzi 304. Dziel\u0119 trasy GET na dane o wysokiej i niskiej zmienno\u015bci: Dla list produkt\u00f3w lub przegl\u0105d\u00f3w artyku\u0142\u00f3w ustawiam d\u0142ugie TTL, dla dynamicznych wid\u017cet\u00f3w kr\u00f3tkie. Wa\u017cne jest, aby oddzieli\u0107 trasy buforowane i spersonalizowane, tak aby pami\u0119\u0107 podr\u0119czna kraw\u0119dzi osi\u0105ga\u0142a wysoki wsp\u00f3\u0142czynnik trafie\u0144 i nie zawodzi\u0142a z powodu plik\u00f3w cookie. Je\u015bli utrzymujesz ma\u0142e rozmiary JSON i u\u017cywasz zr\u00f3\u017cnicowanych TTL, wygrywasz podw\u00f3jnie: kr\u00f3tsze czasy transferu i lepsze wyniki. <strong>Wsp\u00f3\u0142czynniki trafie\u0144<\/strong>; Niniejszy przewodnik zawiera pomocne praktyczne przyk\u0142ady <a href=\"https:\/\/webhosting.de\/pl\/wordpress-json-response-load-time-factor-cacheboost\/\">Wskaz\u00f3wki dotycz\u0105ce pami\u0119ci podr\u0119cznej JSON<\/a>.<\/p>\n\n<h2>Usprawnienie i zabezpieczenie punkt\u00f3w ko\u0144cowych<\/h2>\n<p>Eliminuj\u0119 nieu\u017cywane trasy (takie jak komentarze), zanim wygeneruj\u0105 koszty i wycinam odpowiedzi za pomoc\u0105 parametru <strong>pola<\/strong> do tego, co jest konieczne. Sprawdzam wywo\u0142ania zwrotne uprawnie\u0144 tak wcze\u015bnie, jak to mo\u017cliwe, aby unikn\u0105\u0107 kosztownych zapyta\u0144 do bazy danych w przypadku braku dost\u0119pu. W przypadku tras zapisu u\u017cywam nonces lub JWT i ustawiam limit szybko\u015bci, aby d\u0142awi\u0107 boty bez przeszkadzania legalnym u\u017cytkownikom. Po stronie \u0142adunku testuj\u0119, ile p\u00f3l mog\u0119 odci\u0105\u0107, dop\u00f3ki frontend nie spe\u0142ni wszystkich reklam, zmniejszaj\u0105c rozmiar JSON krok po kroku. Mniejsze odpowiedzi, mniej serializacji, mniejsza przepustowo\u015b\u0107, a zatem zauwa\u017calnie szybciej <strong>\u017b\u0105dania<\/strong>.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/02\/wordpress-rest-api-performance-5321.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Gutenberg, Heartbeat i Editor-Last<\/h2>\n<p>Edytor generuje wiele dost\u0119p\u00f3w API, kt\u00f3re przeszkadzaj\u0105 w codziennej pracy, je\u015bli uzyskuj\u0105 dost\u0119p do interfejsu <strong>Obci\u0105\u017cenie serwera<\/strong> spotka\u0107. Zwi\u0119kszam interwa\u0142 bicia serca, reguluj\u0119 cz\u0119stotliwo\u015b\u0107 automatycznego zapisywania i sprawdzam, kt\u00f3re zapytania dotycz\u0105ce taksonomii eskaluj\u0105. Wy\u0142\u0105czam niepotrzebne wid\u017cety pulpitu nawigacyjnego i wtyczki diagnostyczne zaraz po zako\u0144czeniu pracy. Profilery odkrywaj\u0105 powolne haki, kt\u00f3re od\u0142\u0105czam lub uruchamiam z op\u00f3\u017anieniem czasowym. Dzi\u0119ki temu akcje edytora dzia\u0142aj\u0105 p\u0142ynnie bez spowalniania wywo\u0142a\u0144 frontendu, a szczyty obci\u0105\u017cenia w ci\u0105gu dnia wyra\u017anie si\u0119 sp\u0142aszczaj\u0105, co jest korzystne dla <strong>Og\u00f3lna wydajno\u015b\u0107<\/strong> korzy\u015bci.<\/p>\n\n<h2>Kolejki, wsp\u00f3\u0142bie\u017cno\u015b\u0107 i WP-Cron<\/h2>\n<p>Kosztowne zadania, takie jak generowanie obraz\u00f3w, zadania importu lub tworzenie plik\u00f3w PDF, s\u0105 umieszczane w kolejkach, dzi\u0119ki czemu mo\u017cna je <strong>\u015acie\u017cka krytyczna<\/strong> odpowiedzi REST. Dezaktywuj\u0119 alternatywny WP-Cron i ustawiam prawdziwy cron, kt\u00f3ry przetwarza zadania niezawodnie i w spokojnych momentach. \u015aci\u015ble kontroluj\u0119 stopie\u0144 r\u00f3wnoleg\u0142o\u015bci, aby baza danych i PHP-FPM nie pad\u0142y na kolana, gdy kilka ci\u0119\u017ckich zada\u0144 rozpocznie si\u0119 w tym samym czasie. W przypadku szczyt\u00f3w wysy\u0142ania, nadaj\u0119 priorytet \u017c\u0105daniom frontendu i odraczam ci\u0119\u017ckie zadania wsadowe do momentu, a\u017c wystarczaj\u0105ca ilo\u015b\u0107 zasob\u00f3w b\u0119dzie wolna. Dzi\u0119ki temu interakcje s\u0105 szybkie, nawet gdy praca w tle jest uruchomiona, a op\u00f3\u017anienia P95 pozostaj\u0105 pod kontrol\u0105, co minimalizuje <strong>Reakcja u\u017cytkownika<\/strong> ulepszony.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/02\/wordpress_rest_issues_3547.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Monitorowanie i kluczowe dane, kt\u00f3re si\u0119 licz\u0105<\/h2>\n<p>Mierz\u0119 TTFB, op\u00f3\u017anienie P95, wska\u017anik trafie\u0144 w pami\u0119ci podr\u0119cznej i czas DB na \u017c\u0105danie, poniewa\u017c tylko twarde liczby mog\u0105 zapewni\u0107 <strong>Efekt<\/strong> zaj\u0119te. W przypadku tras GET planuj\u0119 \u0142adunki JSON do 50 KB, aby urz\u0105dzenia mobilne i s\u0142absze sieci mog\u0142y z nich korzysta\u0107. Dashboardy pokazuj\u0105 RPS, d\u0142ugo\u015bci kolejek i wska\u017aniki b\u0142\u0119d\u00f3w, dzi\u0119ki czemu mog\u0119 natychmiast znale\u017a\u0107 regresje. Powolne dzienniki zapyta\u0144 i \u015bledzenie (np. wywo\u0142ania zwrotne uprawnie\u0144, WP_Query, zdalne wywo\u0142ania) podkre\u015blaj\u0105 kosztowne punkty zapalne, kt\u00f3rym nadaj\u0119 priorytet i \u0142agodz\u0119. Ci, kt\u00f3rzy chc\u0105 zag\u0142\u0119bi\u0107 si\u0119 w analiz\u0119 przyczyn \u017ar\u00f3d\u0142owych, mog\u0105 skorzysta\u0107 z kompaktowego narz\u0119dzia <a href=\"https:\/\/webhosting.de\/pl\/rest-api-wydajnosc-wordpress-backend-analiza-czasu-ladowania-szybkosc\/\">Analiza czasu \u0142adowania backendu<\/a>, kt\u00f3re w przejrzysty spos\u00f3b organizuj\u0105 punkty pomiarowe i korelacje oraz powtarzaj\u0105ce si\u0119 <strong>kontrole<\/strong>.<\/p>\n\n<h2>Praktyczny plan tuningu<\/h2>\n<p>Zaczynam od podstaw hostingu (PHP 8.3, OPcache, Nginx\/LiteSpeed), aktywuj\u0119 Redis i konfiguruj\u0119 HTTP\/3 w celu optymalizacji. <strong>Linia bazowa<\/strong> aby go ustabilizowa\u0107. Nast\u0119pnie usprawniam punkty ko\u0144cowe za pomoc\u0105 _fields, wycinam niepotrzebne trasy i wprowadzam wczesne sprawdzanie uprawnie\u0144. Nast\u0119pnie optymalizuj\u0119 indeksy bazy danych (postmeta, relacje termin\u00f3w) i ograniczam opcje autoload do niezb\u0119dnego minimum. W czwartym kroku oddzielam cache od spersonalizowanych GET, definiuj\u0119 profile TTL i zapewniam sp\u00f3jne odpowiedzi 304. Na koniec sprawdzam hotspoty edytora, reguluj\u0119 heartbeat, przenosz\u0119 prace pomocnicze do kolejek i ustawiam bud\u017cety metryk, aby m\u00f3c zoptymalizowa\u0107 przysz\u0142e dzia\u0142ania. <strong>Odchylenia<\/strong> w odpowiednim czasie.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/02\/wp_rest_calls_frontend_performance_4387.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Por\u00f3wnanie: op\u00f3\u017anienia w liczbach<\/h2>\n<p>Liczby pomagaj\u0105 w podejmowaniu decyzji, dlatego por\u00f3wnuj\u0119 wsp\u00f3lne \u015bcie\u017cki i komentuj\u0119 <strong>U\u017cycie<\/strong> kr\u00f3tki. Punkty ko\u0144cowe REST API cz\u0119sto odpowiadaj\u0105 w zakresie 60-90 ms, gdy tylko wtyczki wchodz\u0105 do gry, a \u0142adunki rosn\u0105. admin-ajax.php wprowadza dodatkowy narzut z kontekstu administratora i jest wolniejszy w praktyce. Minimalistyczne niestandardowe modu\u0142y obs\u0142ugi we wtyczce MU zapewniaj\u0105 najlepsze warto\u015bci, szczeg\u00f3lnie w przypadku gor\u0105cych \u015bcie\u017cek i wysokiej r\u00f3wnoleg\u0142o\u015bci. W wielu projektach \u0142\u0105cz\u0119 REST dla standardowych tras z niestandardowymi handlerami dla krytycznych wid\u017cet\u00f3w lub sugestii wyszukiwania w celu zminimalizowania op\u00f3\u017anie\u0144 i <strong>Skalowanie<\/strong> do r\u00f3wnowagi.<\/p>\n<table>\n  <thead>\n    <tr>\n      <th>Technologia<\/th>\n      <th>\u015aredni czas reakcji<\/th>\n      <th>Nota aplikacyjna<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>REST API (\/wp-json)<\/td>\n      <td>ok. 60-90 ms<\/td>\n      <td>Dobre dla ustandaryzowanych GET-\u00f3w; zachowaj oszcz\u0119dno\u015b\u0107 z _fields i buforowaniem<\/td>\n    <\/tr>\n    <tr>\n      <td>admin-ajax.php<\/td>\n      <td>ok. 70-92 ms<\/td>\n      <td>Unikaj, koszty administracyjne spowalniaj\u0105; obs\u0142uguj tylko starsze przypadki w perspektywie kr\u00f3tkoterminowej<\/td>\n    <\/tr>\n    <tr>\n      <td>Niestandardowy punkt ko\u0144cowy MU<\/td>\n      <td>cz\u0119sto 5-7 ms<\/td>\n      <td>Idealny do gor\u0105cych \u015bcie\u017cek, minimalnej ilo\u015bci kodu, wyra\u017anego sprawdzania uprawnie\u0144<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n\n<h2>Organizowanie \u017c\u0105da\u0144 frontendu<\/h2>\n<p>Wiele milisekund przypada na sam\u0105 przegl\u0105dark\u0119. \u0141\u0105cz\u0119 kilka ma\u0142ych GET-\u00f3w w jeden <strong>Partia<\/strong>, je\u015bli dane maj\u0105 to samo \u017ar\u00f3d\u0142o, i oddzieli\u0107 oczekuj\u0105ce szczeg\u00f3\u0142y (np. wid\u017cety pomocnicze) poprzez <strong>Leniwe \u0142adowanie<\/strong> lub tylko w przypadku interakcji. \u0141\u0105czenie \u017c\u0105da\u0144 pozwala unikn\u0105\u0107 duplikowania \u017c\u0105da\u0144: Je\u015bli ten sam punkt ko\u0144cowy jest \u017c\u0105dany w tym samym czasie z identycznymi parametrami, front-end u\u017cywa r\u00f3wnie\u017c pierwszego wyniku Promise. Debounce\/throttle na wej\u015bciach (wyszukiwanie, filtrowanie) zapobiega chatty API. Mo\u017cliwo\u015b\u0107 anulowania \u017c\u0105da\u0144 poprzez <strong>AbortController<\/strong> oszcz\u0119dno\u015b\u0107 czasu serwera podczas odmontowywania komponent\u00f3w. Ustawiam priorytety dla wst\u0119pnego \u0142adowania obraz\u00f3w i skrypt\u00f3w (rel=preload, fetchPriority), aby krytyczne dane REST by\u0142y widoczne jako pierwsze. Zmniejsza to postrzegan\u0105 <strong>Czas na interaktywno\u015b\u0107<\/strong>, nawet je\u015bli bezwzgl\u0119dne op\u00f3\u017anienia backendu pozostan\u0105 niezmienione.<\/p>\n\n<h2>Umowy API, schemat i wersjonowanie<\/h2>\n<p>Stabilne kontrakty przyspieszaj\u0105 prac\u0119: definiuj\u0119 jeden kontrakt na tras\u0119. <strong>Schemat<\/strong> (wpisz bezpiecze\u0144stwo, wymagane pola) i zamro\u017a <strong>v1\/v2<\/strong> wersje, dzi\u0119ki czemu klienci mog\u0105 aktualizowa\u0107 w ukierunkowany spos\u00f3b. \u0141ami\u0105ce zmiany trafiaj\u0105 do nowych tras, stare pozostaj\u0105 w\u0105skie i s\u0105 szybko wy\u0142\u0105czane. Odpowiedzi s\u0105 konsekwentnie paginowane (page, per_page, total), identyfikatory s\u0105 stabilne, a pola dobrze nazwane. Oddzielam <strong>Czytaj<\/strong> oraz <strong>pisanie<\/strong> (GET vs. POST\/PATCH\/DELETE) i odrzucam przeci\u0105\u017cone punkty ko\u0144cowe typu \"wszystko w jednym\", poniewa\u017c komplikuj\u0105 one buforowanie i autoryzacj\u0119. W przypadku list udost\u0119pniam tylko pola listy; strony szczeg\u00f3\u0142\u00f3w pobieraj\u0105 bardziej szczeg\u00f3\u0142owe dane na \u017c\u0105danie. Ta przejrzysto\u015b\u0107 zwi\u0119ksza <strong>Wsp\u00f3\u0142czynnik trafie\u0144 pami\u0119ci podr\u0119cznej<\/strong>, zmniejsza liczb\u0119 b\u0142\u0119d\u00f3w i u\u0142atwia p\u00f3\u017aniejsz\u0105 refaktoryzacj\u0119.<\/p>\n\n<h2>Ulepszanie indeks\u00f3w baz danych i zapyta\u0144<\/h2>\n<p>Najpopularniejszym hotspotem pozostaje <strong>postmeta<\/strong>. Sprawdzam, kt\u00f3re filtry meta_key s\u0105 u\u017cywane i ustawiam odpowiednie indeksy z\u0142o\u017cone (np. (post_id, meta_key) lub (meta_key, meta_value(191)) dla przypadk\u00f3w LIKE\/Equality). W przypadku taksonomii warto u\u017cy\u0107 indeks\u00f3w na <strong>term_relationships<\/strong> (object_id, term_taxonomy_id) i do <strong>term_taxonomy<\/strong> (taxonomy, term_id). Drogie <em>NIE ISTNIEJE<\/em> a symbole wieloznaczne LIKE s\u0105 zast\u0119powane wst\u0119pnie obliczonymi flagami lub z\u0142\u0105czeniami o czystej kardynalno\u015bci. Zmniejszam opcje autoload u\u017cywaj\u0105c du\u017cych tablic sk\u0142adaj\u0105cych si\u0119 z <strong>wp_options<\/strong> s\u0105 ustawione na autoload=no i pobierane tylko wtedy, gdy jest to wymagane. Usuwam osierocone transjenty i redukuj\u0119 wst\u0119pne zapytania w <strong>permission_callback<\/strong>, aby kilka SELECT nie rozpoczyna\u0142o si\u0119 przed sprawdzeniem autoryzacji. Rezultat: mniej operacji we\/wy, bardziej p\u0142askie szczyty CPU i wi\u0119ksza stabilno\u015b\u0107. <strong>P95<\/strong>.<\/p>\n\n<h2>Poprawne ustawienie nag\u0142\u00f3wka buforowania HTTP<\/h2>\n<p>Korzy\u015bci brzegowe nie mog\u0105 by\u0107 zrealizowane bez poprawnych nag\u0142\u00f3wk\u00f3w. Zapewniam silne walidatory dla GET: <strong>ETag<\/strong> (hash nad odpowiednimi polami) lub <strong>Ostatnio zmodyfikowany<\/strong> (na podstawie post_modified_gmt). Wyczy\u015b\u0107 <strong>Kontrola pami\u0119ci podr\u0119cznej<\/strong>-profile (max-age dla przegl\u0105darek, s-maxage dla Edge) i czysty <strong>R\u00f3\u017cne<\/strong> (np. akceptacja kodowania, autoryzacja, pliki cookie tylko w razie potrzeby). W przypadku spersonalizowanych danych u\u017cywam kr\u00f3tkich czas\u00f3w TTL lub celowo rezygnuj\u0119 z buforowania, aby <strong>Prywatno\u015b\u0107<\/strong> i poprawno\u015b\u0107. Wa\u017cne: 304 odpowiedzi nie mog\u0105 mie\u0107 du\u017cych tre\u015bci, aby zminimalizowa\u0107 czas sieci i procesora. W ten spos\u00f3b rewalidacje dzia\u0142aj\u0105 niezawodnie i zmniejszaj\u0105 obci\u0105\u017cenie Origin w przypadku powtarzaj\u0105cych si\u0119 b\u0142\u0119d\u00f3w. <strong>Zapytania<\/strong>.<\/p>\n\n<h2>Sprawdzanie poprawno\u015bci pami\u0119ci podr\u0119cznej i projektowanie kluczy<\/h2>\n<p>Pami\u0119\u0107 podr\u0119czna jest tak dobra, jak jej uniewa\u017cnienie. I name <strong>Klucze<\/strong> deterministycznie (przestrze\u0144 nazw, trasa, hash zapytania, wersja) i uniewa\u017cnia\u0107 specjalnie dla zdarze\u0144: Post update, zmiana terminu, zmiana ceny. Oddzielam klucze dla tras list i tras szczeg\u00f3\u0142owych, aby pojedyncza aktualizacja nie mia\u0142a wp\u0142ywu na ca\u0142e listy. U\u017cywam <strong>Tagowanie<\/strong> (logiczne: post:123, term:7), aby wyczy\u015bci\u0107 wiele kluczy za pomoc\u0105 kilku sygna\u0142\u00f3w. \u015acie\u017cki zapisu najpierw uniewa\u017cniaj\u0105 kraw\u0119d\u017a, nast\u0119pnie pami\u0119\u0107 podr\u0119czn\u0105 obiekt\u00f3w, a na ko\u0144cu rozgrzewki dla najlepszych tras. Rozwa\u017cam odpowiedzi JSON <strong>stabilny<\/strong>, dzi\u0119ki czemu kompresja i trafienia ETag powtarzaj\u0105 si\u0119. Je\u015bli odpowiednio udokumentujesz projekt klucza, unikniesz mistycznych pomini\u0119\u0107 pami\u0119ci podr\u0119cznej i utrzymasz wysoki wsp\u00f3\u0142czynnik trafie\u0144.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/02\/wordpress-rest-performance-4856.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Bezpiecze\u0144stwo, ochrona danych i ochrona przed nadu\u017cyciami<\/h2>\n<p>Wydajno\u015b\u0107 bez <strong>Bezpiecze\u0144stwo<\/strong> jest bezwarto\u015bciowe. Przechowuj\u0119 uprawnienia do zapisu za <strong>Nonces<\/strong> lub token\u00f3w i rejestruje nieudane dost\u0119py z ograniczonym poziomem szczeg\u00f3\u0142owo\u015bci, aby unikn\u0105\u0107 atak\u00f3w czasowych. Limity szybko\u015bci s\u0105 jak najbli\u017cej kraw\u0119dzi i s\u0105 skalowane zgodnie z IP, u\u017cytkownikiem i tras\u0105. Usuwam PII z GET, maskuj\u0119 e-maile\/numery telefon\u00f3w i zapobiegam wyliczaniu poprzez zbyt hojne filtry. CORS jest specjalnie skonfigurowany: Tylko znane pochodzenie, tylko niezb\u0119dne metody\/nag\u0142\u00f3wki, brak symboli wieloznacznych dla danych uwierzytelniaj\u0105cych. Rejestrowanie jest oparte na pr\u00f3bkowaniu i rotacji, aby unikn\u0105\u0107 gor\u0105cych punkt\u00f3w. Taka konfiguracja chroni zasoby, utrzymuje boty w ryzach i pozwala prawdziwym u\u017cytkownikom korzysta\u0107 z bezp\u0142atnego dost\u0119pu. <strong>Mo\u017cliwo\u015bci<\/strong> Zysk.<\/p>\n\n<h2>Testy, benchmarki i bud\u017cety w praktyce<\/h2>\n<p>Testuj\u0119 od wewn\u0105trz: testy jednostkowe dla helper\u00f3w, testy integracyjne dla zapyta\u0144, a nast\u0119pnie <strong>Testy obci\u0105\u017ceniowe<\/strong> dla punkt\u00f3w ko\u0144cowych z realistycznymi danymi. Scenariusze obejmuj\u0105 zimny start (brak pami\u0119ci podr\u0119cznej), ciep\u0142y start (wysoki wsp\u00f3\u0142czynnik trafie\u0144) i b\u0142\u0119dne dane wej\u015bciowe. Mierz\u0119 RPS, P50\/P95\/P99, wska\u017aniki b\u0142\u0119d\u00f3w, CPU\/pami\u0119\u0107 na pracownika FPM, zapytania\/\u017c\u0105dania DB i obj\u0119to\u015b\u0107 sieci. Dla frontendu ustawiam limity czasu, pr\u00f3by z backoffem i <strong>Wy\u0142\u0105cznik automatyczny<\/strong>-Logika zapewnia p\u0142ynne dzia\u0142anie interfejsu u\u017cytkownika, nawet je\u015bli poszczeg\u00f3lne us\u0142ugi dzia\u0142aj\u0105 wolno. Bud\u017cety s\u0105 wi\u0105\u017c\u0105ce (np. GET \u2264 50 KB, P95 \u2264 120 ms przy ciep\u0142ym starcie, czas DB \u2264 25 ms) i s\u0105 weryfikowane w CI. W ten spos\u00f3b ulepszenia pozostaj\u0105 mierzalne, a regresje <strong>widoczny<\/strong>.<\/p>\n\n<h2>WooCommerce, multisite i t\u0142umaczenia<\/h2>\n<p>Sklepy i multisites maj\u0105 specjalne zasady. WooCommerce posiada z\u0142o\u017con\u0105 logik\u0119 cenow\u0105, magazynow\u0105 i podatkow\u0105, kt\u00f3ra mo\u017ce by\u0107 szybko zmieniona. <strong>spersonalizowany<\/strong> odpowiedzi s\u0105 generowane. \u015aci\u015ble oddzielam: publiczne dane katalogowe (d\u0142ugi TTL, obs\u0142uguj\u0105ce kraw\u0119dzie) od cen\/koszyk\u00f3w zwi\u0105zanych z klientami (kr\u00f3tkotrwa\u0142e, cache obiekt\u00f3w). Wyra\u017anie rozdzielam klucze pami\u0119ci podr\u0119cznej dla walut, r\u00f3l lub region\u00f3w, zamiast miesza\u0107 wszystko. W przypadku wielu witryn zwracam uwag\u0119 na koszty prze\u0142\u0105czania blog\u00f3w i izolacj\u0119 <strong>Stany nieustalone<\/strong> na stron\u0119. T\u0142umaczenia (Polylang, WPML) zwi\u0119kszaj\u0105 liczb\u0119 kombinacji zapyta\u0144; wst\u0119pnie obliczone tabele odno\u015bnik\u00f3w lub dedykowane punkty ko\u0144cowe dla ka\u017cdego j\u0119zyka pomagaj\u0105 tutaj, dzi\u0119ki czemu z\u0142o\u017cone JOIN nie s\u0105 tworzone dla ka\u017cdej listy. Rezultat: obliczalne op\u00f3\u017anienia pomimo bogactwa funkcji.<\/p>\n\n<h2>Anty-wzorce, kt\u00f3rych unikam<\/h2>\n<p>Istniej\u0105 powtarzaj\u0105ce si\u0119 pu\u0142apki: kosztowne po\u0142\u0105czenia zdalne w ramach tras REST, kt\u00f3re czekaj\u0105 synchronicznie na systemy innych firm; <strong>permission_callback<\/strong>, kt\u00f3re ju\u017c wykonuj\u0105 prac\u0119 bazy danych; przeci\u0105\u017cone trasy z ponad 30 polami, kt\u00f3re nigdy nie s\u0105 u\u017cywane; pliki cookie na wszystkich stronach, kt\u00f3re tworz\u0105 pami\u0119ci podr\u0119czne kraw\u0119dzi <strong>uniewa\u017cnia\u0107<\/strong>; brakuj\u0105ca paginacja, kt\u00f3ra zamienia listy w pliki JSON o rozmiarze 1 MB; wtyczki do debugowania, kt\u00f3re s\u0105 produktywnie aktywne. Usuwam te wzorce na wczesnym etapie i zast\u0119puj\u0119 je asynchronicznymi zadaniami, \u015bcis\u0142ymi bia\u0142ymi listami p\u00f3l, plikami cookie zwi\u0105zanymi ze zdarzeniami i czyst\u0105 paginacj\u0105. Dzi\u0119ki temu kod jest czytelny, infrastruktura cicha, a front-end bardziej wydajny. <strong>reaktywny<\/strong>.<\/p>\n\n<h2>Podsumowanie: Szybkie wywo\u0142ania REST we frontendzie<\/h2>\n<p>Przyspieszam <strong>WordPress<\/strong> poprzez wzmocnienie infrastruktury, usprawnienie \u0142adunk\u00f3w i ustanowienie inteligentnego buforowania. Ma\u0142e, ukierunkowane punkty ko\u0144cowe dla krytycznych funkcji wyra\u017anie pokonuj\u0105 og\u00f3lne \u015bcie\u017cki, zw\u0142aszcza pod obci\u0105\u017ceniem. Dzi\u0119ki Redis, OPcache, HTTP\/3, czystemu indeksowaniu i wczesnemu sprawdzaniu uprawnie\u0144, TTFB i P95 spadaj\u0105 zauwa\u017calnie. Oddzielam obci\u0105\u017cenie edytora i crona od \u015bcie\u017cki u\u017cytkownika, dzi\u0119ki czemu interakcje pozostaj\u0105 p\u0142ynne przez ca\u0142y czas. Ci\u0105g\u0142e monitorowanie utrzymuje lini\u0119, odkrywa regresje i zachowuje ci\u0119\u017cko zarobione pieni\u0105dze. <strong>Pr\u0119dko\u015b\u0107<\/strong>.<\/p>","protected":false},"excerpt":{"rendered":"<p>WordPress REST Calls Frontend powoduj\u0105 problemy z czasem \u0142adowania ze wzgl\u0119du na \u0142adunki i zapytania. Poznaj optymalizacje dla **WordPress REST Calls Frontend** z buforowaniem i silnym hostingiem.<\/p>","protected":false},"author":1,"featured_media":17957,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","inline_featured_image":false,"footnotes":""},"categories":[733],"tags":[],"class_list":["post-17964","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"831","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"WordPress REST Calls","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"17957","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/17964","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/comments?post=17964"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/posts\/17964\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media\/17957"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/media?parent=17964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/categories?post=17964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pl\/wp-json\/wp\/v2\/tags?post=17964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}