SlideShare a Scribd company logo
1 of 51
Download to read offline
Jak na moderní Server-Side UI
Rendering (SSR) v PHP
Michal Majer
19.5. 2022
Proč se zabývat SSR v době
Reactu/Vue.js?
vs
Blade
SPA (single-page applications)
• Rychlost vývoje a úprav (např. formuláře)

• Menší komplexita a méně závislostí celého systému

• Menší nároky na vývojářský tým

• 1 vývojář (většinou) zvládne celý task !!!

• Lehčí end-2-end testování, monitoring a bug tracking

• IDE debugging

• Jednodušší UI caching / Implicitní SSR (v SPA řeší např. NextJS/NuxtJS)
Výhody tradičního SSR *
* Pro určité typy projektů
• Provázání backend a frontend kódu, chaos v assets

• Full-page reloads / stahování nadbytečných dat

• Dlouhé a nepřehledné twig/latte/blade špagety 

• Chybějící typová kontrola

• Nefunguje o
ffl
ine

• Není cool

• Nevhodné pro velmi komplexní UI
Nevýhody tradičního SSR
Použít SSR nebo frontend
framework?
vs
Blade
SPA (single-page applications)
• Potřeby produktu (komplexní UI vs. komplexní backend?)

• Stav produktu 

• Raný prototyp / MVP

• Stabilní produkt po X-tém kompletním přepsání

• Složení týmu (backend / frontend / full-stack)

• Technologický stack

• Finanční a personální zdroje na údržbu
SSR nebo SPA framework
Příklad Sworp
Příklad Sworp
	
Cílem je vybudovat sadu produktů, které skrze
automatizaci a moderní technologie zjednoduší život
nájemníkům, nájemcům a řemeslníkům.
• Nový systém, nový tým, několik nových produktů 

• Chceme co nejdříve na trh a zároveň …

• Chceme dělat věci pořádně, předejít uspěchanému
vývoji a tvorbě technického dluhu
Prioritizace a outsourcing
dev-ops v cloudu
Interní aplikace a webová prezentace
UI design system + framework
Prioritní cíle (in-house)
Bankovní (a další) integrace
API pro mobilní aplikace
Vizualizace relevantních dat
Mobilní aplikace (klient)
Robustní backend architektura a testy
Doménová business logika
a další …
Lokalizace, portály, účetnictví, reporty,
noti
fi
kace, e-maily, …
• JS SPA nebo PHP SSR?

• Chceme výhody SSR

• Jak omezit / obejít nevýhody?

• Můžeme oddálit rozhodnutí a
nemuset vytvářet technický
dluh?
* Následující slidy ukazují řešení, která se ukázala funkční v našem kontextu

a nejsou prezentována jako obecně nejlepší pro všechny projekty :-)
• Možná řešení:

• Webpack Encore

• Hotwire Stimulus 

• Symfony UX
Nevýhoda SSR:


Provázání backend a frontend kódu, chaos v assets
https://symfony.com/doc/current/frontend.html
yarn watch / build
https://www.stimulus-components.com/
https://symfony.com/doc/current/frontend/ux.html#all-symfony-ux-packages
• Řešení: 

Hotwire Turbo

• Drive 

• Frames

• Streams
Nevýhoda SSR:


Full-page reloads / stahování nadbytečných dat
https://hotwired.dev/
• Z klasických HTTP volání

vytváří Ajax dotazy

• Ihned zpříjemní pocit při 

navigaci na webu 

• 3 pravidla nutné dodržet:

• <script> tagy do <head> a ideálně používat Stimulus

• Verzování a data-turbo-track=“reload" na všechny <script> a <link> tagy

• Sémanticky správné návratové kódy při odeslání formulářů 422/302
Turbo: Drive
Turbo: Frames (1)
Turbo: Frames (2)
Turbo: Frames (3) - eager loading
Turbo: Frames (4)
Turbo: Frames (5) - lazy loading
• Dokud prohlížeč turbo-frame nezobrazí (např. pokud je umístěné v
modálu), turbo nevyšle request

• Turbo vyšle request až ve chvíli, kdy je turbo-frame viditelné
Turbo: Streams
Action types: append, prepend, replace, update,
remove, before, after
Turbo: Streams (chat)
Turbo: Streams (chat)
• Řešení:

