Optimalizace

Obecné koncepce

Rychlost vykreslování je pro aplikaci WebGIS zásadní více než pro desktopovou aplikaci:

  • uživatelé webu očekávají, že budou mít vše k dispozici téměř okamžitě

  • každý uživatel může posílat požadavky na stejnou aplikaci; pokud máte desítky nebo stovky uživatelů, snadno pochopíte, že optimalizace webové aplikace je důležitým úkolem.

Je třeba myslet spíše na webovou publikaci pro mnoho uživatelů než na zobrazení mapy jednomu uživateli.

Ve výchozím nastavení můžete u každé vrstvy QGIS, kterou přidáte do projektu Lizmap, v zásuvném modulu Lizmap zvolit, zda se má při spuštění aplikace zapnout viditelnost vrstvy (zaškrtávací políčko Přepnuto). Musíte si dát pozor, abyste tuto funkci nezneužili, protože pokud projekt obsahuje např. 30 vrstev, Lizmap při spuštění odešle požadavek na server QGIS pro každou z nich.

Pokud je zaškrtnuto políčko Jedna dlaždice, bude požadováno 30 obrázků o velikosti okna prohlížeče. Pokud ne, vyžádá si Lizmap prostřednictvím OpenLayers 30 sérií dlaždic (přibližně 250 × 250 pixelů). Každá dlaždice je obrázek a je vytvořena jako funkce celkové velikosti okna a úrovně zvětšení. Proto budou následující uživatelé zvětšovat stejnou oblast, již vygenerované dlaždice budou použity znovu.

Dlaždice lze ukládat do mezipaměti pomocí dvou nevýlučných systémů:

  • Strana serveru, na počítači, kde je nainstalován server QGIS a Lizmap. Pokud byla dlaždice vyžádána a vygenerována dříve a její platnost nevypršela, Lizmap ji znovu použije a odešle klientovi, čímž se vyhne novému požadavku na server QGIS.

  • Na straně klienta: dlaždice se uloží do mezipaměti prohlížeče a používají se až do vypršení jejich platnosti. Tím se vyhnete jak požadavku na server QGIS, tak internetovému provozu.

Je třeba vygenerovat mezipaměť serveru. Přečtěte si Správa mezipaměti jako správce, abyste věděli, jak mezipaměť vygenerovat.

Pro optimalizaci výkonu je proto důležité pochopit, jak Lizmap používá dlaždice, které se mají zobrazit.

Řekněme, že máte obrazovku s rozlišením 1280 × 768 pixelů. Pokud máte všechny vrstvy rozdělené na dlaždice, musí tedy Lizmap zobrazit přibližně 5 krát 3 = 15 dlaždic (každá 256 krát 256 pixelů) na vrstvu, a více pro větší obrazovku. Pokud jsou okolní dlaždice zobrazeny jen částečně, bude celkový počet ještě vyšší. Průměr 20 dlaždic na vrstvu je rozumný odhad. Při 30 vrstvách, jako v našem příkladu, to bude znamenat celkem asi 20 krát 30 = 600 dlaždic (tedy 600 požadavků na server Lizmap) na uživatele, při každém spuštění Lizmap a při každém přiblížení a posunu. Pokud máte 10 souběžných uživatelů, je to pro server docela zátěž, pokud cache nebyla vytvořena dříve, a server QGIS je proto musí vytvořit. Čas potřebný pro každou dlaždici bude do značné míry záviset na výkonu serveru a složitosti projektu.

Velikost jednotlivých dlaždic závisí na:

  • typ dat (jeden rastr nebo vektor nebo kombinace několika vrstev).

  • zvolený formát obrázku (PNG, JPEG).

Typická dlaždice může mít velikost přibližně 30 Kb. V našem příkladu tedy klient stáhne přibližně 20 x 30 = 600 Kb na vrstvu, což při 30 vrstvách dává dohromady asi 18 Mb, což je náročné jak pro server (spotřebuje se hodně přenosového pásma), tak pro uživatele (velké zpoždění i při poměrně rychlém připojení).

Tyto výpočty jasně ukazují, že pro dosažení dobrých výkonů při tvorbě webových map je třeba volit a co nejvíce zjednodušovat.

Pokud se podíváme například na přístup Google Maps nebo podobných služeb, je zcela zřejmé, že kromě toho, že mají výkonné servery, se snažily co nejvíce zjednodušit: pouze jedna série dlaždic jako základní vrstva a velmi málo dalších vrstev (a ne všechny najednou). I když nemůžete vytvořit takto jednoduchou mapu, je přesto důležité vědět, které vrstvy by se měly bezpodmínečně zobrazit při prvním zobrazení mapy a které kompromisy jsou pro uživatele přijatelné.

