Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, s.r.o. haken@havit.cz, @RobertHaken. Optimalizace výkonu webových aplikací



Podobné dokumenty
Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, Základní algoritmy v praxi

Ing. Bc. Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, Návrh schématu DB

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Diagnostika webových aplikací v Azure

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

Časová složitost / Time complexity

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Kolekce, cyklus foreach

Algoritmy I, složitost

Část 1 Moderní JavaScript

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Snadný vývoj webových aplikací s Nette. Lukáš Jelínek

Novinky ve Visual Studio Tomáš Kroupa

MVVM pro desktop i web

Prioritní fronta, halda

přirozený algoritmus seřadí prvky 1,3,2,8,9,7 a prvky 4,5,6 nechává Metody řazení se dělí:

Časová a prostorová složitost algoritmů

Lineární datové struktury

Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz

Datové typy a struktury

[ASP].NET Core Demystified. Miroslav Holec. Konzultant a lektor [ASP].NET Core.

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Microsoft ASP.NET 2.0/3.0 (advanced)

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Systémová administrace portálu Liferay

Miroslav Holec. Software & Cloud Architect. Microsoft MVP: Microsoft Azure MCSD, MCSA, MTA. Zvyšujeme výkonnost aplikací s. (Azure) Redis Cache

Převod LN aplikace do xpages

Základní informace o předmětu Otázka:

Microsoft SharePoint Portal Server Zvýšená týmová produktivita a úspora času při správě dokumentů ve společnosti Makro Cash & Carry ČR

Základní datové struktury

Tvorba informačních systémů

Tvorba informačních systémů

Dynamické datové struktury I.

Různé algoritmy mají různou složitost

MATLAB a Simulink R2015b

Vývoj Internetových Aplikací

Statické generování a optimalizace načítání webových aplikací ve frameworku DotVVM

Monitoring SQL Server, Resource Governor, Tracing SQL Server

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

IB111 Úvod do programování skrze Python

Dynamické datové struktury IV.

Digitální učební materiál

Historie, současnost a budoucnost ASP.NET

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Základy datových vazeb Silverlightu. Funkce Silverlightu 2. Podpora jazyků a technologie.net Framework

VÝVOJ INTERNETOVÝCH APLIKACÍ - VIA

Michal Augustýn Microsoft Most Valuable Professional

Webové rozhraní pro datové úložiště. Obhajoba bakalářské práce Radek Šipka, jaro 2009

VZOROVÝ STIPENDIJNÍ TEST Z INFORMAČNÍCH TECHNOLOGIÍ

Přijímací zkouška - informatika

zápočtová práce Základy implementace měny BITCOIN v programovacím jazyku C# N_TK Technologie krypto-měn

Vývojařská Plzeň AngularJS

Tvorba informačních systémů

Datové struktury 2: Rozptylovací tabulky

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

MBI - technologická realizace modelu

Algoritmizace prostorových úloh

KIV/PIA 2013 Jan Tichava

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Sem vložte zadání Vaší práce.

Vývoj Internetových Aplikací

1 Nejkratší cesta grafem

Novinky v ASP.NET MVC6

ČÁST 1. Základy 32bitového programování ve Windows

PROGRAMOVÁNÍ. Cílem předmětu Programování je seznámit posluchače se způsoby, jak algoritmizovat základní programátorské techniky.

Microsoft Azure Workshop

10. Složitost a výkon

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Stěhování aplikací. Michal Tomek, Sales Manager

Šablony, kontejnery a iterátory

Obsah přednášky. Analýza algoritmu Algoritmická složitost Návrhy algoritmů Urychlování algoritmů 1/41

Datový typ prioritní fronta Semestrální práce z předmětu 36PT

Individuální projekt z předmětu webových stránek Anketa Jan Livora

A4B33ALG 2010/05 ALG 07. Selection sort (Select sort) Insertion sort (Insert sort) Bubble sort deprecated. Quicksort.

WCF RIA Services. aneb jak na RIA aplikace v Silverlightu

Formy komunikace s knihovnami

UAI/612 - Cloudová Řešení. Návrh aplikací pro cloud

Olga Rudikova 2. ročník APIN

INFORMAČNÍ SYSTÉMY NA WEBU

Algoritmizace. Jiří Vyskočil, Marko Genyg-Berezovskyj 2010

HTML - Úvod. Zpracoval: Petr Lasák

Úvod do Entity Frameworku

Protokol HTTP 4IZ228 tvorba webových stránek a aplikací

Nové jazykové brány do Caché. Daniel Kutáč

Algoritmizace prostorových úloh

Da D to t v o é v ty t py IB111: Datové typy

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Programování v jazyku C# II. 5.kapitola