• Symfony UX / Twig (Live) Components

• Blade Components

• performing/twig-components 

• … mnoho dalších
Nevýhoda SSR:


Dlouhé a nepřehledné twig/latte špagety
Symfony UX: Twig Components (1)
https://symfony.com/bundles/ux-twig-component/current/index.html
Symfony UX: Twig Components (2)
Symfony UX: Twig Components (3)
Symfony UX: Twig Components (4)
Symfony UX: Twig Components (5)
performing/twig-components (1)
https://github.com/giorgiopogliani/twig-components
performing/twig-components (2)
https://github.com/giorgiopogliani/twig-components
Nevýhoda SSR:


Chybějící typová kontrola
https://github.com/guym4c/twig-prop-types
guym4c/twig-prop-types (1)
guym4c/twig-prop-types (2)
• Opravdu? :-)

• PWA - Progressive web apps

+ service workers

• https://youtu.be/wEPeaJgbIxQ
Nevýhoda SSR:


Nefunguje of
fl
ine
• Nutné balancovat mezi:

• Je to vhodný nástroj pro daný problém a kontext?

• Je na pracovním trhu dost lidí, kteří to umějí a chtějí dělat?

• “Choose boring technology” - Dan McKinley (https://mcfunley.com/choose-boring-technology)

• “The nice thing about boringness (so constrained) is that the capabilities of these
things are well understood. But more importantly, their failure modes are well
understood”
• “Mindful choice of technology gives engineering minds real freedom: the freedom
to contemplate bigger questions. Technology for its own sake is snake oil.”
Nevýhoda SSR:


Tradiční SSR není cool
• Ano, ale …
Nevýhoda SSR:


Nevhodné pro velmi komplexní UI
https://symfonycasts.com/screencast/stimulus/react
Kde se dozvědět více?
• Symfony Slack #ux channel

• SymfonyCasts 

• Stimulus: https://symfonycasts.com/screencast/stimulus

• Symfony UX / Turbo: https://symfonycasts.com/screencast/turbo/asset-
tracking

• Symfony Docs: https://symfony.com/doc/current/frontend/ux.html
Zdroje / zajímavé odkazy
• https://hotwired.dev/

• https://m.signalvnoise.com/the-majestic-monolith/

• https://symfony.com/doc/current/frontend.html

• https://symfony.com/bundles/ux-turbo/current/index.html#sending-async-
changes-using-mercure-a-chat

• https://github.com/giorgiopogliani/twig-components

• https://github.com/guym4c/twig-prop-types
Děkuju za pozornost
Michal Majer, 19.5. 2022
E-mail: majermi4@gmail.com
Twitter: @MichalMajer15 

Péhápkáři Slack: majermi4

More Related Content

Similar to Moderní Server Side UI Rendering v PHP

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š
 
Confluence cloud pozitiva nedostatky
Confluence cloud pozitiva nedostatkyConfluence cloud pozitiva nedostatky
Confluence cloud pozitiva nedostatkyOnlio
 
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
 
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
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Tomáš Kukol
 
2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEE2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEEMartin Ptáček
 
WordPress REST API + React + TypeScript
WordPress REST API + React + TypeScriptWordPress REST API + React + TypeScript
WordPress REST API + React + TypeScriptBorek Bernard
 
Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariRoman Pichlík
 
"Multiplatformní" je sprosté slovo!?
"Multiplatformní" je sprosté slovo!?"Multiplatformní" je sprosté slovo!?
"Multiplatformní" je sprosté slovo!?Trinerdis
 
JIRA Structure - The Issue Organizer
JIRA Structure - The Issue OrganizerJIRA Structure - The Issue Organizer
JIRA Structure - The Issue OrganizerOnlio
 
Oracle Solaris Day 2013 - Oracle DB and OS Solaris
Oracle Solaris Day 2013 - Oracle DB and OS SolarisOracle Solaris Day 2013 - Oracle DB and OS Solaris
Oracle Solaris Day 2013 - Oracle DB and OS SolarisMartin Cerveny
 
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Ondřej Machulda
 
Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webůMichal Doležel
 

Similar to Moderní Server Side UI Rendering v PHP (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ě
 
Confluence cloud pozitiva nedostatky
Confluence cloud pozitiva nedostatkyConfluence cloud pozitiva nedostatky
Confluence cloud pozitiva nedostatky
 
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)
 
TNPW2-2013-07
TNPW2-2013-07TNPW2-2013-07
TNPW2-2013-07
 
TNPW2-2012-02
TNPW2-2012-02TNPW2-2012-02
TNPW2-2012-02
 
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
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]
 
