SlideShare uma empresa Scribd logo
1 de 25
Baixar para ler offline
Optimalizace Symfony na devu
@VasekPurchart
Možnosti optimalizace
• hardware
• OS
• další technologie
• nastavení prostředí
• nastavení aplikace
Optimalizovat je možné na různých úrovních, na seznamu jsou vypsané od největšího zásahu do
stávajícího prostředí po nejmenší. V této prezentaci se chci zabývat především posledními dvěma
body, právě díky jejich minimálnímu zásahu a tudíž větší dostupnosti a omezenému riziku dalších
komplikací.
Nejnovější verze PHP
( source: http://talks.php.net/velocity15#/drupalbench )
Základní optimalizací je používání nejnovějších verzí PHP. Nové PHP postupně přinášejí zrychlení
aplikací, které je prakticky „zadarmo“, největší zrychlení, co se týče real-world aplikací napsaných
v Symfony nás čeká v podobě PHP 7. Zde je srovnání na základě Drupalu 8, který na Symfony běží
a je tak blíže realitě než prosté syntetické benchmarky. ( source: http://talks.php.net/velocity15#/drupalbench )
(https://3v4l.org/GWVhT)
Je samozřejmě možné používat lokálně jinou verzi, než na které poběží projekt v produkci. Nebo
používat jinou verzi (PHP 7 nebo HHVM) například jen pro spouštění testů. Já osobně toto
nedělám, protože jsem již několikrát narazil na poměrně zákeřné bugy, které se pak projevily jen
na produkci, nebo naopak. Snažím se mít tedy identickou verzi jako je na serveru.
Xdebug
Jedny z nejdramatičtějších zpomalení může způsobit zapnutá Xdebug extension. V posledních
verzích například sám composer přidal varování, které se zobrazuje při každém jeho spuštění.
php -dzend_extension=xdebug.so bin/phpunit
Zkontrolujte si tedy, že je Xdebug vypnutý jak při webovém přístupu (mod_apache, PHP-FPM
apod.), ale zároveň i v CLI. Doporučuji rozšíření loadovat jen pro nástoje, kde je bezprostředně
potřeba (tj. např. viz výše spuštění PHPUnitu). Alternativou je připravit samostatné php.ini a to
pak spouštět pomocí –c.
Xdebug on
Xdebug off
Zde je drobná ukázka toho, jak dramatický může být rozdíl v CLI aplikaci.
( http://php.net/manual/en/ini.core.php#ini.sect.performance )
Další optimalizace
vycházejí především z toho,
že Symfony (ale i jakákoliv
jiná aplikace používající
hodně knihoven) musí při
běhu načíst velké množství
souborů, což obsahuje i
velké množství dotazů na
disk, které může být velmi
pomalé. Tyto dotazy se
cachují, velikost a
trvanlivost realpath cache
ovlivňují tyto nastavení.
Výchozí nastavení velikosti
většinou nestačí pro
standardní Symfony
aplikaci, doporučuji zvýšit
cca na 4096K.
S nastavením trvanlivosti realpath cache je to zrádnější, už výchozí 2 minuty můžou vytvořit
velké WTF momenty (aplikace si může myslet, že je na disku něco komplet jiného než opravdu
je). Nastavte tedy dle vlastního uvážení, ale doporučuji do build procesu (např. scriptu, který by
měl zajistit, že je aplikace připravená ke spuštění – např. po přepnutí z větve do větve) přidat
zavolání clearstatcache se zapnutým druhým parametrem, který tuto cache pročistí.
Pozor, clearstatcache je potřebné volat v procesu spuštěném v tom PHP SAPI, které cache chcete
ovlivnit (tj. pravděpodobně v tom, na které koukáte přes browser).
( http://php.net/manual/en/function.clearstatcache.php )
Voláním této funkce můžete zjistit, jak je právě využívána realpath cache a může vám tedy
pomoci s nalezením správné velikosti, pozor opět je potřeba volat v tom SAPI, pro které chcete
velikost zjišťovat.
( http://php.net/manual/en/function.realpath-cache-size.php )
Byte Code Cache
• APC
• OPcache (od 5.5)
Používání byte code cache znamená, že se všechny soubory nemusí pokaždé znovu parsovat a
překládat do spustitelné podoby. Tato technologie je od PHP 5.5 v podobě OPcache dostupná ve
většině distribucí přímo s PHP, není to tedy nic, co byste museli samostatně instalovat.
Optimalizace OPcache
• Fine-Tune Your Opcache Configuration to
Avoid Caching Suprises
opcache.validate_timestamps=0
Výchozí nastavení Opcache je ale
velmi opatrné a zdaleka nenabízí
největší optimalizaci. Doporučuji si
přečíst odkazovaný článek, který se
sice zabývá optimalizací pro produkci,
ale optimalizace pro dev je ve většine
případů jednodušší.
Jedním z největších zrychlení je
vypnutí kontrolování, jestli se soubory
nezměnily od posledního zpracování.
Jinak se opět pokládá velké množství
dotazů na filesystém. Toto nastavení
pak ale znamená, že musíte OPcache
explicitně říci, kdy má zapamatované
zdrojáky zapomenout (přidání do
build procesu).
( http://php.net/manual/en/function.realpath-cache-size.php )
Composer autoload
• Classmap
autoritativní
composer dump-autoload --optimize
composer install --optimize-autoloader
composer dump-autoload --classmap-authoritative
composer install --classmap-authoritative
Dalším místem, kde je potřeba velké množství čtení z disku je samostný autoloading souborů,
pokud máte hodně knihoven, které používají autoloading pomocí PSR 0 nebo 4, tak se soubory
musí po jednom hledat na disku (i v několika možných lokacích).
Nemusíte spoléhat na autory balíčků a můžete si vygenerovat do classmapy všechny třídy, takže
jejich poloha pak bude předem známá. Na devu není moc praktický autoritativní režim, protože
to znamená po přidání každé třídy přegenerovat classmap.
Vyházet zbytečnosti
Většina Symfony projektů, které jsem viděl začíná se Standard Edition, která obsahuje „komfortní
nastavení“ tak, aby nováčci nemuseli nic moc řešit a start projektu byl usnadněn. Reálně
obsahuje spoustu částí, které nikdy nepoužíváte a které při každém běhu můžou zpomalovat
aplikaci.
SensioFrameworkExtraBundle
Skoro všichni tak například používají SensioFrameworkExtraBundle, která nabízí hlavně výše
vypsané anotace. Většina projektů, ale nepoužívá všechny tyto anotace.
SensioFrameworkExtraBundle
Přitom veěkerá funkcionalita s tímto spojená je defaultně zapnutá (aby to každý mohl bez
nastavování používat).
Toto je jen jeden příklad za všechny, měli byste znát konfiguraci bundlů, které používáte.
Zbytečné listenery
• seznam aktuálně zaregistrovaných listenerů
pro dané prostředí
app/console debug:event-dispatcher
Kvůli tomu, jak fungují bundly (každý si může registrovat svoje listenery, bez nutnosti vašeho
nastavování) bývají právě ony zdrojem velkého překvapení. Například Standard Edition má v
defaultním stavu (v době vytváření prezentace) zaregistrováno pro request 33 listenerů.
To, které listenery jsou pro dané prostředí registrované můžete zjistit pomocí konzole a postupně
dohledat, jak deaktivovat ty, které nepotřebujete.
Další adepti
• formuláře
• mailer
• ? profiler
• ? logování
• ...
• kontrolujte
app/console debug:config
Další oblasti defaultní konfigurace,
které je možné podle zaměření
projektu vypnout. Pokud nepoužíváte
profilování a logování na devu pořád
a přitom např. kvůli produkci logujete
hodně věcí, můžete tyto nastavení
zapínat jen pro samotný debugging,
když se něco pokazí.
• vs
Konfiguraci je ale
potřeba ověřovat,
protože některé její části
můžou být navzájem
provázané, takže i když
dokumentace tvrdí, že
formuláře jsou defaultně
vypnuté a aplikace je v
konfiguraci explicitně
nezapíná, tak reálně jsou
ve Standard Edition
zapnuté.
Jakákoli optimalizace na devu je vždycky o balancování mezi pohodlím a rychlostí. Na devu, tím,
že měníme kód, tak očekáváme, že jakmile aplikaci spustíme, tak se bude chovat přesně podle
posledních úprav. Jediné, jak se na to ale spolehnout je vykonat vše od začátku jen na základě
aktuálních zdrojáků. Nebo zkontrolovat, že se od minule nic nezměnilo a jde použít staré
„výsledky“ některých operací. Oba tyto úkony jsou ale velmi náročné a tak většina optimalizací
pracuje s tím, že musíme sytému pomoci v tom, aby věděl, kdy (ne)může staré výsledky použít.
Assetic
app/console assetic:dump
app/console assetic:watch
Assetic například ve výchozím nastavení generuje všechny soubory dynamicky pro každé
spuštění, což je velmi pomalé. Tuto funkcionalitu lze vypnout, je pak ale právě potřeba zajistit
volání generování po změně patřičných souborů. To dělat buď manuálně (a jako součást build
procesu). Je to ale celkem nepohodlné pro průběžný vývoj, kde na to nechceme myslet. Je
možné tedy kontrolovat soubory, o kterých víme, že ovlivňují výsledek automaticky a generování
spustit jen pokud se změní. (Watch v asseticu je prý zabugovaný, používám toto jen jako příklad
přístupu, viz dále).
Doctrine
• disablování lazy generování proxy tříd
• vygenerování
parameters:
doctrine.orm.auto_generate_proxy_classes: false
app/console cache:warmup
Podobný princip jako je ukázán na minulém slidu je možné aplikovat i u dalších částí – většinou
bez přímé podpory autorů. Tady je ukázka jak podobný proces – generování proxy tříd pro
Doctrine entity přesunout z lazy evaluace při každém requestu do watch procesu. Prvně je nutné
zakázat lazy generování, což zároveň odemkne možnost pomocí cache:warmup vygenerovat
všechy proxy najednou. Pak ale musíme zařídit tech watch...?
JS to the rescue!
Je zbytečné si něco takového programovat v PHP, většina projektů tak jako tak používá nějaký
frontend buildovací nástoj, například Grunt, Gulp, Webpack a další. Myslím že všechny tyto
nástroje mají prostředky jak watchovat změny, protože live reload je ve světě JS aktuálně celkem
standardem. Je pak jen otázkou konfigurace, jak toto propojit s tím, co potřebujeme.
Ve zdejší ukázce jsem zvolil Grunt jen proto, že jsem ho na podobnou funkcionalitu už použil.
Repozitář dema
Prohlédněte si příklad na Symfony Demo aplikaci, kde po následování základní instalace npm
modulů, můžete watch spustit a po úpravě jakékoliv entity dojde automaticky k vygenerování
všech proxy tříd.
S trochou dalšího programování by bylo možné přegenerovávat jen změněné entity, ale tímto
chci především ukázat, jak snadné je začít aplikovat tento přístup k optimalizaci na devu.
Díky za pozornost
@VasekPurchart

Mais conteúdo relacionado

Destaque

Zoekwoordenselectie
ZoekwoordenselectieZoekwoordenselectie
ZoekwoordenselectieFrank Krepel
 
Шобанов Константин "Боль и удовольствие в продажах"
Шобанов Константин "Боль и удовольствие в продажах"Шобанов Константин "Боль и удовольствие в продажах"
Шобанов Константин "Боль и удовольствие в продажах"PechaKucha-Cheboksary
 
Modified maximum tangential stress criterion for fracture behavior of zirconi...
Modified maximum tangential stress criterion for fracture behavior of zirconi...Modified maximum tangential stress criterion for fracture behavior of zirconi...
Modified maximum tangential stress criterion for fracture behavior of zirconi...dentalid
 
Nebosh Oil and Gas opearational safety certificate (2)
Nebosh Oil and Gas opearational safety certificate (2)Nebosh Oil and Gas opearational safety certificate (2)
Nebosh Oil and Gas opearational safety certificate (2)Gulf Test Safety Consultancies
 
Martin Nerstad - VG
Martin Nerstad - VGMartin Nerstad - VG
Martin Nerstad - VGMobile Oslo
 
Tutorial for the ReportLinker App
Tutorial for the ReportLinker AppTutorial for the ReportLinker App
Tutorial for the ReportLinker AppReportLinker.com
 
מנור גינדי בשבוע האופנה תל אביב
מנור גינדי בשבוע האופנה תל אביבמנור גינדי בשבוע האופנה תל אביב
מנור גינדי בשבוע האופנה תל אביבManor Gindi מנור גינדי
 
برندسازی بین المللی احمدرضا اشرف العقلایی Dba7-mahan- کارآفرینی
برندسازی بین المللی احمدرضا اشرف العقلایی  Dba7-mahan- کارآفرینیبرندسازی بین المللی احمدرضا اشرف العقلایی  Dba7-mahan- کارآفرینی
برندسازی بین المللی احمدرضا اشرف العقلایی Dba7-mahan- کارآفرینیAshrafologhalaei Ahmadreza
 
Маркетинг 2015 - основни правила за малкия и среден бизнес
Маркетинг 2015 - основни правила за малкия и среден бизнесМаркетинг 2015 - основни правила за малкия и среден бизнес
Маркетинг 2015 - основни правила за малкия и среден бизнесJustine Toms
 
SSBs Erling Holmøy_Norge eldes: Langsiktig økonomisk bærekraft 28.01.14
SSBs Erling Holmøy_Norge eldes: Langsiktig økonomisk bærekraft 28.01.14SSBs Erling Holmøy_Norge eldes: Langsiktig økonomisk bærekraft 28.01.14
SSBs Erling Holmøy_Norge eldes: Langsiktig økonomisk bærekraft 28.01.14Statistisk sentralbyrå
 
Virtualni svet Second Life
Virtualni svet Second LifeVirtualni svet Second Life
Virtualni svet Second LifeAlja Isakovic
 
DALLA DELUSIONE ALLA SPERANZA
DALLA DELUSIONE ALLA SPERANZADALLA DELUSIONE ALLA SPERANZA
DALLA DELUSIONE ALLA SPERANZASimone Tranquilli
 
Ne the god_of_religion_of_islam
Ne the god_of_religion_of_islamNe the god_of_religion_of_islam
Ne the god_of_religion_of_islamLoveofpeople
 

Destaque (20)

Zoekwoordenselectie
ZoekwoordenselectieZoekwoordenselectie
Zoekwoordenselectie
 
Шобанов Константин "Боль и удовольствие в продажах"
Шобанов Константин "Боль и удовольствие в продажах"Шобанов Константин "Боль и удовольствие в продажах"
Шобанов Константин "Боль и удовольствие в продажах"
 
Modified maximum tangential stress criterion for fracture behavior of zirconi...
Modified maximum tangential stress criterion for fracture behavior of zirconi...Modified maximum tangential stress criterion for fracture behavior of zirconi...
Modified maximum tangential stress criterion for fracture behavior of zirconi...
 
Nebosh Oil and Gas opearational safety certificate (2)
Nebosh Oil and Gas opearational safety certificate (2)Nebosh Oil and Gas opearational safety certificate (2)
Nebosh Oil and Gas opearational safety certificate (2)
 
One
OneOne
One
 
Martin Nerstad - VG
Martin Nerstad - VGMartin Nerstad - VG
Martin Nerstad - VG
 
Tutorial for the ReportLinker App
Tutorial for the ReportLinker AppTutorial for the ReportLinker App
Tutorial for the ReportLinker App
 
מנור גינדי בשבוע האופנה תל אביב
מנור גינדי בשבוע האופנה תל אביבמנור גינדי בשבוע האופנה תל אביב
מנור גינדי בשבוע האופנה תל אביב
 
برندسازی بین المللی احمدرضا اشرف العقلایی Dba7-mahan- کارآفرینی
برندسازی بین المللی احمدرضا اشرف العقلایی  Dba7-mahan- کارآفرینیبرندسازی بین المللی احمدرضا اشرف العقلایی  Dba7-mahan- کارآفرینی
برندسازی بین المللی احمدرضا اشرف العقلایی Dba7-mahan- کارآفرینی
 
Tautas ataudzes mērķi NAP2020 un to sasniegšanas gaita
Tautas ataudzes mērķi NAP2020 un to sasniegšanas gaitaTautas ataudzes mērķi NAP2020 un to sasniegšanas gaita
Tautas ataudzes mērķi NAP2020 un to sasniegšanas gaita
 
resumeh aali1
resumeh aali1resumeh aali1
resumeh aali1
 
Ta mnimeiaeinaigiromas167
Ta mnimeiaeinaigiromas167Ta mnimeiaeinaigiromas167
Ta mnimeiaeinaigiromas167
 
Маркетинг 2015 - основни правила за малкия и среден бизнес
Маркетинг 2015 - основни правила за малкия и среден бизнесМаркетинг 2015 - основни правила за малкия и среден бизнес
Маркетинг 2015 - основни правила за малкия и среден бизнес
 
SSBs Erling Holmøy_Norge eldes: Langsiktig økonomisk bærekraft 28.01.14
SSBs Erling Holmøy_Norge eldes: Langsiktig økonomisk bærekraft 28.01.14SSBs Erling Holmøy_Norge eldes: Langsiktig økonomisk bærekraft 28.01.14
SSBs Erling Holmøy_Norge eldes: Langsiktig økonomisk bærekraft 28.01.14
 
Virtualni svet Second Life
Virtualni svet Second LifeVirtualni svet Second Life
Virtualni svet Second Life
 
Casa Duplex
Casa DuplexCasa Duplex
Casa Duplex
 
721- Pets and kids-2
721- Pets and kids-2721- Pets and kids-2
721- Pets and kids-2
 
DALLA DELUSIONE ALLA SPERANZA
DALLA DELUSIONE ALLA SPERANZADALLA DELUSIONE ALLA SPERANZA
DALLA DELUSIONE ALLA SPERANZA
 
Ne the god_of_religion_of_islam
Ne the god_of_religion_of_islamNe the god_of_religion_of_islam
Ne the god_of_religion_of_islam
 
Plan clases orinson valenciano
Plan clases orinson valencianoPlan clases orinson valenciano
Plan clases orinson valenciano
 

Semelhante a Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)

20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitněJiří Mareš
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)almadcz
 
Product API in MallGroup
Product API in MallGroupProduct API in MallGroup
Product API in MallGroupJan Blaško
 
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftumdevtalk
 
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...Michal Špaček
 
Jelastic & Red Hat OpenShift - app deployment
Jelastic & Red Hat OpenShift - app deploymentJelastic & Red Hat OpenShift - app deployment
Jelastic & Red Hat OpenShift - app deploymentVaclav Chalupa
 
Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automationOndřej Machulda
 
WordCamp Bratislava 2017 - Martin Hlaváč
WordCamp Bratislava 2017 - Martin HlaváčWordCamp Bratislava 2017 - Martin Hlaváč
WordCamp Bratislava 2017 - Martin HlaváčBrilo Team
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduJan Kodera
 
Proč chcete testovat své aplikace
Proč chcete testovat své aplikaceProč chcete testovat své aplikace
Proč chcete testovat své aplikaceatotocz
 
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...Péhápkaři
 
Tipy a triky, best practices, deployment, testování
Tipy a triky, best practices, deployment, testováníTipy a triky, best practices, deployment, testování
Tipy a triky, best practices, deployment, testováníRadim Klaška
 
atoto.cz - jak na snadnou integraci Codeception
atoto.cz - jak na snadnou integraci Codeceptionatoto.cz - jak na snadnou integraci Codeception
atoto.cz - jak na snadnou integraci Codeceptionatotocz
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Railsigloonet
 
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Jaroslav Prodelal
 
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)Jakub Kulhan
 

Semelhante a Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze) (20)

20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně20110511 Vývoj software - produktivně, efektivně, kvalitně
20110511 Vývoj software - produktivně, efektivně, kvalitně
 
node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)node.js: zápisky z fronty (Battle guide to node.js)
node.js: zápisky z fronty (Battle guide to node.js)
 
Product API in MallGroup
Product API in MallGroupProduct API in MallGroup
Product API in MallGroup
 
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve SwiftuJan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
Jan Čislinský: Seznámení se Sourcery aneb Základy metaprogramování ve Swiftu
 
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
Využití chemie v procesu testování webových aplikací vytvořených pomocí techn...
 
Jelastic & Red Hat OpenShift - app deployment
Jelastic & Red Hat OpenShift - app deploymentJelastic & Red Hat OpenShift - app deployment
Jelastic & Red Hat OpenShift - app deployment
 
Maturitní otázka
Maturitní otázkaMaturitní otázka
Maturitní otázka
 
Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automation
 
Lotus Notes 7
Lotus Notes 7Lotus Notes 7
Lotus Notes 7
 
TNPW2-2013-04
TNPW2-2013-04TNPW2-2013-04
TNPW2-2013-04
 
TNPW2-2012-04
TNPW2-2012-04TNPW2-2012-04
TNPW2-2012-04
 
WordCamp Bratislava 2017 - Martin Hlaváč
WordCamp Bratislava 2017 - Martin HlaváčWordCamp Bratislava 2017 - Martin Hlaváč
WordCamp Bratislava 2017 - Martin Hlaváč
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí cloudu
 
Proč chcete testovat své aplikace
Proč chcete testovat své aplikaceProč chcete testovat své aplikace
Proč chcete testovat své aplikace
 
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
Petr Nikolas Prokop - Symfony framework (0. sraz přátel Symfony v Hradci Král...
 
Tipy a triky, best practices, deployment, testování
Tipy a triky, best practices, deployment, testováníTipy a triky, best practices, deployment, testování
Tipy a triky, best practices, deployment, testování
 
atoto.cz - jak na snadnou integraci Codeception
atoto.cz - jak na snadnou integraci Codeceptionatoto.cz - jak na snadnou integraci Codeception
atoto.cz - jak na snadnou integraci Codeception
 
Představení Ruby on Rails
Představení Ruby on RailsPředstavení Ruby on Rails
Představení Ruby on Rails
 
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
Webinář: Co nového přináší verze 9 jedničky v zálohování Veeam Backup & Repli...
 
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
#golang @SkrzCzDev (Skrz DEV Cirkus 21.10.2015)
 

Mais de Péhápkaři

Startup vs korporace vs Previo
Startup vs korporace vs PrevioStartup vs korporace vs Previo
Startup vs korporace vs PrevioPéhápkaři
 
RabbitMQ a ElasticSearch v Previu
RabbitMQ a ElasticSearch v PreviuRabbitMQ a ElasticSearch v Previu
RabbitMQ a ElasticSearch v PreviuPéhápkaři
 
Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...
Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...
Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...Péhápkaři
 
Čtvrtkon #53 - Štěpán Zikmund
Čtvrtkon #53 - Štěpán ZikmundČtvrtkon #53 - Štěpán Zikmund
Čtvrtkon #53 - Štěpán ZikmundPéhápkaři
 
Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...
Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...
Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...Péhápkaři
 
Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)
Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)
Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)Péhápkaři
 