GWT pro pokročilé. MoroSystems, s.r.o. Pavel Klobása. Senior Java Developer.

Spojová implementace lineárních datových struktur

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.


Zkušenosti z přechodu na TFS a agilní techniky

Vývoj Internetových Aplikací

Ing. Jiří Fůsek. Základní informace. Pracovní zkušenosti. Vzdělání. 09/ nyní Freelancer. 09/ /2010 Univerzita Tomáše Bati ve Zlíně

Maturitní témata Školní rok: 2015/2016

Procesy a vlákna (Processes and Threads)

vyhledávací stromové struktury

TÉMATICKÝ OKRUH TZD, DIS a TIS

Transkript:

Robert Haken [MVP ASP.NET/IIS, MCT] software architect, HAVIT, s.r.o. haken@havit.cz, @RobertHaken Optimalizace výkonu webových aplikací

Přemýšlejte v souvislostech... Scénáře a kontext použití aplikace business-aplikace vs. prezentace private (intranet) vs. public (internet) počet uživatelů, resp. očekávaná zátěž, současné přístupy, automatedrequests (např. RSS čtečky) rozložení cílové skupiny (devices, konektivita,...) zdroje k dispozici (servery, připojení, vývojáři, čas) Pro každou situaci jsou vhodné jiné techniky!!!

Zacílení optimalizace klient přenos server

Optimalizace na straně klienta progresivní rendering HTML co je možné, přesunout na konec HTML kódu, zejména velké JScript knihovny progressive-layout (např. IE: table-layout:fixed; width) JavaScript parsing je drahý, nejenom jeho běh raději optimalizované knihovny (jquery, Prototype,...) než vlastní invence respektujte reálné možnosti DHTML

Optimalizace přenosu eliminace přenosu client-side (browser) cache Altair Cacheování v.net a HTTP, aneb jak neuhnat sebe a svůj server http://www.aspnet.cz/articles/389-deep-dive-cacheovani-v-net-a-http-aneb-jak-neuhnat-sebe-a-svujserver-zaznam-priklady použití CDN serverů minimalizace objemu přenesených dat HTTP komprese ViewState HTML/JS/CSS minifiers ID -čka pro ASP.NET server-controls minimalizace počtu requestů Script + CSS bundling CSS Sprites

Diagnostické nástroje klient+přenos Fiddler Web Debugger IE Developer Tools <F12> popř. FireBug YSlow

Fiddler basics Microsoft Ajax Minifier CSS Sprites YSlow DEMO

ASP.NET Bundling & Minification Microsoft.Web.Optimization.dll NuGet Package: ASP.NET Optimization - Bundling BundleTable.Bundles.EnableDefaultBundles() /css + /js Custom bundles <script src= /CustomScript

ASP.NET Optimization Bundles & Minification DEMO

Serverová optimalizace výkonu nastavení ASP.NET cachování ViewState optimalizace přístupů do DB asymptotická složitost algoritmů asynchronní zpracování, webová farma,...

Nastavení ASP.NET <compile debug= true /> + Release build WebResources.ashx zapnutí cachování client-side menší JS skripty (ASP.NET AJAX, Controls,...) optimalizace <trace enabled= false /> šetří menší desítky ms per request Session minimalizace použití nebo vypnutí pre-compile aplikace

Diagnostické nástroje web server ASP.NET <trace /> čas strávený v jednotlivých fázích životního cyklu velikost ViewState Fiddler Web Debugger WCAT Web Capacity Analysis Tool Fiddler Extension for WCAT Visual Studio Debugger, IntelliTrace, Performace Analysis RedGate ANTS Profiler, SQL Profiler PerfView, Performance Counters

Fiddler + WCAT Stress Test Trace.Write(), Trace.Warn(), Trace.axd trace enabled=true/false compile debug=true/false DEMO

ASP.NET Caching Output caching Data caching - application-scope Application-scope (HttpRuntime.Cache) User -scope (Session obvykle nevhodné!) Request-scope (HttpContext.Current.Items) pozor na vzájemné křížení cachovacích technik!

@OutputCache - ASP.NET Output Caching Page-level caching, Fragment caching (User-controls) VaryBy... (VaryByParam, VaryByHeader,...) VaryByCustom, global.asax: public override string GetVaryByCustom(HttpContext context, string arg) Duration [sec], Location <asp:substitution MethodName=... system.web/caching/outputcache/enableoutputcache + enablefragmentcache hromadné vypnutí pro debugging pozor na vzájemné křížení!

ASP.NET Output Caching DEMO

Data Caching HttpRuntime.Cache popř. MemoryCache.Default (.NET 4.0+) pozor na rozsáhlé objektové grafy (root-referenced) datové ostrůvky s markerem opatrně s dependency použitelné i mimo webové aplikace

