Jump to content

Příručka:Mezipaměť analyzátoru

From mediawiki.org
This page is a translated version of the page Manual:Parser cache and the translation is 99% complete.
Outdated translations are marked like this.

Mezipaměť parseru je zodpovědná za ukládání vykresleného výstupu wiki stránky do mezipaměti. Je to primární mezipaměťový mechanismus pro poskytování zobrazení stránek v MediaWiki (nepočítám žádnou webovou mezipaměť, jako je Varnish před MediaWiki). Hlavní ParserCache ukládá výstup poslední revize stránky.

Terminologie

Některé termíny související s dokumentací na této stránce:

  • rendered output (renderovaný výstup) nebo jen output (výstup) je kód HTML vygenerovaný z obsahu stránky wiki pro prohlížení spolu s dalšími daty, která k němu mohou být připojena. V případě wikitextu je výstup generován analýzou, ale jiné druhy stránek mohou používat jiné mechanismy pro generování výstupu (tj. render obsah stránky) prostřednictvím ContentHandler. Kromě samotného obsahu stránky může výstup záviset na dalších zdrojích, zejména šablony.
  • options (volby) lze použít k úpravě výstupu generovaného pro stránku na základě uživatelských preferencí nebo kontextu, ve kterém se výstup používá.
  • varying (proměnlivé) klíče znamená použití různých klíčů mezipaměti na základě (některých) možností, což umožňuje koexistenci více položek mezipaměti (variants (variant)) pro stejnou stránku a revizi. Změna klíčů splits mezipaměť a může tak vést k nežádoucí fragmentaci, která může vyčerpat kapacitu mezipaměti.
  • invalidation (zrušení) označuje proces označení záznamu v mezipaměti jako zastaralý (dirty (špinavý)). Záznam v mezipaměti analyzátoru se stane neplatným, když se změní obsah stránky. Když zdroje závisí na změně, záznam v mezipaměti bude asynchronně zrušen (více o tomto mechanismu viz Příručka:Fronta úloh).
  • expiry (vypršení) nastane, když je záznam z mezipaměti starší než nějaké předem definované maximální stáří. Maximální stáří může být definováno pro celou mezipaměť nebo jednotlivě pro každý záznam, případně obojí.
  • eviction (vyklizení) odkazuje na odstranění záznamů z mezipaměti, aby se uvolnilo místo pro nové položky (viz Zásady náhrady mezipaměti na Wikipedii).
  • pruning (prořezávání) se týká odstranění položek, jejichž platnost vypršela, z mezipaměti za účelem uvolnění kapacity

Typy

Existují dva druhy mezipaměti vykreslovaného výstupu stránky.

ParserCache

Třída ParserCache ukládá vykreslený výstup (HTML plus související data) pro nejnovější revizi stránky. Slouží jako polotrvalé úložiště aktuálního obsahu wiki, jak jej vidí čtenáři. ParserCache podporuje různé klíče podle možností a používá dvouvrstvý systém, aby se zabránilo zbytečné fragmentaci mezipaměti.

Od verze MediaWiki 1.36 je možné mít více instancí ParserCache vedle sebe. Toho lze využít v situacích, kdy je třeba pro každou stránku uložit zcela odlišné druhy výstupu, nebo se výstup liší podle faktorů, které přesahují rámec ParserOptions. Jedním z příkladů je rozšíření FlaggedRevs, které používá samostatné ParserCache k uložení vykresleného výstupu "stabilní" revize každé stránky, nikoli aktuální revize. Dalším příkladem je migrace na jiný analyzátor (například Parsoid ), kvůli kterému je na chvíli nutné mít mezipaměti pro výstup nového i starého analyzátoru.

Různé instance ParserCache jsou spravovány pomocí ParserCacheFactory, které lze získat od MediaWikiServices.

RevisionOutputCache

Verze MediaWiki:
1.36

Třída RevisionOutputCache , představená ve verzi MediaWiki 1.36, implementuje ukládání do mezipaměti pro vykreslený výstup starých revizí stránky. Stejně jako ParserCache podporuje různé klíče podle možností, ale používá jednodušší systém, protože není navržen pro dlouhodobou stálost.

Záměrem této mezipaměti je chránit před nárůsty zatížení způsobenými určitými starými revizemi, které si prohlíží velký počet uživatelů, obvykle kvůli externímu "tvrdému" odkazu na tuto revizi.

Stejně jako u ParserCache jsou instance RevisionOutputCache spravovány ParserCacheFactory .

Metadata a data Payload

Primárním obsahem mezipaměti analyzátoru je vykreslený výstup (HTML) generovaný z obsahu stránky (obvykle wikitext). Kromě toho ParserOutput v mezipaměti obsahuje následující druhy informací:

  • Metadata mezipaměti: Zahrnuje informace o tom, pro kterou revizi byl výstup vygenerován, kdy byl vygenerován a kdy by měl vypršet. Navíc ParserOutput zaznamenává, které možnosti byly použity při generování výstupu (to znamená, na kterých volbách se výstup liší).
  • Odvozená data: To zahrnuje informace o odkazech a závislostech, např. na které stránky výstup odkazuje, jaké šablony byly při jeho tvorbě použity, jaké obrázky jsou na stránce zahrnuty. To také zahrnuje jakékoli speciální skripty nebo šablony stylů potřebné k zobrazení stránky a také libovolné "vlastnosti stránky", které mají být umístěny v tabulce page_props .
  • Data rozšíření: Rozšíření mohou k objektu ParserOutput připojit libovolná data, která budou uložena do mezipaměti spolu s vykresleným výstupem. To poskytuje rozšířením způsob, jak předávat informace z kódu spuštěného během analýzy do kódu spuštěného během zobrazení stránky v pozdějším požadavku.