TNPW2-2016-05
TNPW2-2016-05TNPW2-2016-05
TNPW2-2016-05
 
Axure RP training
Axure RP trainingAxure RP training
Axure RP training
 
2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEE2009 X33EJA Moderní Technologie Pro Vývoj JEE
2009 X33EJA Moderní Technologie Pro Vývoj JEE
 
TNPW2-2012-07
TNPW2-2012-07TNPW2-2012-07
TNPW2-2012-07
 
WordPress REST API + React + TypeScript
WordPress REST API + React + TypeScriptWordPress REST API + React + TypeScript
WordPress REST API + React + TypeScript
 
ASP.NET 3.5 / futures
ASP.NET 3.5 / futuresASP.NET 3.5 / futures
ASP.NET 3.5 / futures
 
Just KISS Nette
Just KISS NetteJust KISS Nette
Just KISS Nette
 
Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou Tvari
 
"Multiplatformní" je sprosté slovo!?
"Multiplatformní" je sprosté slovo!?"Multiplatformní" je sprosté slovo!?
"Multiplatformní" je sprosté slovo!?
 
JIRA Structure - The Issue Organizer
JIRA Structure - The Issue OrganizerJIRA Structure - The Issue Organizer
JIRA Structure - The Issue Organizer
 
Oracle Solaris Day 2013 - Oracle DB and OS Solaris
Oracle Solaris Day 2013 - Oracle DB and OS SolarisOracle Solaris Day 2013 - Oracle DB and OS Solaris
Oracle Solaris Day 2013 - Oracle DB and OS Solaris
 
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
Funkční testování – chybějící vrchol pyramidy (WebExpo 2016)
 
Generátory statických webů
Generátory statických webůGenerátory statických webů
Generátory statických webů
 