Pokud má váš projekt 50 vrstev, které lze zapínat a vypínat, drtivá většina uživatelů většinu z nich nikdy nevybere. Samozřejmě existují reálné případy použití, kdy je nutné jednotlivé vrstvy zobrazovat selektivně, a není tedy možné je seskupit a snížit tak počet zobrazených vrstev.

Tipy

Chcete-li svou aplikaci co nejvíce optimalizovat, doporučujeme vám:

  • Vytvořit samostatné projekty QGIS, a tedy i různé mapy Lizmap pro různé cíle, a seskupit tak data do logických témat. Například mapa o rozvoji měst s třeba 10 vrstvami a mapa o životním prostředí s asi 5 vrstvami jsou obvykle čitelnější a mnohem rychlejší než jeden příliš složitý projekt se všemi daty. Přidání malého obrázku pro každý projekt pomůže uživatelům vybrat příslušný projekt na první pohled. Některé z vrstev můžete také sdílet mezi různými projekty, a to prostřednictvím mechanismu vkládání v QGIS.

  • Ve webovém rozhraní správce použijte možnost Pouze mapy. Tato volba umožňuje uživateli automaticky přepínat z jedné mapy na druhou prostřednictvím tlačítka Úvodní stránka, přičemž je v maximální možné míře zachována lokalizace a úroveň přiblížení. V tomto případě se nezobrazuje uvítací stránka Lizmap se seznamem projektů a jejich miniaturami a uživatel je automaticky přesměrován na jeden z projektů podle volby správce.

  • Nezobrazujte všechny vrstvy při spuštění (deaktivujte zaškrtávací políčko Přepnuto, jak je popsáno výše). Ve výchozím nastavení by měly být viditelné pouze velmi důležité vrstvy a uživatelé by měli aktivovat pouze ty vrstvy, které potřebují. To umožní rozumně snížit počet požadavků a celkový síťový provoz.

  • Vytvořte skupiny vrstev a použijte volbu Skupina jako vrstva v zásuvném modulu Lizmap. Obecně lze řadu vrstev se stejným obecným tématem zobrazit jako celek s vhodným výběrem stylů. V takovém případě Lizmap zobrazí pouze jedno políčko pro celou skupinu, a co je důležitější, vyžádá si pouze jednu sérii dlaždic pro celou skupinu, čímž se sníží počet dlaždic a požadavků na server a celkový objem dat ke stažení. Zobrazí se legenda skupiny.

  • Pro některé vrstvy použijte volbu Jedna dlaždice. V tomto případě si Lizmap vyžádá pouze jeden obrázek na vrstvu o velikosti přibližně obrazovky namísto řady dlaždic. Tím se výrazně sníží počet požadavků na server. Například v našem výše uvedeném příkladu, bez popsaných optimalizací, pokud jsou zobrazeny všechny vrstvy, bude každý uživatel požadovat 30 obrázků (jeden na vrstvu) pro každé přiblížení nebo posunutí, místo 480 obrázků. Celková velikost stahovaných dat je však podobná. Na druhou stranu je velmi nepravděpodobné, že by různí uživatelé požadovali přesně stejný obrázek, proto je použití mezipaměti v tomto případě zbytečné a Lizmap se mu vyhne (obě možnosti se vzájemně vylučují). Optimální volba (jedna dlaždice vs. dlaždice) je pro různé vrstvy různá. Například složitá základní vrstva, vytvořená spojením 15 jednotlivých vrstev, bude nejlépe použita jako skupina (Skupina jako vrstva), dlaždicová a uložená do mezipaměti. Jednoduchou lineární vrstvu, jako je řada linek sběrnice, lze zobrazit jako jedinou dlaždici.

  • Použijte volbu Skrýt zaškrtávací políčka pro skupiny: zabráníte tím tomu, aby uživatelé klikali na skupinu s např. 20 vrstvami, aniž by ji skutečně potřebovali, a tím vyvolali velkou sérii požadavků na server. V každém případě je obvykle dobré vyhnout se skupinám s více než 5-10 vrstvami.

  • Optimalizace dat a projektu QGIS. Jak již bylo zmíněno výše, publikování mapy přes internet změní váš pohled na věc: jak již bylo řečeno, musíte mít na paměti, že na server může paralelně narazit mnoho uživatelů, takže je zásadní vyhnout se jeho přetížení:

    • vytvořit prostorový index pro všechny vektorové vrstvy.

    • pyramidalizovat všechny rastrové vrstvy (kromě velmi malých).

    • zobrazovat data pouze v odpovídajícím měřítku: například zobrazení detailní vrstvy budov v měřítku 1:500 000 nemá smysl, protože obrázek je téměř nečitelný a velmi zatěžuje server.

    • použít zjednodušenou verzi vrstvy pro její zobrazení v různých měřítkách. Původní vrstvu (která se má zobrazit např. v měřítku 1:1 000) pak můžete seskupit se zjednodušenými verzemi (které se mají zobrazit např. v měřítku 1:10 000, 1:50 000 atd.) a Seskupit jako vrstvu, aby se uživateli zobrazovala jako jedna vrstva s použitím nejvhodnějších dat v každém měřítku.

    • buďte opatrní při reprojekci On The Fly (OTF). Pokud například zobrazíte data v Lambert 93 (EPSG:2154) na základní mapě z OpenStreetmap nebo Google (v Pseudo Mercatoru, EPSG:3857), QGIS Server musí před generováním mapy přeprojektovat rastry a vektory. To může mít vliv na dobu vykreslování u velkých a složitých vrstev. Ve Francii se můžete reprojekci vyhnout použitím základní mapy z IGN Géoportail přímo v EPSG:2154.

    • uvědomte si, že některé možnosti vykreslování (např. popisky, výrazy atd.) mohou být pro server velmi náročné.

    • pokud používáte PostGIS, optimalizujte jej: vždy přidejte prostorové indexy, indexy pro filtrovaná pole, pro cizí klíče, vhodné parametry pro konfiguraci PostgreSQL, případně připojení přes unixový socket namísto TCP/IP (můžete to provést pomocí služeb) atd.

    • použijte vhodný formát obrázku. Pro základní vrstvy, u kterých nepotřebujete průhlednost, je obvykle nejlepší volbou JPEG: dlaždice budou menší a rychleji se stáhnou. U ostatních vrstev zkuste PNG s menší hloubkou (16bitový nebo 8bitový): u některých symbolů může být vizuální výsledek stejný a dlaždice menší. Zkontrolujte, zda je kvalita obrázku ve vašem případě přijatelná.

    • Pokud je to možné, použijte zjednodušení na straně serveru. Přečtěte si Zjednodušení na straně serveru.

  • Upgradujte svůj server. To je vždy možnost, ale často je zbytečná, pokud jste svůj projekt neoptimalizovali, jak je popsáno výše. V každém případě je server nižší třídy (např. 2 Gb RAM, 2 jádra na 2,2 GHz) nevhodný. Rychlé čtyřjádro s 8 Gb RAM je rozumné minimum. Vyhněte se instalaci QGIS serveru a Lizmap na Windows, je to složitější a pomalejší.

  • Lizmap se vyhýbá automatickému stahování legend při spuštění a při každé úrovni přiblížení. To se provede výhradně na vyžádání, pokud je legenda zobrazena, čímž se ušetří jeden požadavek na vrstvu pro každé přiblížení.

