{"id":9956,"date":"2022-06-16T10:48:47","date_gmt":"2022-06-16T08:48:47","guid":{"rendered":"https:\/\/vived.io\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/"},"modified":"2022-09-19T13:16:27","modified_gmt":"2022-09-19T11:16:27","slug":"frontend-thursday-vol-92-reassure-joyui-components-encyclopedia","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/","title":{"rendered":"Frontend Thursday vol. 92 &#8211; Reassure, JoyUI, Components Encyclopedia"},"content":{"rendered":"\n<h2 id=\"1-reassure-testy-wydajnosci-komponentow-zrobione-dobrze\" data-num=1>1. Reassure &#8211; testy wydajno\u015bci komponent\u00f3w zrobione dobrze<\/h2>\n\n\n\n<p>Na pewno chocia\u017c raz zdarzy\u0142o Wam si\u0119 optymalizowa\u0107 niewydajny komponent. Je\u015bli macie szcz\u0119\u015bcie, to proces ten zacz\u0105\u0142 si\u0119 od wykrycia regresji w Lighthouse odpalanym na continuous integration. Je\u015bli macie troch\u0119 mniej szcz\u0119\u015bcie, to s\u0142aba wydajno\u015b\u0107 zosta\u0142a zg\u0142oszona przez manualnych tester\u00f3w, lub co gorsza u\u017cytkownik\u00f3w. W tym momencie zwykle zaczyna si\u0119 praca pod presj\u0105 czasu. Najpierw szukamy zepsutego komponentu, potem pracujemy nad szybk\u0105 napraw\u0105 i czym pr\u0119dzej robimy release. Co bardziej skrupulatni do Pull Requesta do\u0142\u0105cz\u0105 screenshot z wynikami Lighthouse. W znacz\u0105cej wi\u0119kszo\u015bci przypadk\u00f3w pod presj\u0105 czasu zabraknie nawet tego &#8211; nie m\u00f3wi\u0105c ju\u017c o dodaniu test\u00f3w regresji, czy przygotowaniu dok\u0142adnego raportu na temat wydajno\u015bci. A co, je\u015bli powiedzia\u0142bym Wam, \u017ce mo\u017cemy unikn\u0105\u0107 podobnych regresji wydajno\u015bci?\u00a0<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"888\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-2.jpeg\" alt=\"\" class=\"wp-image-5380\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-2.jpeg 888w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-2-300x169.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-2-768x432.jpeg 768w\" sizes=\"auto, (max-width: 888px) 100vw, 888px\" \/><\/figure><\/div>\n\n\n<p>Reassure, to nowa biblioteka do pisania test\u00f3w wydajno\u015bci Reactowych komponent\u00f3w. Jej API mocno przypomina to znane z k6 &#8211; narz\u0119dzie do tworzenia test\u00f3w wydajno\u015bci REST-owych serwis\u00f3w. Zaczynamy od definicji scenariusza interakcji z komponentem, a nast\u0119pnie odpowiednio konfigurujemy test runner (liczba p\u0119tli itp.). Potem zostaje ju\u017c tylko odpali\u0107 test i obserwowa\u0107 wyniki.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">test(&#039;Count increments on press&#039;, async () =&gt; {\n  const scenario = async (screen: RenderAPI) =&gt; {\n    const button = screen.getByText(&#039;Action&#039;);\n    \n    await screen.findByText(&#039;Count: 0\u2019);\n    fireEvent.press(button);\n    fireEvent.press(button);\n    await screen.findByText(&#039;Count: 2&#039;);\n  };\n\n  const stats = await measureRender(\n    &lt;Counter \/&gt;, \n    { scenario, runs: 20 }\n  );\n  await writeTestStats(stats);\n});<\/code><\/pre>\n\n\n\n<p>Reassure b\u0119dzie mo\u017cna wpi\u0105\u0107 w pipeline continuous integration i zdefiniowa\u0107 bud\u017cety wydajno\u015bciowe lub por\u00f3wnywa\u0107 wyniki z poprzednimi wersjami komponentu. Zak\u0142adaj\u0105c wysokie pokrycie testami, o spadku wydajno\u015bci dowiemy si\u0119 ju\u017c z PR wprowadzaj\u0105cego regresj\u0105. Ponadto continuous integration od razu wska\u017ce nam zepsuty komponent, a winowajc\u00f3w szuka\u0107 b\u0119dziemy tylko w kodzie z danego Pull Request<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-1-1.jpeg\" alt=\"\" class=\"wp-image-5381\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-1-1.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-1-1-300x300.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-1-1-150x150.jpeg 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n<p>W przedstawionej w poprzednich akapitach beczce miodu jest jednak \u0142y\u017cka dziegciu &#8211; wysokie pokrycie testami wydajno\u015bci. Koszt pisania i utrzymywania du\u017cej ilo\u015bci test\u00f3w mo\u017ce okaza\u0107 si\u0119 naprawd\u0119 wysoki. Mimo wszystko dla Reassure widz\u0119 sporo zastosowa\u0144. Zazwyczaj w aplikacji mo\u017cemy wyznaczy\u0107 krytyczne komponenty i to stworzy\u0107 testy tylko dla nich. Ponadto licz\u0119 te\u017c, \u017ce Reassure stanie si\u0119 moim bazowym narz\u0119dziem do pracy nad optymalizacj\u0105. U\u017cywanie skomplikowanych DevTools i manualne wyklikiwanie flow u\u017cytkownika nie s\u0105 ani najbardziej optymalnym, ani najbardziej reprodukowanym sposobem mierzenia wydajno\u015bci.<\/p>\n\n\n\n<p>Na ten moment Reassure jest w zamkni\u0119tej becie, ale w najbli\u017cszych tygodniach projekt ma przej\u015b\u0107 na model Open Source. Mocno trzymam kciuki, zw\u0142aszcza, \u017ce za bibliotek\u0105 stoi polski software house callstack (je\u015bli kt\u00f3ry\u015b z autor\u00f3w biblioteki to czyta &#8211; dobra robota!).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"660\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-3.jpeg\" alt=\"\" class=\"wp-image-5382\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-3.jpeg 660w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-3-300x227.jpeg 300w\" sizes=\"auto, (max-width: 660px) 100vw, 660px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/www.callstack.com\/open-source\/reassure\">https:\/\/www.callstack.com\/open-source\/reassure<\/a><\/p>\n\n\n\n<h2 id=\"2-joy-ui-material-ui-bez-material-design\" data-num=2>2. Joy UI &#8211; Material UI bez Material Design<\/h2>\n\n\n\n<p>MUI (dawniej Material UI), to chyba najpopularniejsza biblioteka komponent\u00f3w dla Reacta. Jej najwi\u0119ksz\u0105 wad\u0105 (i r\u00f3wnocze\u015bnie zalet\u0105) jest implementacja j\u0119zyka projektowania Material Design (kocham te spolszczenia \u2764\ufe0f). Tak d\u0142ugo jak interesowa\u0142o Was pod\u0105\u017canie za wytycznymi Google, Material UI sprawdza\u0142 si\u0119 doskonale. Niestety kiedy interesowa\u0142o nas stworzenie w\u0142asnej biblioteki komponent\u00f3w czeka\u0142a nas droga przez m\u0119k\u0119. By\u0142o to mo\u017cliwe, ale ilo\u015b\u0107 tworzonej konfiguracji nakazywa\u0142a pow\u0105tpiewa\u0107, czy na pewno jest to dobra droga.<\/p>\n\n\n\n<p>Joy UI ma by\u0107 Material UI, ale bez Material Design. Patrz\u0105c na API obie biblioteki wygl\u0105daj\u0105 wr\u0119cz bli\u017aniaczo podobnie. Mamy tu wi\u0119c do czynienia z wszystkim co najlepsze w Material UI (API, Acessability) bez tego co nadmiarowe (Material Design).<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-xml\">&lt;Box sx={{\n   p: 2,\n   pb: 1,\n   display: &#039;flex&#039;,\n   alignItems: &#039;center&#039;,\n   justifyContent: &#039;space-between         \n}}&gt;\n  &lt;Typography\n    fontSize=&quot;xs2&quot;\n    textColor=&quot;text.tertiary&quot;\n    textTransform=&quot;uppercase&quot;\n    letterSpacing=&quot;md&quot;\n    fontWeight=&quot;lg&quot;\n  &gt;\n  Filter by\n  &lt;\/Typography&gt;\n  &lt;Button size=&quot;sm&quot; variant=&quot;plain&quot; sx={{ fontSize: &#039;xs&#039;, px: 1 }}&gt;\n    Clear filters\n  &lt;\/Button&gt;\n&lt;\/Box&gt;\n<\/code><\/pre>\n\n\n\n<p>Niestety Joy UI, na razie jest we wczesnej alfie i stabilnego wydania ma doczeka\u0107 si\u0119 dopiero w drugiej po\u0142owie 2022. Ja czekam niecierpliwie, bo nie tak dawno rozwa\u017cali\u015bmy u\u017cycie MUI w jednym z projekt\u00f3w, ale ostatecznie z niego zrezygnowali\u015bmy w\u0142a\u015bnie przez trudno\u015b\u0107 z nadpisaniem zachowa\u0144 zdefiniowanych w Material Design.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"666\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-2-1.jpeg\" alt=\"\" class=\"wp-image-5383\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-2-1.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-2-1-225x300.jpeg 225w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/mui.com\/blog\/first-look-at-joy\/\">https:\/\/mui.com\/blog\/first-look-at-joy\/<\/a><\/p>\n\n\n\n<h2 id=\"3-encyklopedia-komponentow-od-storybook\" data-num=3>3. Encyklopedia komponent\u00f3w od Storybook<\/h2>\n\n\n\n<p>Wzmianki o Storybooku pojawiaj\u0105 si\u0119 w naszych przegl\u0105dach dosy\u0107 regularnie i ju\u017c nie raz wspomina\u0142em, \u017ce osoba odpowiedzialna za ich marketing powinna dosta\u0107 podwy\u017ck\u0119 (statystycznie cz\u0119\u015bciej pisz\u0119 o Storybook, ni\u017c o React!). W tym tygodniu firma og\u0142osi\u0142a powstanie wielkiej encyklopedii komponent\u00f3w i ponownie informacja ta rozesz\u0142a si\u0119 po frontendowym internecie dosy\u0107 szeroko.&nbsp;<\/p>\n\n\n\n<p>W encyklopedii zebranych zosta\u0142o ponad 5000 komponent\u00f3w, w tym cz\u0119\u015b\u0107 od takich firm jak GitHub, BBC czy Audi. Spora cz\u0119\u015b\u0107 z zebranych komponent\u00f3w linkuje r\u00f3wnie\u017c kod \u017ar\u00f3d\u0142owy. Je\u015bli kiedy\u015b b\u0119dziecie szuka\u0107\u00a0 inspiracji, czy to wizualnych, czy nazewniczych, to ju\u017c wiecie gdzie szuka\u0107.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/image-1024x722.webp\" alt=\"\" class=\"wp-image-5384\" width=\"-196\" height=\"-138\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/image-1024x722.webp 1024w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/image-300x212.webp 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/image-768x542.webp 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/image-1536x1083.webp 1536w, https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/image-2048x1444.webp 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>M\u00f3wcie co chcecie, ale je\u015bli to prawdziwa encyklopedia, to ja czekam na wydanie papierowe<\/figcaption><\/figure><\/div>\n\n\n<p>W minionym tygodniu na blogu Storybooka ukaza\u0142 si\u0119 jeszcze jeden bardzo ciekawy wpis &#8211; <a href=\"https:\/\/storybook.js.org\/blog\/why-most-design-systems-implode\/\">kr\u00f3tki wywiad z Bradem Frostem<\/a>. W artykule tw\u00f3rca Atomic Design dzieli si\u0119 z nami jego odpowiedzi\u0105 na pytanie: dlaczego wi\u0119kszo\u015b\u0107 pr\u00f3b stworzenia design systemu ko\u0144czy si\u0119 fiaskiem. Je\u015bli szukacie kr\u00f3tkiej, ale ciekawej lektury na d\u0142ugi weekend to mocno polecam.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/storybook.js.org\/blog\/component-encyclopedia\/\">https:\/\/storybook.js.org\/blog\/component-encyclopedia\/<\/a><\/p>\n\n\n\n<h2 id=\"4-fastify-v4\" data-num=4>4. Fastify v4<\/h2>\n\n\n\n<p>Pomimo tego, \u017ce pras\u00f3wka ta nazywa si\u0119 \u201cFrontend Thursday\u201d, to staram si\u0119 tutaj r\u00f3wnie\u017c przemyca\u0107 najwa\u017cniejsze nowo\u015bci z backendowej cz\u0119\u015bci JavaScriptu. Podobnie b\u0119dzie i tym razem, bo kilka dni temu doczekali\u015bmy si\u0119 fastify 4.0. Na now\u0105 wersj\u0119 biblioteki\u00a0 czekali\u015bmy prawie 2 lata i niestety nie doczekali\u015bmy si\u0119 wi\u0119kszych rewolucji. Nowo\u015bci to z mojej perspektywy przede wszystkim drobne usprawnienia, ale licz\u0119 na to, \u017ce kto\u015b wyprowadzi mnie z b\u0142\u0119du. Je\u015bli jeste\u015bcie ciekawi co dok\u0142adnie si\u0119 zmieni\u0142o, to w \u017ar\u00f3d\u0142ach znajdziecie notk\u0119 towarzysz\u0105c\u0105 wydaniu.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"480\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-3.gif\" alt=\"\" class=\"wp-image-5385\"\/><figcaption>Autor frontendowego czwartku w momencie jego publikacji, otrzymuj\u0105cy wiadomo\u015bci, dlaczego fastify v4 to najlepsze co przytrafi\u0142o si\u0119 ludzko\u015bci<\/figcaption><\/figure><\/div>\n\n\n<p>PS: Je\u015bli do tej pory o fastify nie s\u0142yszeli\u015bcie, to polecam Wam <a href=\"https:\/\/medium.com\/@fastifyjs\/fastify-v4-ga-59f2103b5f0e\">ten artyku\u0142<\/a>, z kt\u00f3rego dowiecie si\u0119 dlaczego szybko powinni\u015bcie nadrobi\u0107 braki i dlaczego express jest ju\u017c pie\u015bni\u0105 przesz\u0142o\u015bci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/medium.com\/@fastifyjs\/fastify-v4-ga-59f2103b5f0e\">https:\/\/medium.com\/@fastifyjs\/fastify-v4-ga-59f2103b5f0e<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Mam nadziej\u0119, \u017ce d\u0142ugi weekend up\u0142ywa Wam pod znakiem odpoczynku. Je\u015bli w przerwie mi\u0119dzy grillowaniem i popijaniem drink\u00f3w macie ochot\u0119 na odrobin\u0119 frontendowych nowo\u015bci, to b\u0119dziemy tutaj czeka\u0107. W tym tygodniu obrodzi\u0142o w drobne wydania ciekawych bibliotek, wi\u0119c naprawd\u0119 warto!<\/p>\n","protected":false},"author":12,"featured_media":8723,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[],"class_list":["post-9956","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl"],"acf":{"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png","feature_image_visible":false,"estimated_reading_time":"5","feature_image_blog":{"ID":8724,"id":8724,"title":"pexels-photo-533325","filename":"pexels-photo-533325.jpeg","filesize":123111,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/pexels-photo-533325.jpeg","link":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/pexels-photo-533325-2\/","alt":"","author":"12","description":"","caption":"","name":"pexels-photo-533325-2","status":"inherit","uploaded_to":9956,"date":"2022-06-16 08:32:31","modified":"2022-06-16 08:32:31","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1175,"height":750,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/pexels-photo-533325-150x150.jpeg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/pexels-photo-533325-300x191.jpeg","medium-width":300,"medium-height":191,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/pexels-photo-533325-768x490.jpeg","medium_large-width":768,"medium_large-height":490,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/pexels-photo-533325-1024x654.jpeg","large-width":1024,"large-height":654,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/pexels-photo-533325.jpeg","1536x1536-width":1175,"1536x1536-height":750,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/pexels-photo-533325.jpeg","2048x2048-width":1175,"2048x2048-height":750,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/pexels-photo-533325.jpeg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":191,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/pexels-photo-533325.jpeg","gform-image-choice-md-width":400,"gform-image-choice-md-height":255,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/pexels-photo-533325.jpeg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":383}}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Frontend Thursday vol. 92 - Reassure, JoyUI, Components Encyclopedia - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Frontend Thursday vol. 92 - Reassure, JoyUI, Components Encyclopedia - Vived\" \/>\n<meta property=\"og:description\" content=\"Mam nadziej\u0119, \u017ce d\u0142ugi weekend up\u0142ywa Wam pod znakiem odpoczynku. Je\u015bli w przerwie mi\u0119dzy grillowaniem i popijaniem drink\u00f3w macie ochot\u0119 na odrobin\u0119 frontendowych nowo\u015bci, to b\u0119dziemy tutaj czeka\u0107. W tym tygodniu obrodzi\u0142o w drobne wydania ciekawych bibliotek, wi\u0119c naprawd\u0119 warto!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-16T08:48:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:16:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tomasz Borowicz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Frontend Thursday vol. 92 &#8211; Reassure, JoyUI, Components Encyclopedia\",\"datePublished\":\"2022-06-16T08:48:47+00:00\",\"dateModified\":\"2022-09-19T11:16:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/\"},\"wordCount\":1009,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png\",\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/\",\"url\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/\",\"name\":\"Frontend Thursday vol. 92 - Reassure, JoyUI, Components Encyclopedia - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png\",\"datePublished\":\"2022-06-16T08:48:47+00:00\",\"dateModified\":\"2022-09-19T11:16:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend Thursday vol. 92 &#8211; Reassure, JoyUI, Components Encyclopedia\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\",\"name\":\"Tomasz Borowicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"caption\":\"Tomasz Borowicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Frontend Thursday vol. 92 - Reassure, JoyUI, Components Encyclopedia - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/","og_locale":"pl_PL","og_type":"article","og_title":"Frontend Thursday vol. 92 - Reassure, JoyUI, Components Encyclopedia - Vived","og_description":"Mam nadziej\u0119, \u017ce d\u0142ugi weekend up\u0142ywa Wam pod znakiem odpoczynku. Je\u015bli w przerwie mi\u0119dzy grillowaniem i popijaniem drink\u00f3w macie ochot\u0119 na odrobin\u0119 frontendowych nowo\u015bci, to b\u0119dziemy tutaj czeka\u0107. W tym tygodniu obrodzi\u0142o w drobne wydania ciekawych bibliotek, wi\u0119c naprawd\u0119 warto!","og_url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/","og_site_name":"Vived","article_published_time":"2022-06-16T08:48:47+00:00","article_modified_time":"2022-09-19T11:16:27+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png","type":"image\/png"}],"author":"Tomasz Borowicz","twitter_card":"summary_large_image","twitter_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Frontend Thursday vol. 92 &#8211; Reassure, JoyUI, Components Encyclopedia","datePublished":"2022-06-16T08:48:47+00:00","dateModified":"2022-09-19T11:16:27+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/"},"wordCount":1009,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png","articleSection":["Frontend"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/","url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/","name":"Frontend Thursday vol. 92 - Reassure, JoyUI, Components Encyclopedia - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png","datePublished":"2022-06-16T08:48:47+00:00","dateModified":"2022-09-19T11:16:27+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/FRONTEND-2.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-92-reassure-joyui-components-encyclopedia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Frontend Thursday vol. 92 &#8211; Reassure, JoyUI, Components Encyclopedia"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb","name":"Tomasz Borowicz","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","caption":"Tomasz Borowicz"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1. Reassure - testy wydajno\u015bci komponent\u00f3w zrobione dobrze<\/h2>\n","innerContent":["\n<h2>1. Reassure - testy wydajno\u015bci komponent\u00f3w zrobione dobrze<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na pewno chocia\u017c raz zdarzy\u0142o Wam si\u0119 optymalizowa\u0107 niewydajny komponent. Je\u015bli macie szcz\u0119\u015bcie, to proces ten zacz\u0105\u0142 si\u0119 od wykrycia regresji w Lighthouse odpalanym na continuous integration. Je\u015bli macie troch\u0119 mniej szcz\u0119\u015bcie, to s\u0142aba wydajno\u015b\u0107 zosta\u0142a zg\u0142oszona przez manualnych tester\u00f3w, lub co gorsza u\u017cytkownik\u00f3w. W tym momencie zwykle zaczyna si\u0119 praca pod presj\u0105 czasu. Najpierw szukamy zepsutego komponentu, potem pracujemy nad szybk\u0105 napraw\u0105 i czym pr\u0119dzej robimy release. Co bardziej skrupulatni do Pull Requesta do\u0142\u0105cz\u0105 screenshot z wynikami Lighthouse. W znacz\u0105cej wi\u0119kszo\u015bci przypadk\u00f3w pod presj\u0105 czasu zabraknie nawet tego - nie m\u00f3wi\u0105c ju\u017c o dodaniu test\u00f3w regresji, czy przygotowaniu dok\u0142adnego raportu na temat wydajno\u015bci. A co, je\u015bli powiedzia\u0142bym Wam, \u017ce mo\u017cemy unikn\u0105\u0107 podobnych regresji wydajno\u015bci?\u00a0<\/p>\n","innerContent":["\n<p>Na pewno chocia\u017c raz zdarzy\u0142o Wam si\u0119 optymalizowa\u0107 niewydajny komponent. Je\u015bli macie szcz\u0119\u015bcie, to proces ten zacz\u0105\u0142 si\u0119 od wykrycia regresji w Lighthouse odpalanym na continuous integration. Je\u015bli macie troch\u0119 mniej szcz\u0119\u015bcie, to s\u0142aba wydajno\u015b\u0107 zosta\u0142a zg\u0142oszona przez manualnych tester\u00f3w, lub co gorsza u\u017cytkownik\u00f3w. W tym momencie zwykle zaczyna si\u0119 praca pod presj\u0105 czasu. Najpierw szukamy zepsutego komponentu, potem pracujemy nad szybk\u0105 napraw\u0105 i czym pr\u0119dzej robimy release. Co bardziej skrupulatni do Pull Requesta do\u0142\u0105cz\u0105 screenshot z wynikami Lighthouse. W znacz\u0105cej wi\u0119kszo\u015bci przypadk\u00f3w pod presj\u0105 czasu zabraknie nawet tego - nie m\u00f3wi\u0105c ju\u017c o dodaniu test\u00f3w regresji, czy przygotowaniu dok\u0142adnego raportu na temat wydajno\u015bci. A co, je\u015bli powiedzia\u0142bym Wam, \u017ce mo\u017cemy unikn\u0105\u0107 podobnych regresji wydajno\u015bci?\u00a0<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5380,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-2.jpeg\" alt=\"\" class=\"wp-image-5380\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-2.jpeg\" alt=\"\" class=\"wp-image-5380\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Reassure, to nowa biblioteka do pisania test\u00f3w wydajno\u015bci Reactowych komponent\u00f3w. Jej API mocno przypomina to znane z k6 - narz\u0119dzie do tworzenia test\u00f3w wydajno\u015bci REST-owych serwis\u00f3w. Zaczynamy od definicji scenariusza interakcji z komponentem, a nast\u0119pnie odpowiednio konfigurujemy test runner (liczba p\u0119tli itp.). Potem zostaje ju\u017c tylko odpali\u0107 test i obserwowa\u0107 wyniki.<\/p>\n","innerContent":["\n<p>Reassure, to nowa biblioteka do pisania test\u00f3w wydajno\u015bci Reactowych komponent\u00f3w. Jej API mocno przypomina to znane z k6 - narz\u0119dzie do tworzenia test\u00f3w wydajno\u015bci REST-owych serwis\u00f3w. Zaczynamy od definicji scenariusza interakcji z komponentem, a nast\u0119pnie odpowiednio konfigurujemy test runner (liczba p\u0119tli itp.). Potem zostaje ju\u017c tylko odpali\u0107 test i obserwowa\u0107 wyniki.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">test('Count increments on press', async () => {\n  const scenario = async (screen: RenderAPI) => {\n    const button = screen.getByText('Action');\n    \n    await screen.findByText('Count: 0\u2019);\n    fireEvent.press(button);\n    fireEvent.press(button);\n    await screen.findByText('Count: 2');\n  };\n\n  const stats = await measureRender(\n    &lt;Counter \/>, \n    { scenario, runs: 20 }\n  );\n  await writeTestStats(stats);\n});<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">test('Count increments on press', async () => {\n  const scenario = async (screen: RenderAPI) => {\n    const button = screen.getByText('Action');\n    \n    await screen.findByText('Count: 0\u2019);\n    fireEvent.press(button);\n    fireEvent.press(button);\n    await screen.findByText('Count: 2');\n  };\n\n  const stats = await measureRender(\n    &lt;Counter \/>, \n    { scenario, runs: 20 }\n  );\n  await writeTestStats(stats);\n});<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Reassure b\u0119dzie mo\u017cna wpi\u0105\u0107 w pipeline continuous integration i zdefiniowa\u0107 bud\u017cety wydajno\u015bciowe lub por\u00f3wnywa\u0107 wyniki z poprzednimi wersjami komponentu. Zak\u0142adaj\u0105c wysokie pokrycie testami, o spadku wydajno\u015bci dowiemy si\u0119 ju\u017c z PR wprowadzaj\u0105cego regresj\u0105. Ponadto continuous integration od razu wska\u017ce nam zepsuty komponent, a winowajc\u00f3w szuka\u0107 b\u0119dziemy tylko w kodzie z danego Pull Request<\/p>\n","innerContent":["\n<p>Reassure b\u0119dzie mo\u017cna wpi\u0105\u0107 w pipeline continuous integration i zdefiniowa\u0107 bud\u017cety wydajno\u015bciowe lub por\u00f3wnywa\u0107 wyniki z poprzednimi wersjami komponentu. Zak\u0142adaj\u0105c wysokie pokrycie testami, o spadku wydajno\u015bci dowiemy si\u0119 ju\u017c z PR wprowadzaj\u0105cego regresj\u0105. Ponadto continuous integration od razu wska\u017ce nam zepsuty komponent, a winowajc\u00f3w szuka\u0107 b\u0119dziemy tylko w kodzie z danego Pull Request<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5381,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-1-1.jpeg\" alt=\"\" class=\"wp-image-5381\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-1-1.jpeg\" alt=\"\" class=\"wp-image-5381\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W przedstawionej w poprzednich akapitach beczce miodu jest jednak \u0142y\u017cka dziegciu - wysokie pokrycie testami wydajno\u015bci. Koszt pisania i utrzymywania du\u017cej ilo\u015bci test\u00f3w mo\u017ce okaza\u0107 si\u0119 naprawd\u0119 wysoki. Mimo wszystko dla Reassure widz\u0119 sporo zastosowa\u0144. Zazwyczaj w aplikacji mo\u017cemy wyznaczy\u0107 krytyczne komponenty i to stworzy\u0107 testy tylko dla nich. Ponadto licz\u0119 te\u017c, \u017ce Reassure stanie si\u0119 moim bazowym narz\u0119dziem do pracy nad optymalizacj\u0105. U\u017cywanie skomplikowanych DevTools i manualne wyklikiwanie flow u\u017cytkownika nie s\u0105 ani najbardziej optymalnym, ani najbardziej reprodukowanym sposobem mierzenia wydajno\u015bci.<\/p>\n","innerContent":["\n<p>W przedstawionej w poprzednich akapitach beczce miodu jest jednak \u0142y\u017cka dziegciu - wysokie pokrycie testami wydajno\u015bci. Koszt pisania i utrzymywania du\u017cej ilo\u015bci test\u00f3w mo\u017ce okaza\u0107 si\u0119 naprawd\u0119 wysoki. Mimo wszystko dla Reassure widz\u0119 sporo zastosowa\u0144. Zazwyczaj w aplikacji mo\u017cemy wyznaczy\u0107 krytyczne komponenty i to stworzy\u0107 testy tylko dla nich. Ponadto licz\u0119 te\u017c, \u017ce Reassure stanie si\u0119 moim bazowym narz\u0119dziem do pracy nad optymalizacj\u0105. U\u017cywanie skomplikowanych DevTools i manualne wyklikiwanie flow u\u017cytkownika nie s\u0105 ani najbardziej optymalnym, ani najbardziej reprodukowanym sposobem mierzenia wydajno\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na ten moment Reassure jest w zamkni\u0119tej becie, ale w najbli\u017cszych tygodniach projekt ma przej\u015b\u0107 na model Open Source. Mocno trzymam kciuki, zw\u0142aszcza, \u017ce za bibliotek\u0105 stoi polski software house callstack (je\u015bli kt\u00f3ry\u015b z autor\u00f3w biblioteki to czyta - dobra robota!).<\/p>\n","innerContent":["\n<p>Na ten moment Reassure jest w zamkni\u0119tej becie, ale w najbli\u017cszych tygodniach projekt ma przej\u015b\u0107 na model Open Source. Mocno trzymam kciuki, zw\u0142aszcza, \u017ce za bibliotek\u0105 stoi polski software house callstack (je\u015bli kt\u00f3ry\u015b z autor\u00f3w biblioteki to czyta - dobra robota!).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5382,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-3.jpeg\" alt=\"\" class=\"wp-image-5382\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-3.jpeg\" alt=\"\" class=\"wp-image-5382\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/www.callstack.com\/open-source\/reassure\">https:\/\/www.callstack.com\/open-source\/reassure<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/www.callstack.com\/open-source\/reassure\">https:\/\/www.callstack.com\/open-source\/reassure<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Joy UI - Material UI bez Material Design<\/h2>\n","innerContent":["\n<h2>2. Joy UI - Material UI bez Material Design<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>MUI (dawniej Material UI), to chyba najpopularniejsza biblioteka komponent\u00f3w dla Reacta. Jej najwi\u0119ksz\u0105 wad\u0105 (i r\u00f3wnocze\u015bnie zalet\u0105) jest implementacja j\u0119zyka projektowania Material Design (kocham te spolszczenia \u2764\ufe0f). Tak d\u0142ugo jak interesowa\u0142o Was pod\u0105\u017canie za wytycznymi Google, Material UI sprawdza\u0142 si\u0119 doskonale. Niestety kiedy interesowa\u0142o nas stworzenie w\u0142asnej biblioteki komponent\u00f3w czeka\u0142a nas droga przez m\u0119k\u0119. By\u0142o to mo\u017cliwe, ale ilo\u015b\u0107 tworzonej konfiguracji nakazywa\u0142a pow\u0105tpiewa\u0107, czy na pewno jest to dobra droga.<\/p>\n","innerContent":["\n<p>MUI (dawniej Material UI), to chyba najpopularniejsza biblioteka komponent\u00f3w dla Reacta. Jej najwi\u0119ksz\u0105 wad\u0105 (i r\u00f3wnocze\u015bnie zalet\u0105) jest implementacja j\u0119zyka projektowania Material Design (kocham te spolszczenia \u2764\ufe0f). Tak d\u0142ugo jak interesowa\u0142o Was pod\u0105\u017canie za wytycznymi Google, Material UI sprawdza\u0142 si\u0119 doskonale. Niestety kiedy interesowa\u0142o nas stworzenie w\u0142asnej biblioteki komponent\u00f3w czeka\u0142a nas droga przez m\u0119k\u0119. By\u0142o to mo\u017cliwe, ale ilo\u015b\u0107 tworzonej konfiguracji nakazywa\u0142a pow\u0105tpiewa\u0107, czy na pewno jest to dobra droga.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Joy UI ma by\u0107 Material UI, ale bez Material Design. Patrz\u0105c na API obie biblioteki wygl\u0105daj\u0105 wr\u0119cz bli\u017aniaczo podobnie. Mamy tu wi\u0119c do czynienia z wszystkim co najlepsze w Material UI (API, Acessability) bez tego co nadmiarowe (Material Design).<\/p>\n","innerContent":["\n<p>Joy UI ma by\u0107 Material UI, ale bez Material Design. Patrz\u0105c na API obie biblioteki wygl\u0105daj\u0105 wr\u0119cz bli\u017aniaczo podobnie. Mamy tu wi\u0119c do czynienia z wszystkim co najlepsze w Material UI (API, Acessability) bez tego co nadmiarowe (Material Design).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"xml"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-xml\">&lt;Box sx={{\n   p: 2,\n   pb: 1,\n   display: 'flex',\n   alignItems: 'center',\n   justifyContent: 'space-between         \n}}>\n  &lt;Typography\n    fontSize=\"xs2\"\n    textColor=\"text.tertiary\"\n    textTransform=\"uppercase\"\n    letterSpacing=\"md\"\n    fontWeight=\"lg\"\n  >\n  Filter by\n  &lt;\/Typography>\n  &lt;Button size=\"sm\" variant=\"plain\" sx={{ fontSize: 'xs', px: 1 }}>\n    Clear filters\n  &lt;\/Button>\n&lt;\/Box>\n<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-xml\">&lt;Box sx={{\n   p: 2,\n   pb: 1,\n   display: 'flex',\n   alignItems: 'center',\n   justifyContent: 'space-between         \n}}>\n  &lt;Typography\n    fontSize=\"xs2\"\n    textColor=\"text.tertiary\"\n    textTransform=\"uppercase\"\n    letterSpacing=\"md\"\n    fontWeight=\"lg\"\n  >\n  Filter by\n  &lt;\/Typography>\n  &lt;Button size=\"sm\" variant=\"plain\" sx={{ fontSize: 'xs', px: 1 }}>\n    Clear filters\n  &lt;\/Button>\n&lt;\/Box>\n<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Niestety Joy UI, na razie jest we wczesnej alfie i stabilnego wydania ma doczeka\u0107 si\u0119 dopiero w drugiej po\u0142owie 2022. Ja czekam niecierpliwie, bo nie tak dawno rozwa\u017cali\u015bmy u\u017cycie MUI w jednym z projekt\u00f3w, ale ostatecznie z niego zrezygnowali\u015bmy w\u0142a\u015bnie przez trudno\u015b\u0107 z nadpisaniem zachowa\u0144 zdefiniowanych w Material Design.<\/p>\n","innerContent":["\n<p>Niestety Joy UI, na razie jest we wczesnej alfie i stabilnego wydania ma doczeka\u0107 si\u0119 dopiero w drugiej po\u0142owie 2022. Ja czekam niecierpliwie, bo nie tak dawno rozwa\u017cali\u015bmy u\u017cycie MUI w jednym z projekt\u00f3w, ale ostatecznie z niego zrezygnowali\u015bmy w\u0142a\u015bnie przez trudno\u015b\u0107 z nadpisaniem zachowa\u0144 zdefiniowanych w Material Design.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5383,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-2-1.jpeg\" alt=\"\" class=\"wp-image-5383\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/download-2-1.jpeg\" alt=\"\" class=\"wp-image-5383\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/mui.com\/blog\/first-look-at-joy\/\">https:\/\/mui.com\/blog\/first-look-at-joy\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/mui.com\/blog\/first-look-at-joy\/\">https:\/\/mui.com\/blog\/first-look-at-joy\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Encyklopedia komponent\u00f3w od Storybook<\/h2>\n","innerContent":["\n<h2>3. Encyklopedia komponent\u00f3w od Storybook<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wzmianki o Storybooku pojawiaj\u0105 si\u0119 w naszych przegl\u0105dach dosy\u0107 regularnie i ju\u017c nie raz wspomina\u0142em, \u017ce osoba odpowiedzialna za ich marketing powinna dosta\u0107 podwy\u017ck\u0119 (statystycznie cz\u0119\u015bciej pisz\u0119 o Storybook, ni\u017c o React!). W tym tygodniu firma og\u0142osi\u0142a powstanie wielkiej encyklopedii komponent\u00f3w i ponownie informacja ta rozesz\u0142a si\u0119 po frontendowym internecie dosy\u0107 szeroko.&nbsp;<\/p>\n","innerContent":["\n<p>Wzmianki o Storybooku pojawiaj\u0105 si\u0119 w naszych przegl\u0105dach dosy\u0107 regularnie i ju\u017c nie raz wspomina\u0142em, \u017ce osoba odpowiedzialna za ich marketing powinna dosta\u0107 podwy\u017ck\u0119 (statystycznie cz\u0119\u015bciej pisz\u0119 o Storybook, ni\u017c o React!). W tym tygodniu firma og\u0142osi\u0142a powstanie wielkiej encyklopedii komponent\u00f3w i ponownie informacja ta rozesz\u0142a si\u0119 po frontendowym internecie dosy\u0107 szeroko.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W encyklopedii zebranych zosta\u0142o ponad 5000 komponent\u00f3w, w tym cz\u0119\u015b\u0107 od takich firm jak GitHub, BBC czy Audi. Spora cz\u0119\u015b\u0107 z zebranych komponent\u00f3w linkuje r\u00f3wnie\u017c kod \u017ar\u00f3d\u0142owy. Je\u015bli kiedy\u015b b\u0119dziecie szuka\u0107\u00a0 inspiracji, czy to wizualnych, czy nazewniczych, to ju\u017c wiecie gdzie szuka\u0107.<\/p>\n","innerContent":["\n<p>W encyklopedii zebranych zosta\u0142o ponad 5000 komponent\u00f3w, w tym cz\u0119\u015b\u0107 od takich firm jak GitHub, BBC czy Audi. Spora cz\u0119\u015b\u0107 z zebranych komponent\u00f3w linkuje r\u00f3wnie\u017c kod \u017ar\u00f3d\u0142owy. Je\u015bli kiedy\u015b b\u0119dziecie szuka\u0107\u00a0 inspiracji, czy to wizualnych, czy nazewniczych, to ju\u017c wiecie gdzie szuka\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5384,"width":-196,"height":-138,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/image-1024x722.webp\" alt=\"\" class=\"wp-image-5384\" width=\"-196\" height=\"-138\"\/><figcaption>M\u00f3wcie co chcecie, ale je\u015bli to prawdziwa encyklopedia, to ja czekam na wydanie papierowe<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/image-1024x722.webp\" alt=\"\" class=\"wp-image-5384\" width=\"-196\" height=\"-138\"\/><figcaption>M\u00f3wcie co chcecie, ale je\u015bli to prawdziwa encyklopedia, to ja czekam na wydanie papierowe<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W minionym tygodniu na blogu Storybooka ukaza\u0142 si\u0119 jeszcze jeden bardzo ciekawy wpis - <a href=\"https:\/\/storybook.js.org\/blog\/why-most-design-systems-implode\/\">kr\u00f3tki wywiad z Bradem Frostem<\/a>. W artykule tw\u00f3rca Atomic Design dzieli si\u0119 z nami jego odpowiedzi\u0105 na pytanie: dlaczego wi\u0119kszo\u015b\u0107 pr\u00f3b stworzenia design systemu ko\u0144czy si\u0119 fiaskiem. Je\u015bli szukacie kr\u00f3tkiej, ale ciekawej lektury na d\u0142ugi weekend to mocno polecam.<\/p>\n","innerContent":["\n<p>W minionym tygodniu na blogu Storybooka ukaza\u0142 si\u0119 jeszcze jeden bardzo ciekawy wpis - <a href=\"https:\/\/storybook.js.org\/blog\/why-most-design-systems-implode\/\">kr\u00f3tki wywiad z Bradem Frostem<\/a>. W artykule tw\u00f3rca Atomic Design dzieli si\u0119 z nami jego odpowiedzi\u0105 na pytanie: dlaczego wi\u0119kszo\u015b\u0107 pr\u00f3b stworzenia design systemu ko\u0144czy si\u0119 fiaskiem. Je\u015bli szukacie kr\u00f3tkiej, ale ciekawej lektury na d\u0142ugi weekend to mocno polecam.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/storybook.js.org\/blog\/component-encyclopedia\/\">https:\/\/storybook.js.org\/blog\/component-encyclopedia\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/storybook.js.org\/blog\/component-encyclopedia\/\">https:\/\/storybook.js.org\/blog\/component-encyclopedia\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>4. Fastify v4<\/h2>\n","innerContent":["\n<h2>4. Fastify v4<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pomimo tego, \u017ce pras\u00f3wka ta nazywa si\u0119 \u201cFrontend Thursday\u201d, to staram si\u0119 tutaj r\u00f3wnie\u017c przemyca\u0107 najwa\u017cniejsze nowo\u015bci z backendowej cz\u0119\u015bci JavaScriptu. Podobnie b\u0119dzie i tym razem, bo kilka dni temu doczekali\u015bmy si\u0119 fastify 4.0. Na now\u0105 wersj\u0119 biblioteki\u00a0 czekali\u015bmy prawie 2 lata i niestety nie doczekali\u015bmy si\u0119 wi\u0119kszych rewolucji. Nowo\u015bci to z mojej perspektywy przede wszystkim drobne usprawnienia, ale licz\u0119 na to, \u017ce kto\u015b wyprowadzi mnie z b\u0142\u0119du. Je\u015bli jeste\u015bcie ciekawi co dok\u0142adnie si\u0119 zmieni\u0142o, to w \u017ar\u00f3d\u0142ach znajdziecie notk\u0119 towarzysz\u0105c\u0105 wydaniu.<\/p>\n","innerContent":["\n<p>Pomimo tego, \u017ce pras\u00f3wka ta nazywa si\u0119 \u201cFrontend Thursday\u201d, to staram si\u0119 tutaj r\u00f3wnie\u017c przemyca\u0107 najwa\u017cniejsze nowo\u015bci z backendowej cz\u0119\u015bci JavaScriptu. Podobnie b\u0119dzie i tym razem, bo kilka dni temu doczekali\u015bmy si\u0119 fastify 4.0. Na now\u0105 wersj\u0119 biblioteki\u00a0 czekali\u015bmy prawie 2 lata i niestety nie doczekali\u015bmy si\u0119 wi\u0119kszych rewolucji. Nowo\u015bci to z mojej perspektywy przede wszystkim drobne usprawnienia, ale licz\u0119 na to, \u017ce kto\u015b wyprowadzi mnie z b\u0142\u0119du. Je\u015bli jeste\u015bcie ciekawi co dok\u0142adnie si\u0119 zmieni\u0142o, to w \u017ar\u00f3d\u0142ach znajdziecie notk\u0119 towarzysz\u0105c\u0105 wydaniu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":5385,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-3.gif\" alt=\"\" class=\"wp-image-5385\"\/><figcaption>Autor frontendowego czwartku w momencie jego publikacji, otrzymuj\u0105cy wiadomo\u015bci, dlaczego fastify v4 to najlepsze co przytrafi\u0142o si\u0119 ludzko\u015bci<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-3.gif\" alt=\"\" class=\"wp-image-5385\"\/><figcaption>Autor frontendowego czwartku w momencie jego publikacji, otrzymuj\u0105cy wiadomo\u015bci, dlaczego fastify v4 to najlepsze co przytrafi\u0142o si\u0119 ludzko\u015bci<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>PS: Je\u015bli do tej pory o fastify nie s\u0142yszeli\u015bcie, to polecam Wam <a href=\"https:\/\/medium.com\/@fastifyjs\/fastify-v4-ga-59f2103b5f0e\">ten artyku\u0142<\/a>, z kt\u00f3rego dowiecie si\u0119 dlaczego szybko powinni\u015bcie nadrobi\u0107 braki i dlaczego express jest ju\u017c pie\u015bni\u0105 przesz\u0142o\u015bci.<\/p>\n","innerContent":["\n<p>PS: Je\u015bli do tej pory o fastify nie s\u0142yszeli\u015bcie, to polecam Wam <a href=\"https:\/\/medium.com\/@fastifyjs\/fastify-v4-ga-59f2103b5f0e\">ten artyku\u0142<\/a>, z kt\u00f3rego dowiecie si\u0119 dlaczego szybko powinni\u015bcie nadrobi\u0107 braki i dlaczego express jest ju\u017c pie\u015bni\u0105 przesz\u0142o\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/medium.com\/@fastifyjs\/fastify-v4-ga-59f2103b5f0e\">https:\/\/medium.com\/@fastifyjs\/fastify-v4-ga-59f2103b5f0e<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/medium.com\/@fastifyjs\/fastify-v4-ga-59f2103b5f0e\">https:\/\/medium.com\/@fastifyjs\/fastify-v4-ga-59f2103b5f0e<\/a><\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9956","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=9956"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9956\/revisions"}],"predecessor-version":[{"id":10482,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9956\/revisions\/10482"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/8723"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=9956"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=9956"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=9956"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}