{"id":23431,"date":"2016-08-19T13:04:00","date_gmt":"2016-08-19T13:04:00","guid":{"rendered":"https:\/\/site.axamit.com\/?p=615"},"modified":"2026-06-23T07:17:14","modified_gmt":"2026-06-23T07:17:14","slug":"jak-wlaczyc-pamiec-podreczna-aem-dispatcher","status":"publish","type":"post","link":"https:\/\/axamit.com\/pl\/blog\/adobe-experience-manager\/jak-wlaczyc-pamiec-podreczna-aem-dispatcher\/","title":{"rendered":"Jak w\u0142\u0105czy\u0107 pami\u0119\u0107 podr\u0119czn\u0105 AEM Dispatcher?"},"content":{"rendered":"<div class=\"custom-toc\"><ul><li class=\"h2-toc\"><a href=\"#renders\">Renderery<\/a><\/li><li class=\"h2-toc\"><a href=\"#filters\">Filtry<\/a><\/li><li class=\"h2-toc\"><a href=\"#cache\">Pami\u0119\u0107 podr\u0119czna<\/a><\/li><li class=\"h2-toc\"><a href=\"#headers\">Nag\u0142\u00f3wki<\/a><\/li><li class=\"h2-toc\"><a href=\"#summary\">Podsumowanie<\/a><\/li><\/ul><\/div>\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><em>Zobacz r\u00f3wnie\u017c:<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/axamit.com\/blog\/adobe-experience-manager\/aem-dispatcher\/\" data-type=\"post\" data-id=\"2473\">Cz\u0119\u015b\u0107 1: Kr\u00f3tki przegl\u0105d dispatchera i jego cel\u00f3w<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Buforowanie (caching) jest kluczowym czynnikiem wp\u0142ywaj\u0105cym na wydajno\u015b\u0107 i \u017ar\u00f3d\u0142em problem\u00f3w, gdy nie jest prawid\u0142owo skonfigurowane. Ten artyku\u0142 przedstawi przegl\u0105d oraz przydatne, praktyczne szczeg\u00f3\u0142y dotycz\u0105ce dostosowywania buforowania dla lokalnego \u015brodowiska deweloperskiego i miejsca przechowywania buforowanych plik\u00f3w.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Czym wi\u0119c jest pami\u0119\u0107 podr\u0119czna (cache) w AEM i jak dzia\u0142a?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pami\u0119\u0107 podr\u0119czna (cache) w AEM to komponent, kt\u00f3ry w spos\u00f3b przezroczysty przechowuje dane, aby przysz\u0142e \u017c\u0105dania tych danych mog\u0142y by\u0107 obs\u0142u\u017cone szybciej. Po otrzymaniu \u017c\u0105dania, dokument podlegaj\u0105cy buforowaniu jest sprawdzany przez Dispatcher w celu ustalenia, czy ten dokument istnieje w systemie plik\u00f3w serwera WWW:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Je\u015bli dokument jest buforowany, Dispatcher zwraca plik.<\/li>\n\n\n\n<li>Dispatcher \u017c\u0105da dokumentu z instancji AEM, je\u015bli nie jest on buforowany.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Domy\u015blnie zasoby b\u0119d\u0105 buforowane tylko wtedy, gdy spe\u0142nione s\u0105 wszystkie poni\u017csze warunki:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u017b\u0105danie HTTP u\u017cywa metody GET;<\/li>\n\n\n\n<li>\u017b\u0105dany URL ma rozszerzenie (takie jak .html lub .xml);<\/li>\n\n\n\n<li>\u017b\u0105dany URL nie ma ci\u0105gu zapytania (po rozszerzeniu nie ma parametr\u00f3w);<\/li>\n\n\n\n<li>\u017b\u0105danie nie ma nag\u0142\u00f3wka \u201eAuthorization\u201d (chyba \u017ce AllowAuthorized wynosi 1).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ustawienia s\u0105 zdefiniowane w pliku konfiguracyjnym dispatchera. W naszym przypadku jest to plik conf\/dispatcher.any. Plik konfiguracyjny zawiera seri\u0119 w\u0142a\u015bciwo\u015bci jedno- lub wielowarto\u015bciowych, kt\u00f3re kontroluj\u0105 zachowanie dispatchera:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>nazwy w\u0142a\u015bciwo\u015bci s\u0105 poprzedzone uko\u015bnikiem (\u201e\/\u201d);<\/li>\n\n\n\n<li>w\u0142a\u015bciwo\u015bci wielowarto\u015bciowe zawieraj\u0105 elementy podrz\u0119dne w nawiasach klamrowych (\u201e{}\u201d);<\/li>\n\n\n\n<li>komentarze zaczynaj\u0105 si\u0119 od symbolu \u201e#\u201d.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"renders\">Renderery<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Najpierw nale\u017cy okre\u015bli\u0107 renderery dla dispatchera. Renderery to instancje AEM, z kt\u00f3rych dispatcher pobiera tre\u015bci, kt\u00f3re mog\u0105 by\u0107 buforowane. Renderery to pierwsza rzecz, kt\u00f3r\u0105 zdefiniujemy w naszym pliku konfiguracyjnym. Dispatcher automatycznie zr\u00f3wnowa\u017cy obci\u0105\u017cenie mi\u0119dzy tymi instancjami AEM, je\u015bli zdefiniujesz wi\u0119cej ni\u017c jeden renderer. W naszym przypadku ustawimy tylko jeden renderer: publiczn\u0105 instancj\u0119 AEM.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    \/renders\n      {\n      \/rend01\n        {\n        \/hostname \"localhost\"\n        \/port \"4503\"\n        }\n      }\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cesz teraz ponownie uruchomi\u0107\u00a0<strong>httpd<\/strong>\u00a0serwer i sprawdzi\u0107, czy dispatcher mo\u017ce \u017c\u0105da\u0107 zasob\u00f3w z publicznej instancji AEM.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na przyk\u0142ad, je\u015bli masz dzia\u0142aj\u0105c\u0105\u00a0http:\/\/localhost:4503\/content\/geometrixx\/en.html\u00a0stron\u0119, w\u00f3wczas wersja tej strony obs\u0142ugiwana przez dispatcher powinna by\u0107 dost\u0119pna pod adresem\u00a0http:\/\/localhost\/content\/geometrixx\/en.html. Zauwa\u017c, \u017ce nie ustawiamy portu w \u017c\u0105daniu URL, poniewa\u017c dispatcher (dok\u0142adniej, httpd) dzia\u0142a na porcie 80, kt\u00f3ry jest domy\u015blny dla wszystkich przegl\u0105darek.<\/p>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"filters\">Filtry<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sekcja\u00a0<strong>\/filter<\/strong>\u00a0okre\u015bla \u017c\u0105dania HTTP, kt\u00f3re dispatcher mo\u017ce akceptowa\u0107. Wszystkie inne \u017c\u0105dania s\u0105 odsy\u0142ane do serwera WWW z kodem b\u0142\u0119du 404 (strona nie znaleziona). Pozw\u00f3lmy na dost\u0119p do wszystkich zasob\u00f3w dla naszego przypadku demonstracyjnego.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    \/filter\n      {\n      \/0001 { \/type \"allow\" \/glob \"*\" }\n      }\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Typy filtr\u00f3w: \u201callow\u201d lub \u201cdeny\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Globy b\u0119d\u0105 por\u00f3wnywane z ca\u0142\u0105 lini\u0105 \u017c\u0105dania, np.:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/0001 { \/type \"allow\" \/glob \"* \/index.html *\" }\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ten glob pasuje do \u017c\u0105dania \u201cGET \/index.html HTTP\/1.1\u201d, ale nie do \u201cGET \/index.html?a=b HTTP\/1.1\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zamiast \u201cglobs\u201d, mo\u017cesz u\u017cy\u0107 osobnych \u201curl\u201d, \u201cmethod\u201d, \u201cprotocol\u201d, \u201cextension\u201d do zdefiniowania filtra. Opr\u00f3cz \u201curl\u201d, mo\u017cesz u\u017cy\u0107 \u201cpath\u201d, \u201cselectors\u201d, \u201cextension\u201d, \u201csuffix\u201d.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Gdy \u017c\u0105danie pasuje do wielu wzorc\u00f3w filtr\u00f3w, stosowany jest tylko ostatni wzorzec filtra.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Po zdefiniowaniu filtr\u00f3w, mo\u017cesz ponownie uruchomi\u0107\u00a0<strong>httpd<\/strong>\u00a0i sprawdzi\u0107, czy dispatcher ma dost\u0119p do wszystkich zasob\u00f3w publicznej instancji AEM. Oczywi\u015bcie, w rzeczywistym \u015brodowisku produkcyjnym powiniene\u015b odm\u00f3wi\u0107 dost\u0119pu do niekt\u00f3rych zasob\u00f3w ze wzgl\u0119d\u00f3w bezpiecze\u0144stwa.<\/p>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"cache\">Pami\u0119\u0107 podr\u0119czna<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sekcja pami\u0119ci podr\u0119cznej okre\u015bla zasoby, kt\u00f3re dispatcher b\u0119dzie buforowa\u0107. Ta sekcja ma wiele regu\u0142 podobnych do regu\u0142 filtr\u00f3w, z kilkoma dodatkowymi ustawieniami.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na przyk\u0142ad,\u00a0<strong>\/docroot<\/strong>\u00a0okre\u015bla lokalizacj\u0119 katalogu, gdzie przechowywane s\u0105 pliki w pami\u0119ci podr\u0119cznej. Warto\u015b\u0107 musi by\u0107 dok\u0142adnie tak\u0105 sam\u0105 \u015bcie\u017ck\u0105 jak katalog g\u0142\u00f3wny dokument\u00f3w serwera WWW, aby dispatcher i serwer WWW mog\u0142y obs\u0142ugiwa\u0107 te same pliki.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dla naszej demonstracji, ustawmy docroot i zezw\u00f3lmy na buforowanie wszystkich zasob\u00f3w otrzymanych z naszego renderera (instancji publikuj\u0105cej):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>    \/cache\n      {\n      \/docroot \"\/Apache22\/htdocs\"\n      \/rules\n        {\n        \/0000\n          {\n          \/glob \"*\"\n          \/type \"allow\"\n          }\n        }\n      }\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Po zastosowaniu tych zmian, mo\u017cesz ponownie uruchomi\u0107 serwer\u00a0<strong>HTTPd<\/strong>,\u00a0otworzy\u0107 nowe prywatne okno przegl\u0105darki dla nieautoryzowanego dost\u0119pu bez u\u017cycia nag\u0142\u00f3wka \u201eAuthorization\u201d (Chrome ctrl+shift+n, Firefox ctrl+shift+p) i przej\u015b\u0107 do:\u00a0http:\/\/localhost\/content\/geometrixx\/en\/products.html.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Zbuforowane zasoby powinny pojawi\u0107 si\u0119 w katalogu htdocs. Zasoby maj\u0105 hierarchi\u0119 podobn\u0105 do URL: katalogi tworz\u0105 \u015bcie\u017cki, a statyczne pliki HTML zawieraj\u0105 wyrenderowan\u0105 zawarto\u015b\u0107.<\/p>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"headers\">Nag\u0142\u00f3wki<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wiesz, \u017ce zbuforowane pliki HTML zawieraj\u0105 tylko zawarto\u015b\u0107 HTML. Ale co zrobi\u0107, je\u015bli chcemy buforowa\u0107 nag\u0142\u00f3wki odpowiedzi otrzymane z renderer\u00f3w?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na przyk\u0142ad, je\u015bli odpowiedzi z renderer\u00f3w zawieraj\u0105 nag\u0142\u00f3wek \u201eContent-Type\u201d, kt\u00f3ry definiuje kodowanie, zawarto\u015b\u0107 HTML mo\u017ce nie by\u0107 wy\u015bwietlana poprawnie bez tego nag\u0142\u00f3wka. Do tego w\u0142a\u015bnie s\u0142u\u017cy blok\u00a0<strong>\/headers<\/strong>\u00a0w sekcjach\u00a0<strong>\/cache<\/strong>.\u00a0Zbuforujmy kilka typowych i u\u017cytecznych nag\u0142\u00f3wk\u00f3w:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/cache\n{\n      \/headers\n        {\n        \"Cache-Control\"\n        \"Content-Disposition\"\n        \"Content-Type\"\n        \"Expires\"\n        \"Last-Modified\"\n        \"X-Content-Type-Options\"\n        }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Po zmianie nag\u0142\u00f3wk\u00f3w w pliku konfiguracyjnym Dispatchera, usu\u0144 ca\u0142\u0105 pami\u0119\u0107 podr\u0119czn\u0105 z katalogu\u00a0<strong>htdocs<\/strong>\u00a0i ponownie uruchom\u00a0<strong>httpd<\/strong>.\u00a0Nast\u0119pnie mo\u017cesz otworzy\u0107\u00a0http:\/\/localhost\/content\/geometrixx\/en\/products.html.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Na koniec, znajdziesz nie tylko zbuforowany plik HTML\u00a0<strong>products.html<\/strong>\u00a0w katalogu htdocs\/content\/geometrixx\/en, ale tak\u017ce plik products.html.h obok oryginalnego pliku HTML\u00a0<strong>products.html<\/strong>.\u00a0Ten plik *.h zawiera nag\u0142\u00f3wki dla zbuforowanego pliku HTML.<\/p>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"summary\">Podsumowanie<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mo\u017cesz szybko aktywowa\u0107 buforowanie, u\u017cywaj\u0105c nast\u0119puj\u0105cych pocz\u0105tkowych ustawie\u0144 w pliku konfiguracyjnym Dispatchera:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ustaw renderery;<\/li>\n\n\n\n<li>ustaw filtry;<\/li>\n\n\n\n<li>ustaw htdocs i zasady dla sekcji buforowania;<\/li>\n\n\n\n<li>ustaw nag\u0142\u00f3wki do przechowywania nag\u0142\u00f3wk\u00f3w HTTP.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"how-does-aem-dispatcher-cache-work-\">Jak dzia\u0142a pami\u0119\u0107 podr\u0119czna Dispatchera AEM?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Po \u017c\u0105daniu, dokument podlegaj\u0105cy buforowaniu jest sprawdzany przez Dispatchera, aby ustali\u0107, czy ten dokument istnieje w systemie plik\u00f3w serwera www:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Je\u015bli dokument jest buforowany, Dispatcher zwraca plik. Je\u015bli dokument nie jest buforowany, Dispatcher \u017c\u0105da go z instancji AEM.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"what-is-cache-in-aem-\">Czym jest pami\u0119\u0107 podr\u0119czna w AEM?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Pami\u0119\u0107 podr\u0119czna w AEM to komponent, kt\u00f3ry w spos\u00f3b przezroczysty przechowuje dane, aby przysz\u0142e \u017c\u0105dania tych danych mog\u0142y by\u0107 obs\u0142ugiwane szybciej.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"what-is-permission-sensitive-caching-in-aem-\">Czym jest buforowanie uwzgl\u0119dniaj\u0105ce uprawnienia w AEM?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Buforowanie uwzgl\u0119dniaj\u0105ce uprawnienia w AEM umo\u017cliwia buforowanie zabezpieczonych stron. Dispatcher sprawdza uprawnienia dost\u0119pu u\u017cytkownika do strony przed dostarczeniem strony z pami\u0119ci podr\u0119cznej.<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Renderery Filtry Pami\u0119\u0107 podr\u0119czna Nag\u0142\u00f3wki Podsumowanie Zobacz r\u00f3wnie\u017c: Buforowanie (caching) jest kluczowym czynnikiem wp\u0142ywaj\u0105cym na wydajno\u015b\u0107 i \u017ar\u00f3d\u0142em [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":5015,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[157],"tags":[],"class_list":["post-23431","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-adobe-experience-manager"],"acf":{"cta":"Give Us a Call","phone":"+1 (438) 383-6878","meta-description":"Dowiedz si\u0119, jakich ustawie\u0144 w pliku konfiguracyjnym Dispatchera nale\u017cy u\u017cy\u0107, aby aktywowa\u0107 buforowanie w AEM, zdefiniowa\u0107, kt\u00f3re zasoby maj\u0105 by\u0107 buforowane i jak je przechowywa\u0107, aby przyspieszy\u0107 \u0142adowanie stron Twojej witryny."},"_links":{"self":[{"href":"https:\/\/axamit.com\/pl\/wp-json\/wp\/v2\/posts\/23431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/axamit.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/axamit.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/axamit.com\/pl\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/axamit.com\/pl\/wp-json\/wp\/v2\/comments?post=23431"}],"version-history":[{"count":1,"href":"https:\/\/axamit.com\/pl\/wp-json\/wp\/v2\/posts\/23431\/revisions"}],"predecessor-version":[{"id":23432,"href":"https:\/\/axamit.com\/pl\/wp-json\/wp\/v2\/posts\/23431\/revisions\/23432"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/axamit.com\/pl\/wp-json\/wp\/v2\/media\/5015"}],"wp:attachment":[{"href":"https:\/\/axamit.com\/pl\/wp-json\/wp\/v2\/media?parent=23431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/axamit.com\/pl\/wp-json\/wp\/v2\/categories?post=23431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/axamit.com\/pl\/wp-json\/wp\/v2\/tags?post=23431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}