PHP Evening #1 - Automatizace [Jan Klat]
PHP Evening #1 - Automatizace [Jan Klat]PHP Evening #1 - Automatizace [Jan Klat]
PHP Evening #1 - Automatizace [Jan Klat]Péhápkaři
 
PHP Evening #1 - Propel ORM [Martin Sojka]
PHP Evening #1 - Propel ORM [Martin Sojka]PHP Evening #1 - Propel ORM [Martin Sojka]
PHP Evening #1 - Propel ORM [Martin Sojka]Péhápkaři
 
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...Péhápkaři
 
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...Péhápkaři
 
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...Péhápkaři
 
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy (11. sraz přátel ...
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy  (11. sraz přátel ...Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy  (11. sraz přátel ...
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy (11. sraz přátel ...Péhápkaři
 
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...Péhápkaři
 
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...Péhápkaři
 
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)Péhápkaři
 
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Péhápkaři
 
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)Péhápkaři
 
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)Péhápkaři
 
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)Péhápkaři
 
Karel Škopek - WordPress + Laravel = <3 (4. sraz přátel Symfony v Praze)
Karel Škopek - WordPress + Laravel = <3 (4. sraz přátel Symfony v Praze)Karel Škopek - WordPress + Laravel = <3 (4. sraz přátel Symfony v Praze)
Karel Škopek - WordPress + Laravel = <3 (4. sraz přátel Symfony v Praze)Péhápkaři
 