Application Scope Data Caching HttpRuntime.Cache DEMO

Request-scope data caching opakované použití jednou získaných dat Page/Control/UserControl izolované instance třídy => lokální fieldy HttpContext.Current.Items[key] = value

ViewState minimalizace ViewState EnableViewState= false ViewStateMode= Enabled Disabled Inherit přesměrování ViewState na jiné uložiště ( přenos) SessionPageStatePersister disk serveru komprimace ViewState

Page/Controls Life-Cycle

ViewState DEMO

Webová Farma out-proc Session nebo vůbec sdílení MAC kódu kvalitní load-balancing web-garden obvykle moc nepřináší

Optimalizace přístupu do DB získávání dat s rozumem (např. stránkování) cachování dat získaných z DB přirozená normalizace schématu DB connection-pooling indexy, údržba statistik execution plans multiple-resultsets

Proč je schéma DB důležité? klíčový prvek designu aplikace zásadní vliv na výkon rychlost objem dat konzistence dat Server Tuning Indexy, Locking Query Optimization DB Schema Design Aplikace

Časová a paměťová složitost Relativně vůči velikosti vstupu N Časová složitost Počet elementárních operací vzhledem k velikosti dat Element. operace trvá stejně dlouho bez ohledu na velikost vstupu Paměťová složitost Spotřebovaná paměť vzhledem k velikosti dat

Třídy složitosti O(1) konstantní O(log N) logaritmická O(N) lineární O(N log N) lineárně logaritmická O(N 2 ) kvadratická O(N X ) polynomiální (kubická,...) O(a N ) exponenciální

Exponenciální složitost např. nejkratší průjezd všemi body grafu, atp. N = 1 t = 0,002s N = 2 t = 0,004s N = 3 t = 0,008s N = 4 t = 0,015s N = 5 t = 0,031s N = 10 t = 1s N = 11 t = 2s

Exponenciální složitost Průšvih N = 12 N = 14 N = 20 N = 30 N = 40 N = 50 N = 100 t = 4s t = 16s t = 17 min t = 12 dní 3 hodiny t = 34 let t = 34 841 let t = 4. 10 19 let

Známé algoritmy O(1) - konstantní Hashovací tabulka O(log N) - logaritmická Hledání v seřazeném poli (půlení intervalů) Hledání ve vyhledávacím stromě O(N) - lineární Hledání minima, maxima v poli Hledání prvku v neseřazeném poli Slití dvou seřazených polí Hledání v textu O(N log N) lineárně logaritmická Seřazení pole QuickSort, HeapSort, MergeSort

Složitost operací Přidání na konec Odebrání z konce Vložení doprostřed Odebrání z prostředka Přístup podle indexu Sekvenční přístup Vyhledávání elementu Poznámky Array O(n) O(n) O(n) O(n) O(1) O(1) O(n) Nejefektivnější využití paměti; vhodné v případě neměnného počtu položek. List<T> většinou O(1); nejhůře O(n) O(1) O(n) O(n) O(1) O(1) O(n) Vnitřně implementováno pomocí pole, při zaplnění se 2x zvětší. Přidávání nebo odebírání z prostředka či začátku jsou pomalé. LinkedList<T> O(1) O(1) O(1)* O(1)* O(n) O(1) O(n) Obousměrný spojový seznam. Pomalé přístupy doprostřed, rychlé přidávání na začátek a na konec. *) pokud už mám referenci na příslušnou položku Stack<T> většinou O(1); nejhůře O(n) O(1) N/A N/A N/A N/A N/A Zásobník, vhodné pro implementaci různých algoritmů. Last in, first out. Queue<T> většinou O(1); nejhůře O(n) O(1) N/A N/A N/A N/A N/A Fronta, vhodná pro implementaci různých algoritmů. First in, first out. Dictionary<K,T> HashTable většinou O(1); nejhůře O(n) O(1) většinou O(1); nejhůře O(n) O(1) O(1)* O(1)* O(1) Vnitřně implementováno pomocí hashovací tabulky, vhodné pro rychlé vyhledávání podle klíče. *) postavení pole Keys a Values má složitost O(N), ale stačí ho postavit jen jednou

Performance killers z praxe drahé datové operace nesprávné načítání dat z DB nepoužívání data-cache, nesprávné použití opakovaný data-binding (bez kontroly IsPostback při zapnutém ViewState) extensivní logování, nekorektní počítadla návštěv, atp. chybný resource-management používejte using() pro IDisposable nesprávné použití AJAX, zejm. UpdatePanelů mají obalovat blok, který se má aktualizovat, ne controly, jejichž události se zachytávají!!! nadužívání Session

Q & A