Podrobně: jak aktivovat vyrovnávací paměť

V menu Lizmap plugin ‣ Layers můžete pro každou vrstvu nebo skupinu povolit ukládání do mezipaměti (na straně klienta i serveru) pro generované obrázky.

Na straně serveru

Tato funkce není kompatibilní s možností Single tile. Lizmap Web Client může dynamicky vytvářet dlaždice v mezipaměti na serveru. Tato mezipaměť je úložištěm obrázků již vygenerovaných QGIS-Serverem na serveru. Aplikace Lizmap Web Client automaticky vytváří cache, jakmile jsou dlaždice vyžádány. Povolení ukládání do mezipaměti může výrazně odlehčit serveru, protože nechceme další dlaždice QGIS-Serveru, které již byly vytvořeny.

Chcete-li ji aktivovat, musíte:

  • zaškrtněte políčko Server tile cache

  • zadejte dobu vypršení platnosti serveru cache v sekundách: Expiration (seconds). 0 znamená, že server nemá žádnou expiraci, dlaždice bude na serveru uchovávána až do vymazání mezipaměti.

Volba Metatile umožňuje navíc zadat velikost obrázku pro generování dlaždice. Principem funkce Metatile je požádat server o větší obrázek, než se očekávalo, oříznout jej na velikost požadavku a vrátit webovému klientovi. Tato metoda zabraňuje zkrácení štítků na okrajích a nespojitosti mezi dlaždicemi, ale je náročnější na zdroje. Výchozí hodnota je 3,3, tedy obrázek, jehož šířka a výška se rovná 5-násobku šířky a výšky požadavku. Tato volba je pro rastry nepoužitelná.