Moderní Server Side UI Rendering v PHP

  • 1. Jak na moderní Server-Side UI Rendering (SSR) v PHP Michal Majer 19.5. 2022
  • 2. Proč se zabývat SSR v době Reactu/Vue.js? vs Blade SPA (single-page applications)
  • 3.
  • 4. • Rychlost vývoje a úprav (např. formuláře) • Menší komplexita a méně závislostí celého systému • Menší nároky na vývojářský tým • 1 vývojář (většinou) zvládne celý task !!! • Lehčí end-2-end testování, monitoring a bug tracking • IDE debugging • Jednodušší UI caching / Implicitní SSR (v SPA řeší např. NextJS/NuxtJS) Výhody tradičního SSR * * Pro určité typy projektů
  • 5. • Provázání backend a frontend kódu, chaos v assets • Full-page reloads / stahování nadbytečných dat • Dlouhé a nepřehledné twig/latte/blade špagety • Chybějící typová kontrola • Nefunguje o ffl ine • Není cool • Nevhodné pro velmi komplexní UI Nevýhody tradičního SSR
  • 6. Použít SSR nebo frontend framework? vs Blade SPA (single-page applications)
  • 7. • Potřeby produktu (komplexní UI vs. komplexní backend?) • Stav produktu • Raný prototyp / MVP • Stabilní produkt po X-tém kompletním přepsání • Složení týmu (backend / frontend / full-stack) • Technologický stack • Finanční a personální zdroje na údržbu SSR nebo SPA framework
  • 9. Příklad Sworp Cílem je vybudovat sadu produktů, které skrze automatizaci a moderní technologie zjednoduší život nájemníkům, nájemcům a řemeslníkům. • Nový systém, nový tým, několik nových produktů • Chceme co nejdříve na trh a zároveň … • Chceme dělat věci pořádně, předejít uspěchanému vývoji a tvorbě technického dluhu
  • 10. Prioritizace a outsourcing dev-ops v cloudu Interní aplikace a webová prezentace UI design system + framework Prioritní cíle (in-house) Bankovní (a další) integrace API pro mobilní aplikace Vizualizace relevantních dat Mobilní aplikace (klient) Robustní backend architektura a testy Doménová business logika a další … Lokalizace, portály, účetnictví, reporty, noti fi kace, e-maily, …
  • 11. • JS SPA nebo PHP SSR? • Chceme výhody SSR • Jak omezit / obejít nevýhody? • Můžeme oddálit rozhodnutí a nemuset vytvářet technický dluh? * Následující slidy ukazují řešení, která se ukázala funkční v našem kontextu
 a nejsou prezentována jako obecně nejlepší pro všechny projekty :-)
  • 12. • Možná řešení: • Webpack Encore • Hotwire Stimulus • Symfony UX Nevýhoda SSR: Provázání backend a frontend kódu, chaos v assets
  • 13.
  • 15.
  • 16. yarn watch / build
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 24. • Řešení: 
 Hotwire Turbo • Drive • Frames • Streams Nevýhoda SSR: Full-page reloads / stahování nadbytečných dat https://hotwired.dev/
  • 25. • Z klasických HTTP volání
 vytváří Ajax dotazy • Ihned zpříjemní pocit při 
 navigaci na webu • 3 pravidla nutné dodržet: • <script> tagy do <head> a ideálně používat Stimulus • Verzování a data-turbo-track=“reload" na všechny <script> a <link> tagy • Sémanticky správné návratové kódy při odeslání formulářů 422/302 Turbo: Drive
  • 28. Turbo: Frames (3) - eager loading
  • 30. Turbo: Frames (5) - lazy loading • Dokud prohlížeč turbo-frame nezobrazí (např. pokud je umístěné v modálu), turbo nevyšle request • Turbo vyšle request až ve chvíli, kdy je turbo-frame viditelné
  • 31. Turbo: Streams Action types: append, prepend, replace, update, remove, before, after
  • 34. • Řešení: • Symfony UX / Twig (Live) Components • Blade Components • performing/twig-components • … mnoho dalších Nevýhoda SSR: Dlouhé a nepřehledné twig/latte špagety
  • 35.
  • 36. Symfony UX: Twig Components (1) https://symfony.com/bundles/ux-twig-component/current/index.html
  • 37. Symfony UX: Twig Components (2)
  • 38. Symfony UX: Twig Components (3)
  • 39. Symfony UX: Twig Components (4)
  • 40. Symfony UX: Twig Components (5)
  • 43. Nevýhoda SSR: Chybějící typová kontrola https://github.com/guym4c/twig-prop-types
  • 46. • Opravdu? :-) • PWA - Progressive web apps
 + service workers • https://youtu.be/wEPeaJgbIxQ Nevýhoda SSR: Nefunguje of fl ine
  • 47. • Nutné balancovat mezi: • Je to vhodný nástroj pro daný problém a kontext? • Je na pracovním trhu dost lidí, kteří to umějí a chtějí dělat? • “Choose boring technology” - Dan McKinley (https://mcfunley.com/choose-boring-technology) • “The nice thing about boringness (so constrained) is that the capabilities of these things are well understood. But more importantly, their failure modes are well understood” • “Mindful choice of technology gives engineering minds real freedom: the freedom to contemplate bigger questions. Technology for its own sake is snake oil.” Nevýhoda SSR: Tradiční SSR není cool
  • 48. • Ano, ale … Nevýhoda SSR: Nevhodné pro velmi komplexní UI https://symfonycasts.com/screencast/stimulus/react
  • 49. Kde se dozvědět více? • Symfony Slack #ux channel • SymfonyCasts • Stimulus: https://symfonycasts.com/screencast/stimulus • Symfony UX / Turbo: https://symfonycasts.com/screencast/turbo/asset- tracking • Symfony Docs: https://symfony.com/doc/current/frontend/ux.html
  • 50. Zdroje / zajímavé odkazy • https://hotwired.dev/ • https://m.signalvnoise.com/the-majestic-monolith/ • https://symfony.com/doc/current/frontend.html • https://symfony.com/bundles/ux-turbo/current/index.html#sending-async- changes-using-mercure-a-chat • https://github.com/giorgiopogliani/twig-components • https://github.com/guym4c/twig-prop-types
  • 51. Děkuju za pozornost Michal Majer, 19.5. 2022 E-mail: majermi4@gmail.com Twitter: @MichalMajer15 
 Péhápkáři Slack: majermi4