abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 14:44 | Nová verze

    Google Chrome 154 byl prohlášen za stabilní. Nejnovější stabilní verze 154.0.8037.57 přináší řadu novinek. Podrobný přehled v poznámkách k vydání. Opraveno bylo 108 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 2
    včera 14:33 | IT novinky

    Vláda sníží v příštím roce výdaje na IT služby státu o 1,4 miliardy korun. Úspory má umožnit lepší koordinace nákupu služeb napříč resorty prostřednictvím nového zmocněnce. Celkové roční výdaje státu na informační technologie a digitalizaci se podle údajů ministerstva průmyslu a obchodu pohybují okolo 20 až 25 miliard korun ročně, pro letošek bylo na 320 projektů vyčleněno 21 miliard.

    Ladislav Hagara | Komentářů: 1
    včera 14:22 | IT novinky

    Irská komise pro ochranu dat (DPC) uložila americké technologické společnosti Google ze skupiny Alphabet pokutu 403 milionů eur (9,8 miliardy Kč) za neoprávněné nakládání s údaji o poloze uživatelů. Firma podle komise porušila evropské nařízení o ochraně osobních údajů (GDPR). DPC uvedla, že při šetření zjistila, že si lidé nemuseli být vědomi skutečnosti, že jejich poloha byla využívána například k ovlivňování prostřednictvím reklam nebo k odvozování jejich zájmů, a mohli tak ztratit kontrolu nad svými osobními údaji.

    Ladislav Hagara | Komentářů: 2
    včera 02:11 | IT novinky

    Byla oznámena beta verze nového video kodeku Pyrowave pro streamování her v Steam Remote Play. S vysokou propustností a nízkou latencí. S podporou HDR a YUV 4:4:4.

    Ladislav Hagara | Komentářů: 0
    včera 01:11 | Nová verze

    Byl vydán Sublime Text 4 Build 4213. Sublime Text (Wikipedie) je proprietární multiplatformní editor textových souborů a zdrojových kódů. Ke stažení a k vyzkoušení je zdarma. Pro další používání je nutná licence v ceně 99 dolarů. Spolu se Sublime Merge je cena 168 dolarů.

    Ladislav Hagara | Komentářů: 0
    22.9. 21:55 | Zajímavý článek

    Firma Anthropic, tvůrce AI modelu Claude, začala v oblasti Sanfranciského zálivu v tichosti provozovat vlastní biotechnologickou laboratoř. Anthropic prý chce pomocí AI urychlit hledání léků na nemoci, jimž farmaceutický průmysl dle názoru firmy věnuje příliš málo pozornosti. Firma tvrdí, že laboratoř se zatím soustředí především na základní biologii, nikoli přímo na vývoj léčiv. Farmaceutický výzkum je pro generálního ředitele Daria Amodeie velice osobní téma, jeho otec zemřel na hepatitidu C několik málo let před objevením účinné léčby.

    AfD 💙 | Komentářů: 4
    22.9. 21:44 | Humor

    Vědci z Googlu dokončili mapu všech neuronových spojení v mozku (tzv. konektom) samečka mušky octomilky obecné (drosophila melanogaster), hlavním cílem je komparativní analýza s již zmapovaným mozkem samičky. S tímto veřejně dostupným modelem, čítajícím přibližně 160 000 neuronů, se začali bavit nadšenci. Mozek mouchy pohání experimentálního kryptoburzovního bota Stonkfly, případně si zahrál počítačové hry Beat Saber, Mario64 a samozřejmě DOOM (gameplay videa). Ani mozek samičky nezůstal stranou, vyzkoušel si Minecraft.

    AfD 💙 | Komentářů: 4
    22.9. 16:22 | Nová verze

    Alibaba Cloud je dalším sponzorem nadace Omacom Foundation stojící za linuxovou distribucí Omarchy. Přislíbená částka je 3 miliony dolarů, tj. 1 milion dolarů ročně po dobu tří let. Stejná částka jako u DigitalOcean.

    Ladislav Hagara | Komentářů: 5
    22.9. 16:11 | Nová verze

    Byla vydána nová verze 262 správce systému a služeb systemd (Wikipedie, GitHub).

    Ladislav Hagara | Komentářů: 0
    22.9. 02:33 | IT novinky

    Canonical oznámil vydání Zephyr 26.04 LTS. Jedná se o komerční distribuci operačního systému pro mikrokontroléry Zephyr (Wikipedie) s podporou až 15 let.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (21%)
    Celkem 2720 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Optimalizácia výkonu šablónovacieho systému django

    4.11.2012 19:52 | Přečteno: 1891× | Programovanie | Výběrový blog | poslední úprava: 4.11.2012 19:51

    Na internete je možné nájsť množstvo syntetických benchmarkov šablónovacích systémov. Tieto výsledky môžu byť relevantné v prípade generovania veľkých výstupov. Väčšinou nás však bude zaujímať celková priepustnosť aplikácie. V dnešnom blogu si teda ukážeme vplyv rôznych metód optimalizácie od cachovania po zmenu interpreta pythonu na celkovú priepustnosť reálnej webovej aplikácie.

    Na začiatok než sa pustíme do samotného benchmarkovania môžme nahliadnuť na syntetické benchmarky. Vzhľadom na to, že ostatné testované šablónovacie systémy sú aspoň čiastočne napísané v C sú rozdiely oproti djangu priepastné. Rozdiel vo výkone medzi natívnou aplikáciou a aplikáciou v pythone je stále veľký aj pri použití JIT, preto budú mať ostatné šabĺónovacie systémy lepšiu priepustnosť aj napriek maximálnej snahe o zrýchlenie šablón django.

    Webová aplikácia

    Pri testoch som používal skutočnú webovú aplikáciu. Do nej bola importovaná databáza, ktorej dump mal veľkosť ~130MB. Ako databázový server som použil PostgreSQL 9.1. Celé to beží na stroji s procesorom T5250, 2GB RAM a pomalým diskom hitachi (thinkpad) pod gentoo.

    Spôsob merania výkonu

    Webová aplikácia bola spúšťaná pomocou vstavaného webového serveru na porte 8000 (django-admin.py runserver 0.0.0.0:8000). Benchmarky boli vykonávané programom ab2 (Apache HTTP server benchmarking tool). Testy sa vykonávali príkazom ab2 -n 1000 -c 1 'http://localhost:8000/', kde n je počet opakovaní (v testoch bolo použitých vždy 1000 opakovaní) a c je počet súčasných požiadaviek (server beží v jedinom vlákne, preto nemá zmysel použiť viacej súčasných požiadaviek).

    Pred vykonaním testov pod CPythonom bolo vykonaných 20 požiadaviek, aby sa ustálili hodnoty (kvôli naplneniu cache). Testy vykonávané pod PyPy boli spustené až po 2000 požiadavkách, pretože JIT kompilátor potrebuje dosť času na optimalizáciu.

    Celková odozva aplikácie a čas strávený renderovaním

    Nástroj používaný pri renderovaní (ab2) neumožňuje rozlíšiť čas renderovania šablóny od réžie samotného djanga a jeho ORM. Preto som najskôr vykonal benchmarky, kde som namiesto renderovania šablóny vrátil prázdnu odpoveď. Namerané priemerné časy pre vykonanie požiadavky sú v nasledujúcej tabuľke.

    Réžia djanga (v ms)

    Vypnuté cachovanie modelu Zapnuté cachovanie modelu
    CPython PyPy CPython PyPy
    56,037 52,127 8,927 6,402
    Rozdelenie časov odpovede na požiadavku

    Čistý čas renderovania šablóny sa vypočíta odčítaním tejto hodnoty od nameranej celkovej hodnoty požiadavky.

    Žiadna optimalizácia

    Bez akejkoľvek optimalizácie sú šablóny skutočne veľmi pomalé. Hlavným dôvodom je fakt, že šablóny sa pri každej požiadavke parsujú. Pre náš testovací projekt je čas 210,161 ms (4,76 požiadavky/s) pre CPython, alebo 128,281 ms (7,80 požiadavky/s) pre PyPy.

    Zapnuté cachovanie modelu

    Cachovaním modelu je možné dosiahnuť situáciu, keď django nepotrebuje vôbec, alebo takmer vôbec spojenie s databázou. Na testovacom projekte bol pred zapnutím cachovania vykonaný SQL dotaz 10x pre jedinú požiadavku. Po zapnutí sa spojenie s databázou nepoužívalo vôbec (0 SQL dotazov). Zapnutím cachovania modelov sa aplikácia priemerne zrýchlila o 47,442 ms v CPythone, alebo 47,649 ms v PyPy.

    Zapnuté cachovanie šablón

    Po zapnutí cachovania šablón sa budú parsované šablóny uchovávať v RAM. Štandardne je táto možnosť vypnutá, pretože zmena šablón si v takom prípade vyžaduje reštart webovej aplikácie. Zapnúť sa dá v settings.py nasledujúcim kódom:

    TEMPLATE_LOADERS = ...
    ...
    TEMPLATE_LOADERS = (
        ('django.template.loaders.cached.Loader', TEMPLATE_LOADERS),
    )
    

    Táto metóda zrýchlila renderovanie o 76,006 ms pre CPython, alebo 39,551 ms pre PyPy.

    Kompilované šablóny

    Slovo „kompilované“ v nadpise je tak trochu zavádzajúce pretože v skutočnosti som skúmal len spracovanie šablón do takého tvaru, aby sa rýchlejšie renderovali (ide teda vlastne len o preprocessing napriek tomu, že dokumentácia modulu django-template-preprocessor hovorí o kompilácii). Spracovanie šablón modulom django-template-preprocessor odstráni zo šablón niektoré direktívy ako extends a nahradí ich kódom z pôvodnej šablóny, odstráni whitespace, zoskupí direktívy load … Výsledkom je šablóna, ktorú by malo django spracovať rýchlejšie než pôvodnú šablónu. Po nainštalovaní sa dá preprocesor aktivovať nasledujúcim kódom v settings.py:

    INSTALLED_APPS += ('template_preprocessor',)
    TEMPLATE_LOADERS = (
        ('template_preprocessor.template.loaders.PreprocessedLoader',
            TEMPLATE_LOADERS
        ),
    )
    

    Následne sa musia šablóny spracovať príkazom python manage.py compile_templates.

    Zrýchlenie pri tejto metóde je 107,347 ms v CPythone, alebo 38,883 ms v PyPy.

    Dvojfázové renderovanie

    Pri tejto metóde sa šablóna renderuje 2x. Prvý krát sa vyrenderujú časti, ktoré sú spoločné pre všetkých návšetevníkov webu. Dynamické prvky sa ponechajú v pôvodnom stave. Vyrenderovaná šablóna sa uloží do cache a bude sa používať pre všetkých návštevníkov. Počas spracovania šablóny sa už vyrenderujú len časti, ktoré sú dynamicky generované pre konkrétneho návštevníka.

    Pre CPython bolo s touto metódou namerané zrýchlenie o 151,776 ms a pre PyPy 65,859 ms.

    Porovnanie

    V nasledujúcich tabuľkách je porovnanie metód optimalizácie a ich kombinácie.

    Celkový čas

    Porovnanie celkového času spracovania požiadavky

    Porovnanie priemerných časov načítania (v ms)

    Metóda Vypnuté cachovanie modelu Zapnuté cachovanie modelu
    CPython PyPy CPython PyPy
    Žiadna optimalizácia 210,161 128,281 163,768 82,805
    Zapnuté cachovanie 134,733 90,234 87,185 41,750
    Kompilované šablóny 103,501 91,491 55,735 41,829
    Dvojfázové renderovanie 59,219 63,172 11,159 16,197

    Renderovanie šablóny

    Porovnanie času renderovania šablóny

    Porovnanie časov renderovania šablóny (v ms)

    Metóda Vypnuté cachovanie modelu Zapnuté cachovanie modelu
    CPython PyPy CPython PyPy
    Žiadna optimalizácia 154,124 76,154 154,841 76,403
    Zapnuté cachovanie 78,696 38,107 78,258 35,348
    Kompilované šablóny 47,464 39,364 46,808 35,427
    Dvojfázové renderovanie 3,182 11,045 2,232 9,795

    Šablónovací systém v django, alebo iný?

    Renderovanie šablóny môže podstatne ovplyvniť rýchlosť webovej aplikácie. V prípade jednoduchých šablón bude bude čas renderovania s veľkou pravdepodobnosťou zanedbateľný. U komplexných webov bude podiel renderovania šablóny na celkovom čase vyšší.

    Pri malých weboch programátor ťažko narazí na problém s pomalosťou šablón. U stredne veľkých webov je možné použiť niektorý zo spôsobov optimalizácie a stále mať výhody integrovaného šablónovacieho systému (administrátorské rozhranie, dobrá integrácia s ďalšími aplikáciami …). U veľkých webov s vysokou záťažou, kde záleží na každom takte procesora bude pravdepodobne jedinou schodnou cestou použitie iného šablónovacieho systému.

           

    Hodnocení: 100 %

            špatnédobré        

    Obrázky

    Optimalizácia výkonu šablónovacieho systému django, obrázek 1 Optimalizácia výkonu šablónovacieho systému django, obrázek 2

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    limit_false avatar 4.11.2012 22:45 limit_false | skóre: 23 | blog: limit_false
    Rozbalit Rozbalit vše Re: Optimalizácia výkonu šablónovacieho systému django
    Pamatuju si, že výkon Django šablonovacího rendereru byl v 0.9x a 1.0x celkem nevýrazný, vypadá to, že se to moc nezměnilo.

    Dva tipy pro ladění Django aplikací:
    1. Django Debug Toolbar (pozor ale, samotné použití toolbaru ovlivňuje měření "násobící konstantou")
    2. cProfile/hotshot + pyprof2calltree + kcachegrind, sample callgraph screenshot (bohužel už nemám to měření šablonovacího systému)
    Jedna rychlejší alternativa byl Teng (neumím teď vygooglit ne-obsolete stránku) i když nebyl až tak "pěkný/mocný". S trochou štěstí snad už nikdy nebudu muset psát žádné weby :-)
    When people want prime order group, give them prime order group.
    mirec avatar 5.11.2012 07:33 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Optimalizácia výkonu šablónovacieho systému django

    V roku 2011 som videl na šablóny GSoC projekt, ale zrejme sa to nijako ďalej nepohlo.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    5.11.2012 08:57 rocky
    Rozbalit Rozbalit vše Re: Optimalizácia výkonu šablónovacieho systému django
    Here is another benchmark: http://mindref.blogspot.com/2012/10/python-templates-benchmark.html
    5.11.2012 09:01 rocky
    Rozbalit Rozbalit vše Re: Optimalizácia výkonu šablónovacieho systému django
    Few more: reverse-urls and routing, caching.
    5.11.2012 10:52 vincentk
    Rozbalit Rozbalit vše Re: Optimalizácia výkonu šablónovacieho systému django
    Ten system vie predpovedat buducnost? Ako to ze zacal prudko narastat testne pred koncom?
    mirec avatar 5.11.2012 10:57 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Optimalizácia výkonu šablónovacieho systému django
    Nie je to nárast, je to rozdelenie. Ak sa pozriem napr. na hodnotu 900 tak 900‰ požiadaviek sa vojde pod túto hodnotu. Akurát spline vyhladzovanie trochu vpravo **** krivku čo som si nevšimol.
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    8.11.2012 19:52 yad
    Rozbalit Rozbalit vše Re: Optimalizácia výkonu šablónovacieho systému django
    To dvojfázové renderovanie vyzerá veľmi dobre.

    Zo zvedavosti: ako funguje to dvojfázové renderovanie?
    mirec avatar 8.11.2012 21:01 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Optimalizácia výkonu šablónovacieho systému django

    Existuje na to niekoľko modulov, o ich kvalite moc neviem. Implementovať sa to dá aj vlastnoručne a nie je to zložité. Pre pohodlnosť sa budem hrať na to, že django obsahuje tag raw (existuje jednoduchá implementácia).

    V podstate sa celá časť, ktorá je spoločná pre všetkých užívateľov vyrenderuje normálne. Časti ktoré sú rozdielne ako napr. odkaz na profil sa uzatvoria do tagu {% raw %}. Táto šablóna sa uloží do cache a používa pre všetkých užívateľov. Pre konkrétneho užívateľa sa bude renderovať už len predpripravená šablóna.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    9.11.2012 20:23 yad
    Rozbalit Rozbalit vše Re: Optimalizácia výkonu šablónovacieho systému django
    Zaujímavé riešenie. Pre LinuxOS ako šíte na mieru :). Skvelá práca.

    Ale štve ma, že to je pre mňa nepoužíteľné.
    11.11.2012 13:12 suic
    Rozbalit Rozbalit vše Re: Optimalizácia výkonu šablónovacieho systému django

    OT:

    Ake vim pluginy pouzivas?

    Vdaka

    mirec avatar 11.11.2012 21:26 mirec | skóre: 33 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Optimalizácia výkonu šablónovacieho systému django
    git://github.com/tpope/vim-pathogen.git
    git://github.com/MarcWeber/vim-addon-mw-utils.git
    git://github.com/vim-scripts/tlib.git
    git://github.com/vim-scripts/project.tar.gz.git
    git://github.com/vim-scripts/Align.git
    git://github.com/mjbrownie/pythoncomplete.vim.git
    git://github.com/Rip-Rip/clang_complete.git
    git://github.com/vim-scripts/errormarker.vim.git
    git://github.com/tpope/vim-fugitive.git
    git://github.com/kevinw/pyflakes-vim.git
    git://github.com/Lokaltog/vim-powerline.git
    git://github.com/mattn/zencoding-vim.git
    git://github.com/MarcWeber/vim-addon-local-vimrc.git
    git://github.com/sjl/gundo.vim.git
    git://github.com/shawncplus/phpcomplete.vim.git
    git://github.com/majutsushi/tagbar.git
    git://github.com/vim-scripts/a.vim.git
    git://github.com/SirVer/ultisnips.git
    git://github.com/vim-scripts/bufferlist.vim.git
    

    Hádam som na nič nezabudol ;)

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.