Poznámka

U vektorových vrstev s metadlaždicemi je třeba nastavit polohu štítku na pevnou pozici. Pokud je popisek velmi dlouhý, nezapomeňte použít funkci word wrap nebo trochu zvětšit velikost metatabulky. Popisky se tak zobrazí ve stejné oblasti.

Na straně klienta

Volba Browser client cache umožňuje zadat dobu vypršení platnosti dlaždic v mezipaměti webového prohlížeče (Mozilla Firefox, Chrome, Internet Explorer, Opera atd.) v sekundách. Při procházení mapy Lizmap pomocí prohlížeče ukládá zobrazené dlaždice do své mezipaměti. Povolení klientské mezipaměti může značně optimalizovat práci s Lizmapou, protože prohlížeč se nemusí znovu dotazovat serveru na dlaždice, které jsou již ve vyrovnávací paměti a jejichž platnost ještě nevypršela.

Varování

Hodnoty 0 a 1 jsou rovnocenné a volbu neaktivují.

Doporučujeme nastavit maximální hodnotu (1 měsíc se rovná 24 x 3600 x 30 = 2 592 000 sekund), samozřejmě s výjimkou vrstev, jejichž data se často mění.

Poznámka

  • Tuto mezipaměť je třeba aktivovat až po zvládnutí vykreslování, když chcete projekt přesunout do výroby.

  • Tyto dva systémy mezipaměti, server a klient, jsou na sobě zcela nezávislé. Je však samozřejmě zajímavé používat je společně, aby se optimalizovala aplikace a uvolnily se prostředky serveru.

Centralizace mezipaměti s integrací skupin a vrstev z hlavního projektu

V QGIS je možné do projektu integrovat skupiny nebo vrstvy z jiného projektu (který se bude nazývat „nadřazený“). Tato technika je zajímavá, protože umožňuje nastavit vlastnosti vrstev jednou v projektu a použít je v několika dalších, například pro základní vrstvy. V „podřízených“ projektech, které tyto vrstvy integrují, není možné tyto vlastnosti měnit.

Lizmap používá tuto funkci k centralizaci mezipaměti dlaždic. Pro všechny podřízené projekty, které používají integrované vrstvy nadřazeného projektu, požaduje Lizmap dlaždice QGIS-Serveru z nadřazeného projektu, nikoli z podřízených projektů. Cache bude centralizována v rodičovském projektu a všechny podřízené projekty, které používají vrstvy, budou využívat sdílenou cache.

Chcete-li tuto funkci používat, musíte:

  • publikovat nadřazený projekt QGIS pomocí Lizmap

    • musíte vybrat správný ohlášený rozsah v Vlastnosti projektu ‣ QGIS Server, protože tento rozsah se bude identicky používat v podřízených projektech.

    • aby se vrstvy integrovaly, je třeba konfigurovat mezipaměť. Všimněte si také zde zvolených možností (formát obrázku, metatile, vypršení platnosti) pro použití jako takové v podřízených projektech.

    • Projekt je možné skrýt z hlavní stránky Lizmap pomocí zaškrtávacího políčka v Map ‣ Hide the project Web Client Lizmap.

  • otevřete podřízený projekt a integrujte do něj vrstvy nebo skupiny, například ortofoto. Pak musíte:

    • ověřte, že oznámený rozsah v Vlastnosti projektu QGIS ‣ QGIS Server je přesně stejný jako u nadřazeného projektu.

    • musíte konfigurovat mezipaměť pro integrovanou vrstvu s přesně stejnými možnostmi, jaké byly vybrány v nadřazeném projektu: velikost obrázku, vypršení platnosti, metatilita.

    • je třeba nastavit ID Lizmap Zdrojového úložiště nadřazeného projektu (Úložiště nakonfigurované v administračním rozhraní webového klienta Lizmap).

    • kód „Zdrojového projektu“ (název nadřazeného projektu QGIS bez přípony .qgs) je automaticky zadán pro vrstvy a integrované skupiny.

  • Publikujte podřízený projekt ve webovém klientovi Lizmap jako obvykle.