Od verze MediaWiki 1.36 jsou data uložená v mezipaměti analyzátoru kódována jako JSON. Z tohoto důvodu lze do mezipaměti pomocí setExtensionData() ukládat pouze primitivní data a objekty implementující rozhraní JsonUnserializable. Dřívější verze MediaWiki se spoléhaly na vestavěný mechanismus serializace PHP a umožňovaly ukládání libovolných objektů za cenu robustnosti a bezpečnosti (viz phab:T161647).

See Manual:Parser cache/Serialization compatibility for more information on payload serialization.

Struktura mezipaměti a klíčový prostor

Třída ParserCache podporuje ukládání více objektů ParserOutput pro každou stránku na základě ParserOptions použitých při generování výstupu. Aby se předešlo duplikaci záznamů mezipaměti změnou klíče mezipaměti u voleb, které nebyly ve skutečnosti použity, používá se dvouvrstvý systém:

První vrstva je klíčována ID stránky a ukládá objekt CacheTime, který obsahuje informace o vypršení platnosti mezipaměti a seznam možností použitých během analýzy stránky. Pokud například analyzátor při vytváření výstupu pro stránku přistupoval pouze k možnostem dateformat a userlang, bude tato skutečnost uložena v mezipaměti metadat.

Druhá vrstva mezipaměti obsahuje skutečné objekty ParserOutput. Klíč pro druhou vrstvu je vytvořen z ID stránky a hodnot všech voleb, které ovlivnily výstup. Při vyhledávání v mezipaměti je seznam použitých názvů voleb načten z první vrstvy a pouze hodnoty těchto voleb jsou použity spolu s ID stránky k vytvoření klíče, zatímco ostatní volby jsou ignorovány. Podle výše uvedeného příkladu, kde pouze možnosti dateformat a userlang ovlivnily výstup stránky, může klíč vypadat nějak jako page_id!dateformat=default:userlang=ru. Jakékoli vyhledávání mezipaměti s dateformat=default a userlang=ru tedy zasáhne stejný záznam v mezipaměti bez ohledu na hodnoty zbývajících možností, protože z informací v první vrstvě mezipaměti víme, že neovlivnily výstup.

RevisionOutputCache také mění klíče mezipaměti na základě možností analyzátoru, ale vždy bere v úvahu všechny možnosti. To zjednodušuje systém a urychluje přístup, ale může vést k fragmentaci. To je přijatelné, protože položky RevisionOutputCache mají obecně krátkou dobu platnosti, takže velký počet variant je nepravděpodobný.

Lidé, zneplatnění, vypršení platnosti a vystěhování

Hlavní instance ParserCache slouží jako semipermanentní úložiště obsahu wiki, jak jej vidí čtenáři. Výchozí ("kanonické") vykreslení stránky se generuje okamžitě při úpravě stránky nebo když se změní jakákoli šablona nebo jiná závislost výstupu (viz LinksUpdate ). Výstup pomocí různých možností je generován a ukládán do mezipaměti na vyžádání.

ParserCache používá pasivní model zneplatnění založený na časových razítkách: When the content of a page changes, a timestamp is updated in the database (specifically, the page_touched field in the page table). Pokud se zjistí, že objekt ParserOutput uložený v mezipaměti je starší než toto časové razítko, je považován za zastaralý (dirty). V závislosti na kontextu může být uživateli stále poskytován zastaralý obsah.

Kromě zneplatnění vyprší, po uplynutí nastavené doby (viz Příručka:$wgParserCacheExpireTime ), platnost položek v ParserCache. Dobu vypršení platnosti lze zkrátit pro každou stránku v závislosti na obsahu stránky voláním updateCacheExpiry() na objekt ParserOutput. Rozšíření, která umožňují zahrnutí dynamického obsahu, to mohou využít k zajištění toho, aby byl dynamický obsah přehodnocen přiměřenou rychlostí. Kromě toho nastavení Příručka:$wgCacheEpoch poskytuje způsob, jak vypršet platnost všech záznamů mezipaměti starších než v určitém časovém okamžiku, např. abyste zajistili, že se změny v nastavení nebo konfiguraci webu projeví.

V závislosti na konfiguraci backendu úložiště mezipaměti (viz Příručka:$wgParserCacheType ) mohou nebo nemusí být položky mezipaměti vyřazeny z mezipaměti před vypršením platnosti, nebo mohou, ale nemusí být odstraněny z úložiště po vypršení platnosti. Obecně platí, že mezipaměť analyzátoru by měla být nakonfigurována tak, aby byla zajištěna velmi dobrá četnost návštěv, protože přímo ovlivňuje čas potřebný k načtení stránky ke čtení.

Informace o nastavení backendu mezipaměti analyzátoru pro stránky Wikimedia naleznete v wikitech:Mezipaměť analyzátoru.

Oproti tomu RevisionOutputCache je mnohem jednodušší: Vyplní se příležitostně, když jsou k dispozici rendery, a ukládá data do Příručka:Objektová mezipaměť#Mezipaměť WAN s relativně krátkou dobou expirace (viz Příručka:$wgOldRevisionParserCacheExpireTime ). Za normálního provozu se očekává nízká četnost shody, protože je obecně vzácné, aby byla stejná stará revize hodně navštěvována v krátkém časovém období.

Konfigurace

Viz Příručka:Nastavení konfigurace#Mezipaměť Parseru

Související odkazy