1 / 11

4IT445 – Optimalizace výkonu

Ing. Jan Mittner. 4IT445 – Optimalizace výkonu. Osnova. Profiling aplikac í Zend_Cache Optimalizace výkonu databáze Optimalizace rychlosti načítání webu Další tipy pro zrychlení ZF. Profiling aplikac í. nový plugin umožňující profiling v konfiguraci profiler.enabled = 1

Download Presentation

4IT445 – Optimalizace výkonu

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ing. Jan Mittner 4IT445 – Optimalizace výkonu

  2. Osnova • Profiling aplikací • Zend_Cache • Optimalizace výkonu databáze • Optimalizace rychlosti načítání webu • Další tipy pro zrychlení ZF

  3. Profiling aplikací • nový plugin umožňující profiling • v konfiguraci profiler.enabled = 1 • pro vypsání dát do URL ?profiler=1 • vypisuje i log z databázového profileru

  4. Profilování SQL dotazů • náročnost jednotlivých volaných SQL dotazů lze v Zendu profilovat (=měřit) prostřednictvím podkomponentyZend_Db_Profiler • DbProfiler je schopen monitorovat veškeré volané SQL dotazy v rámci aplikace včetně délky jejich trvání, vstupních parametrů apod. • na základě získaného profilování lze optimalizovat počet dotazů a jejich výpočetní náročnost • výstupy z profilování lze mj. publikovat prostřednictvím Firebug rozšíření Firefoxu, resp. v kombinaci s rozšířením FirePHP, které je schopno do Firebugu dodávat data z logování na serveru • http://www.firephp.org/ • http://framework.zend.com/manual/en/zend.db.profiler.html

  5. Zend_Cache • Zend komponenta zajišťující cachování dat s cílem optimalizace výkonu aplikace • komponenta nabízí uložení vybraných dat do cache • u cache je možné nastavit libovolnou i neomezenou trvanlivost či cache v závislosti na aktualizaci cachovaných dat ad-hoc mazat • http://framework.zend.com/manual/en/zend.cache.html

  6. Zend_Cache • cachovat můžeme různé věci – tzv. frontendy • core - téměř libovolná data • output - výstup akce v rámci MVC • page - celou stránku • cache můžeme ukládat na různá místa – tzv. backendy • soubory • databáze • memcached • invalidace cache • vypršením expirační doby • pomocí konkrétního cache id • pomocí tagů – doporučuji • ideálně pomocí observeru na dané entitě

  7. Zend_Cache • ORM v Zendu lze zrychlit prostřednictvím cachování metadat jednotlivých datových entit • http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.metadata.caching • Zend_Db_Table_Abstract::setDefaultMetadataCache() • kromě toho lze cache využít na řadu jiných komponent, které dokáže výrazně zrychlit • pluginyZend_Loader_PluginLoader::setIncludeFileCache(); • config • Zend_Date, Zend_Locale, Zend_Translate • důrazně doporučuji cache používat

  8. Řešení pomocí observerů • v bootstrapu se navěsí observer My_Cache na Product • obě třídy implementují příslušná rozhraní • když se jakkoliv změní objekt třídy Product, pošle všem svým observerům notifikaci • observer My_Cache si zjistí tzv. cache tagy daného produktu: např. „Product_123“, „Products“ • invaliduje všechny cache záznamy s příslušnými tagy

  9. Úkoly • Zend_Cache • implementujte cachování metody count v modelu Products • využijte frontend Core • nejdříve s nastavenou expirační dobou • následně s využitím observeru cache na modelu • implementujte cachování ve vyhledávání produktů • vyzkoušejte využít frontend Core – funguje? proč ano/ne? • vyzkoušejte využijte frontend Output • nejdříve s nastavenou expirační dobou • následně s využitím observeru cache na modelu • funguje správně vyhledávání?

  10. Optimalizace výkonu databáze • vhodně zvolené databázové indexy pomáhají řádově snížit náročnost SELECT dotazů včetně joinování tabulek • můžete využít dotaz EXPLAIN SELECT ... • pečlivě volte datové typy a jejich rozsahy jednotlivých sloupečků tabulek, při velkých objemech dat má optimalizace datových typů vliv na rychlost SELECT dotazů • v rámci složitějších případů je třeba nalézt rovnováhu mezi počtem SQL dotazů a jejich složitostí • někdy se vyplatí spíše řešit část datové vrstvy v aplikační rovině namísto složitých SQL dotazů, resp. velkého počtu dílčích dotazů • můžete využít speciálních rozšíření MySQL, např. Spatial Extension pro práci s body v rovině/prostoru • vyhýbejte se subselectům, používejte joiny • výrazně rychlejší, pokud jsou správné indexy

  11. Co a jak dále optimalizovat? • optimalizace logické vrstvy aplikace – nástroj Xdebug je schopen poskytnout profilování celé aplikace, čili informace o každém volání metody apod., jak byla náročná na CPU, RAM atd. • optimalizace javascriptu • pomocí nástrojů jako Firebug pro Firefox či Speed Tracer pro Google Chrome je možné profilovat výkon javascriptové vrstvy • pomocí obfuskátorů je možné minimalizovat velikost javascriptových souborů • optimalizaceHTTP požadavků • http://blog.proteus.cz/optimalizace-rychlosti-webu-snizeni-poctu-http-pozadavku • GZIP komprese je schopna výstupy serveru komprimovat do GZIP formátu, který si následně klient po doručení dekomprimuje – optimalizace objemu přenesených dat • dále mohou pomoci tzv. CSS sprity • více viz. http://developer.yahoo.com/performance/rules.html

More Related