Mais de Péhápkaři (20)

Startup vs korporace vs Previo
Startup vs korporace vs PrevioStartup vs korporace vs Previo
Startup vs korporace vs Previo
 
RabbitMQ a ElasticSearch v Previu
RabbitMQ a ElasticSearch v PreviuRabbitMQ a ElasticSearch v Previu
RabbitMQ a ElasticSearch v Previu
 
Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...
Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...
Martin Froněk - Jak využít soft skills ve svůj prospěch 2 (15. sraz přátel PH...
 
Čtvrtkon #53 - Štěpán Zikmund
Čtvrtkon #53 - Štěpán ZikmundČtvrtkon #53 - Štěpán Zikmund
Čtvrtkon #53 - Štěpán Zikmund
 
Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...
Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...
Václav Makeš - Infrastructure as code - Jak nahazovat stroje a nic moc nevědě...
 
Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)
Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)
Tomáš Klíma - Implementace BitCoinut v praxi (13. sraz přátel PHP v Praze)
 
PHP Evening #1 - Automatizace [Jan Klat]
PHP Evening #1 - Automatizace [Jan Klat]PHP Evening #1 - Automatizace [Jan Klat]
PHP Evening #1 - Automatizace [Jan Klat]
 
PHP Evening #1 - Propel ORM [Martin Sojka]
PHP Evening #1 - Propel ORM [Martin Sojka]PHP Evening #1 - Propel ORM [Martin Sojka]
PHP Evening #1 - Propel ORM [Martin Sojka]
 
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...
Tomáš Kazatel - Jsme přece vývojáři, ne textaři (12. sraz přátel PHP v P...
 
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...
Jakub Kratina - Když si dva vývojáři založí s.r.o. (12. sraz přátel PHP v Pra...
 
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...
Petr Pavel - Co musí programátor umět kromě programování (12. sraz přátel PHP...
 
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy (11. sraz přátel ...
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy  (11. sraz přátel ...Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy  (11. sraz přátel ...
Tomáš Strejček - Velikost týmu vs. monolith a mikroservicy (11. sraz přátel ...
 
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...
Jindřich Kubát - Microservice – Post Monolith Architecture (11. sraz přátel P...
 
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...
Jakub Kratina - Jak testovat aplikace s radostí díky Codeception (11. sraz př...
 
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)
Ako nespáliť server - Monit [Jozef Lami] (7. sraz, Praha)
 
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
 
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)
Blackfire.io - Fire up your php app performance [Jan Kopp] (7. sraz, Praha)
 
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)
Automatizace jednoduše [Martin Zeman] (6. sraz, Praha, 31.3.2016)
 
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
 
Karel Škopek - WordPress + Laravel = <3 (4. sraz přátel Symfony v Praze)
Karel Škopek - WordPress + Laravel = <3 (4. sraz přátel Symfony v Praze)Karel Škopek - WordPress + Laravel = <3 (4. sraz přátel Symfony v Praze)
Karel Škopek - WordPress + Laravel = <3 (4. sraz přátel Symfony v Praze)
 

Vašek Purchart - Optimalizace Symfony na devu (2. sraz přátel Symfony v Praze)

  • 1. Optimalizace Symfony na devu @VasekPurchart
  • 2. Možnosti optimalizace • hardware • OS • další technologie • nastavení prostředí • nastavení aplikace Optimalizovat je možné na různých úrovních, na seznamu jsou vypsané od největšího zásahu do stávajícího prostředí po nejmenší. V této prezentaci se chci zabývat především posledními dvěma body, právě díky jejich minimálnímu zásahu a tudíž větší dostupnosti a omezenému riziku dalších komplikací.
  • 3. Nejnovější verze PHP ( source: http://talks.php.net/velocity15#/drupalbench ) Základní optimalizací je používání nejnovějších verzí PHP. Nové PHP postupně přinášejí zrychlení aplikací, které je prakticky „zadarmo“, největší zrychlení, co se týče real-world aplikací napsaných v Symfony nás čeká v podobě PHP 7. Zde je srovnání na základě Drupalu 8, který na Symfony běží a je tak blíže realitě než prosté syntetické benchmarky. ( source: http://talks.php.net/velocity15#/drupalbench )
  • 4. (https://3v4l.org/GWVhT) Je samozřejmě možné používat lokálně jinou verzi, než na které poběží projekt v produkci. Nebo používat jinou verzi (PHP 7 nebo HHVM) například jen pro spouštění testů. Já osobně toto nedělám, protože jsem již několikrát narazil na poměrně zákeřné bugy, které se pak projevily jen na produkci, nebo naopak. Snažím se mít tedy identickou verzi jako je na serveru.
  • 5. Xdebug Jedny z nejdramatičtějších zpomalení může způsobit zapnutá Xdebug extension. V posledních verzích například sám composer přidal varování, které se zobrazuje při každém jeho spuštění.
  • 6. php -dzend_extension=xdebug.so bin/phpunit Zkontrolujte si tedy, že je Xdebug vypnutý jak při webovém přístupu (mod_apache, PHP-FPM apod.), ale zároveň i v CLI. Doporučuji rozšíření loadovat jen pro nástoje, kde je bezprostředně potřeba (tj. např. viz výše spuštění PHPUnitu). Alternativou je připravit samostatné php.ini a to pak spouštět pomocí –c.
  • 7. Xdebug on Xdebug off Zde je drobná ukázka toho, jak dramatický může být rozdíl v CLI aplikaci.
  • 8. ( http://php.net/manual/en/ini.core.php#ini.sect.performance ) Další optimalizace vycházejí především z toho, že Symfony (ale i jakákoliv jiná aplikace používající hodně knihoven) musí při běhu načíst velké množství souborů, což obsahuje i velké množství dotazů na disk, které může být velmi pomalé. Tyto dotazy se cachují, velikost a trvanlivost realpath cache ovlivňují tyto nastavení. Výchozí nastavení velikosti většinou nestačí pro standardní Symfony aplikaci, doporučuji zvýšit cca na 4096K.
  • 9. S nastavením trvanlivosti realpath cache je to zrádnější, už výchozí 2 minuty můžou vytvořit velké WTF momenty (aplikace si může myslet, že je na disku něco komplet jiného než opravdu je). Nastavte tedy dle vlastního uvážení, ale doporučuji do build procesu (např. scriptu, který by měl zajistit, že je aplikace připravená ke spuštění – např. po přepnutí z větve do větve) přidat zavolání clearstatcache se zapnutým druhým parametrem, který tuto cache pročistí. Pozor, clearstatcache je potřebné volat v procesu spuštěném v tom PHP SAPI, které cache chcete ovlivnit (tj. pravděpodobně v tom, na které koukáte přes browser). ( http://php.net/manual/en/function.clearstatcache.php )
  • 10. Voláním této funkce můžete zjistit, jak je právě využívána realpath cache a může vám tedy pomoci s nalezením správné velikosti, pozor opět je potřeba volat v tom SAPI, pro které chcete velikost zjišťovat. ( http://php.net/manual/en/function.realpath-cache-size.php )
  • 11. Byte Code Cache • APC • OPcache (od 5.5) Používání byte code cache znamená, že se všechny soubory nemusí pokaždé znovu parsovat a překládat do spustitelné podoby. Tato technologie je od PHP 5.5 v podobě OPcache dostupná ve většině distribucí přímo s PHP, není to tedy nic, co byste museli samostatně instalovat.
  • 12. Optimalizace OPcache • Fine-Tune Your Opcache Configuration to Avoid Caching Suprises opcache.validate_timestamps=0 Výchozí nastavení Opcache je ale velmi opatrné a zdaleka nenabízí největší optimalizaci. Doporučuji si přečíst odkazovaný článek, který se sice zabývá optimalizací pro produkci, ale optimalizace pro dev je ve většine případů jednodušší. Jedním z největších zrychlení je vypnutí kontrolování, jestli se soubory nezměnily od posledního zpracování. Jinak se opět pokládá velké množství dotazů na filesystém. Toto nastavení pak ale znamená, že musíte OPcache explicitně říci, kdy má zapamatované zdrojáky zapomenout (přidání do build procesu). ( http://php.net/manual/en/function.realpath-cache-size.php )
  • 13. Composer autoload • Classmap autoritativní composer dump-autoload --optimize composer install --optimize-autoloader composer dump-autoload --classmap-authoritative composer install --classmap-authoritative Dalším místem, kde je potřeba velké množství čtení z disku je samostný autoloading souborů, pokud máte hodně knihoven, které používají autoloading pomocí PSR 0 nebo 4, tak se soubory musí po jednom hledat na disku (i v několika možných lokacích). Nemusíte spoléhat na autory balíčků a můžete si vygenerovat do classmapy všechny třídy, takže jejich poloha pak bude předem známá. Na devu není moc praktický autoritativní režim, protože to znamená po přidání každé třídy přegenerovat classmap.
  • 14. Vyházet zbytečnosti Většina Symfony projektů, které jsem viděl začíná se Standard Edition, která obsahuje „komfortní nastavení“ tak, aby nováčci nemuseli nic moc řešit a start projektu byl usnadněn. Reálně obsahuje spoustu částí, které nikdy nepoužíváte a které při každém běhu můžou zpomalovat aplikaci.
  • 15. SensioFrameworkExtraBundle Skoro všichni tak například používají SensioFrameworkExtraBundle, která nabízí hlavně výše vypsané anotace. Většina projektů, ale nepoužívá všechny tyto anotace.
  • 16. SensioFrameworkExtraBundle Přitom veěkerá funkcionalita s tímto spojená je defaultně zapnutá (aby to každý mohl bez nastavování používat). Toto je jen jeden příklad za všechny, měli byste znát konfiguraci bundlů, které používáte.
  • 17. Zbytečné listenery • seznam aktuálně zaregistrovaných listenerů pro dané prostředí app/console debug:event-dispatcher Kvůli tomu, jak fungují bundly (každý si může registrovat svoje listenery, bez nutnosti vašeho nastavování) bývají právě ony zdrojem velkého překvapení. Například Standard Edition má v defaultním stavu (v době vytváření prezentace) zaregistrováno pro request 33 listenerů. To, které listenery jsou pro dané prostředí registrované můžete zjistit pomocí konzole a postupně dohledat, jak deaktivovat ty, které nepotřebujete.
  • 18. Další adepti • formuláře • mailer • ? profiler • ? logování • ... • kontrolujte app/console debug:config Další oblasti defaultní konfigurace, které je možné podle zaměření projektu vypnout. Pokud nepoužíváte profilování a logování na devu pořád a přitom např. kvůli produkci logujete hodně věcí, můžete tyto nastavení zapínat jen pro samotný debugging, když se něco pokazí.
  • 19. • vs Konfiguraci je ale potřeba ověřovat, protože některé její části můžou být navzájem provázané, takže i když dokumentace tvrdí, že formuláře jsou defaultně vypnuté a aplikace je v konfiguraci explicitně nezapíná, tak reálně jsou ve Standard Edition zapnuté.
  • 20. Jakákoli optimalizace na devu je vždycky o balancování mezi pohodlím a rychlostí. Na devu, tím, že měníme kód, tak očekáváme, že jakmile aplikaci spustíme, tak se bude chovat přesně podle posledních úprav. Jediné, jak se na to ale spolehnout je vykonat vše od začátku jen na základě aktuálních zdrojáků. Nebo zkontrolovat, že se od minule nic nezměnilo a jde použít staré „výsledky“ některých operací. Oba tyto úkony jsou ale velmi náročné a tak většina optimalizací pracuje s tím, že musíme sytému pomoci v tom, aby věděl, kdy (ne)může staré výsledky použít.
  • 21. Assetic app/console assetic:dump app/console assetic:watch Assetic například ve výchozím nastavení generuje všechny soubory dynamicky pro každé spuštění, což je velmi pomalé. Tuto funkcionalitu lze vypnout, je pak ale právě potřeba zajistit volání generování po změně patřičných souborů. To dělat buď manuálně (a jako součást build procesu). Je to ale celkem nepohodlné pro průběžný vývoj, kde na to nechceme myslet. Je možné tedy kontrolovat soubory, o kterých víme, že ovlivňují výsledek automaticky a generování spustit jen pokud se změní. (Watch v asseticu je prý zabugovaný, používám toto jen jako příklad přístupu, viz dále).
  • 22. Doctrine • disablování lazy generování proxy tříd • vygenerování parameters: doctrine.orm.auto_generate_proxy_classes: false app/console cache:warmup Podobný princip jako je ukázán na minulém slidu je možné aplikovat i u dalších částí – většinou bez přímé podpory autorů. Tady je ukázka jak podobný proces – generování proxy tříd pro Doctrine entity přesunout z lazy evaluace při každém requestu do watch procesu. Prvně je nutné zakázat lazy generování, což zároveň odemkne možnost pomocí cache:warmup vygenerovat všechy proxy najednou. Pak ale musíme zařídit tech watch...?
  • 23. JS to the rescue! Je zbytečné si něco takového programovat v PHP, většina projektů tak jako tak používá nějaký frontend buildovací nástoj, například Grunt, Gulp, Webpack a další. Myslím že všechny tyto nástroje mají prostředky jak watchovat změny, protože live reload je ve světě JS aktuálně celkem standardem. Je pak jen otázkou konfigurace, jak toto propojit s tím, co potřebujeme. Ve zdejší ukázce jsem zvolil Grunt jen proto, že jsem ho na podobnou funkcionalitu už použil.
  • 24. Repozitář dema Prohlédněte si příklad na Symfony Demo aplikaci, kde po následování základní instalace npm modulů, můžete watch spustit a po úpravě jakékoliv entity dojde automaticky k vygenerování všech proxy tříd. S trochou dalšího programování by bylo možné přegenerovávat jen změněné entity, ale tímto chci především ukázat, jak snadné je začít aplikovat tento přístup k optimalizaci na devu.

Notas do Editor

  1. Budu se zabývat jen posledními dvěma
  2. * můžete lokálně používat i jinou verzi než na produkci, ale pozor na chyby
  3. Přidat do buildu
  4. asi jiné nastavení než v produkci většnou zapnutá, ale s opatrným nastavením
  5. Benjamin Erbelei
  6. Kdo používá nějaké z těchhle anotací? Kdo používá všechny?
  7. Tipne si někdo, kolik jich je zaregistrovaných ve standard edition pro request? (bez console?) ===> 33
  8. ale co s tím watchem?