{"id":10075,"date":"2021-09-30T16:17:27","date_gmt":"2021-09-30T14:17:27","guid":{"rendered":"https:\/\/vived.io\/frontend-thursday-vol-57\/"},"modified":"2022-09-19T13:16:37","modified_gmt":"2022-09-19T11:16:37","slug":"frontend-thursday-vol-57","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/","title":{"rendered":"Frontend Thursday vol. 57"},"content":{"rendered":"\n<h2 id=\"1-chrome-przestanie-wspierac-wtyczki-oparte-o-manifest-v2\" data-num=1>1. Chrome przestanie wspiera\u0107 wtyczki oparte o Manifest V2<\/h2>\n\n\n\n<p>Zacznijmy od kr\u00f3tkiego wst\u0119pu dla wszystkich, kt\u00f3rzy nigdy nie byli zaanga\u017cowani w rozw\u00f3j wtyczek do przegl\u0105darek. Manifest V2 to w sporym uproszczeniu zbi\u00f3r API do tworzenia wtyczek dla Chrome. Ze wzgl\u0119du na problemy z bezpiecze\u0144stwem rozwi\u0105zania Google zdecydowa\u0142 si\u0119 porzuci\u0107 ten format i zaimplementowa\u0142 ponad rok temu Manifest V3.<\/p>\n\n\n\n<p>W minionym tygodniu gigant z Mountain View og\u0142osi\u0142, \u017ce w styczniu 2022 zablokuje mo\u017cliwo\u015b\u0107 dodawania do Chrome Web Store wtyczek opartych o Manifest V2, a od stycznia 2023 Chrome ca\u0142kowicie usunie ich wsparcie. Temat wsparcia Manifest V2\u00a0 ju\u017c od dawna jest tematem spor\u00f3w mi\u0119dzy tw\u00f3rcami wtyczek a Google. Ci pierwsi twierdz\u0105, \u017ce Manifest V3 jest niekompletny i zbugowany, natomiast ci drudzy usilnie powo\u0142uj\u0105 si\u0119 na argument poprawy bezpiecze\u0144stwa u\u017cytkownika. S\u0105 nawet tacy (na was patrz\u0119 uBlock), kt\u00f3rzy zarzucaj\u0105 Googlowi celowy atak na blokery reklam w celu optymalizacji przychod\u00f3w.<\/p>\n\n\n\n<p>W zaistnia\u0142ym sporze wyj\u0105tkowo rzadko wspomina si\u0119, \u017ce Manifest V3 wspierany jest r\u00f3wnie\u017c przez Firefoxa i Safari, a za jego rozw\u00f3j obecnie odpowiedzialna jest grupa W3C WebExtensions Community Group, a nie sam Google. Brak niekt\u00f3rych API mo\u017ce by\u0107 wi\u0119c pok\u0142osiem nie z\u0142ej woli kt\u00f3rej\u015b ze stron, a poszukiwa\u0144 wsp\u00f3lnego mianownika, na kt\u00f3rego zgodz\u0105 si\u0119 wszyscy zainteresowani\u00a0 Standaryzacja potrafi by\u0107 bolesna, ale czasem warto zacisn\u0105\u0107 troch\u0119 z\u0119by.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/giphy-1.gif\" alt=\"\" class=\"wp-image-2697\" width=\"402\" height=\"302\"\/><figcaption>Ach te internetowe dramy \ud83d\ude01<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/www.theregister.com\/2021\/09\/27\/google_chrome_manifest_v2_extensions\/\">https:\/\/www.theregister.com\/2021\/09\/27\/google_chrome_manifest_v2_extensions\/<\/a><\/p>\n\n\n\n<h2 id=\"2-czy-skladnia-when-else-trafi-do-standardu-css\" data-num=2>2. Czy sk\u0142adnia when-else trafi do standardu CSS ?<\/h2>\n\n\n\n<p>Lubicie sk\u0142adni\u0119 media-queries? Ja te\u017c nie \ud83d\ude09. Za ka\u017cdym razem, kiedy patrz\u0119 na style zale\u017cne od wielko\u015bci ekranu musz\u0119 po\u015bwi\u0119ci\u0107 chwil\u0119 na zrozumienie, co si\u0119 w\u0142a\u015bciwie dzieje. Na ten problem maj\u0105 odpowiada\u0107 zaproponowane przez CSS Working Group @when i @else. Sk\u0142adnia jest znacznie czytelniejsza od obecnego rozwi\u0105zania, ale zanim trafi do przegl\u0105darek czeka j\u0105 jeszcze niestety d\u0142uga droga.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">@when media(width &gt;= 400px) and media(pointer: fine) and supports(display: flex) {\n  \/* A *\/\n} @else supports(caret-color: pink) and supports(background: double-rainbow()) {\n  \/* B *\/\n} @else {\n  \/* C *\/\n}<\/code><\/pre>\n\n\n\n<p>W ramach prac nad draftem wszcz\u0119\u0142a si\u0119 r\u00f3wnie\u017c ciekawa dyskusja dotycz\u0105ca projektowania nowych funkcjonalno\u015bci dla weba. Dla wi\u0119kszo\u015bci programist\u00f3w domy\u015bln\u0105 sk\u0142adni\u0105 jest if-else, a nie when-else. Niestety nie zdecydowano si\u0119 na pierwszy wariant ze wzgl\u0119du na istnienie operatora @if w Sass, kt\u00f3ry jest obecnie najpopularniejszym prepocesorem css\u00f3w. Internet podzieli\u0142 si\u0119 na dwa obozy: tych kt\u00f3rzy uwa\u017caj\u0105, \u017ce nowe funkcje powinny dobrze integrowa\u0107 si\u0119 z istniej\u0105cym ekosystemem i tych kt\u00f3rzy uwa\u017caj\u0105, \u017ce zale\u017cno\u015bci stron trzecich nie powinny wp\u0142ywa\u0107 na podejmowane decyzje.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/css-tricks.com\/proposal-for-css-when\/\">https:\/\/css-tricks.com\/proposal-for-css-when\/<\/a><br><a href=\"https:\/\/github.com\/w3ctag\/design-principles\/issues\/335\">https:\/\/github.com\/w3ctag\/design-principles\/issues\/335<\/a><br><a href=\"https:\/\/tabatkins.github.io\/specs\/css-when-else\/\">https:\/\/tabatkins.github.io\/specs\/css-when-else\/<\/a><\/p>\n\n\n\n<h2 id=\"3-flexbox-wspiera-gap-property\" data-num=3>3. Flexbox wspiera gap property<\/h2>\n\n\n\n<p>Prawdopodobnie kojarzycie property gap z CSS Grid Layout, ale czy wiecie, \u017ce ostatnimi czasy, troch\u0119 po cichu zosta\u0142o dodane wsparcie dla gap w Flexbox? Co prawda taki sam efekt mo\u017cna by\u0142o do tej pory osi\u0105gn\u0105\u0107 odpowiednio manipuluj\u0105c marginesami i paddingiem, ale nowa sk\u0142adnia znacznie poprawia czytelno\u015b\u0107.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">.container {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}<\/code><\/pre>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"348\" height=\"483\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-11.21.30.png\" alt=\"\" class=\"wp-image-2698\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-11.21.30.png 348w, https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-11.21.30-216x300.png 216w\" sizes=\"auto, (max-width: 348px) 100vw, 348px\" \/><\/figure><\/div>\n\n\n\n<p>Je\u015bli chcecie zag\u0142\u0119bi\u0107 si\u0119 w temat, to css-tricks przygotowa\u0142 \u015bwietny artyku\u0142 zag\u0142\u0119biaj\u0105cy si\u0119, w to jak dzia\u0142a gap w Flexbox i Grid Layout i dlaczego jest lepszy od konfiguracji margines\u00f3w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/css-tricks.com\/minding-the-gap\/\">https:\/\/css-tricks.com\/minding-the-gap\/<\/a><\/p>\n\n\n\n<h2 id=\"bonus-jak-powstal-quake-w-13kb-javascript\" data-num=4>Bonus: Jak powsta\u0142 Quake w 13kB JavaScript<\/h2>\n\n\n\n<p>Je\u015bli wydaje wam si\u0119, \u017ce ju\u017c gdzie\u015b widzieli\u015bcie Quake w 13kB JavaScript, to przeczucie Was nie myli. Ta kreatywna implementacja Quake pojawi\u0142a si\u0119 ju\u017c w naszym zesz\u0142otygodniowym przegl\u0105dzie, ale tw\u00f3rca gry opublikowa\u0142 blogpost dok\u0142adnie t\u0142umacz\u0105cy, jak uda\u0142o mu si\u0119 osi\u0105gn\u0105\u0107 tak ma\u0142\u0105 paczk\u0119. Je\u015bli t\u0119sknicie za niskopoziomowym kodem, albo po prostu lubicie hardcorowe optymalizacje, to b\u0119dzie dla Was idealny artyku\u0142 do popo\u0142udniowej kawy.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"281\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/giphy-3.gif\" alt=\"\" class=\"wp-image-2701\"\/><figcaption>Fun fact: Powy\u017cszy gif wa\u017cy znacznie wi\u0119cej ni\u017c ca\u0142a podlinkowana poni\u017cej implementacja Quake \ud83d\ude09<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/lunduke.substack.com\/p\/quake-in-13k-of-javascript\">https:\/\/lunduke.substack.com\/p\/quake-in-13k-of-javascript<\/a><br><a href=\"https:\/\/js13kgames.com\/entries\/q1k3\">https:\/\/js13kgames.com\/entries\/q1k3<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tym tygodniu mamy dla Was Chrome porzucaj\u0105cy wsparcie dla Manifest V2 i gar\u015b\u0107 CSS-owych nowo\u015bci.<\/p>\n","protected":false},"author":12,"featured_media":7716,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[],"class_list":["post-10075","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl"],"acf":{"estimated_reading_time":"3","weekly_summary":true},"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. 57 - 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-57\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Frontend Thursday vol. 57 - Vived\" \/>\n<meta property=\"og:description\" content=\"W tym tygodniu mamy dla Was Chrome porzucaj\u0105cy wsparcie dla Manifest V2 i gar\u015b\u0107 CSS-owych nowo\u015bci.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-30T14:17:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:16:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-16.12.16.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1005\" \/>\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<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Frontend Thursday vol. 57\",\"datePublished\":\"2021-09-30T14:17:27+00:00\",\"dateModified\":\"2022-09-19T11:16:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/\"},\"wordCount\":679,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-16.12.16.png\",\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/\",\"url\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/\",\"name\":\"Frontend Thursday vol. 57 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-16.12.16.png\",\"datePublished\":\"2021-09-30T14:17:27+00:00\",\"dateModified\":\"2022-09-19T11:16:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-16.12.16.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-16.12.16.png\",\"width\":1920,\"height\":1005},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend Thursday vol. 57\"}]},{\"@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. 57 - 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-57\/","og_locale":"pl_PL","og_type":"article","og_title":"Frontend Thursday vol. 57 - Vived","og_description":"W tym tygodniu mamy dla Was Chrome porzucaj\u0105cy wsparcie dla Manifest V2 i gar\u015b\u0107 CSS-owych nowo\u015bci.","og_url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/","og_site_name":"Vived","article_published_time":"2021-09-30T14:17:27+00:00","article_modified_time":"2022-09-19T11:16:37+00:00","og_image":[{"width":1920,"height":1005,"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-16.12.16.png","type":"image\/png"}],"author":"Tomasz Borowicz","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Frontend Thursday vol. 57","datePublished":"2021-09-30T14:17:27+00:00","dateModified":"2022-09-19T11:16:37+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/"},"wordCount":679,"commentCount":0,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-16.12.16.png","articleSection":["Frontend"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/","url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/","name":"Frontend Thursday vol. 57 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-16.12.16.png","datePublished":"2021-09-30T14:17:27+00:00","dateModified":"2022-09-19T11:16:37+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-16.12.16.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-16.12.16.png","width":1920,"height":1005},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-57\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Frontend Thursday vol. 57"}]},{"@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. Chrome przestanie wspiera\u0107 wtyczki oparte o Manifest V2<\/h2>\n","innerContent":["\n<h2>1. Chrome przestanie wspiera\u0107 wtyczki oparte o Manifest V2<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zacznijmy od kr\u00f3tkiego wst\u0119pu dla wszystkich, kt\u00f3rzy nigdy nie byli zaanga\u017cowani w rozw\u00f3j wtyczek do przegl\u0105darek. Manifest V2 to w sporym uproszczeniu zbi\u00f3r API do tworzenia wtyczek dla Chrome. Ze wzgl\u0119du na problemy z bezpiecze\u0144stwem rozwi\u0105zania Google zdecydowa\u0142 si\u0119 porzuci\u0107 ten format i zaimplementowa\u0142 ponad rok temu Manifest V3.<\/p>\n","innerContent":["\n<p>Zacznijmy od kr\u00f3tkiego wst\u0119pu dla wszystkich, kt\u00f3rzy nigdy nie byli zaanga\u017cowani w rozw\u00f3j wtyczek do przegl\u0105darek. Manifest V2 to w sporym uproszczeniu zbi\u00f3r API do tworzenia wtyczek dla Chrome. Ze wzgl\u0119du na problemy z bezpiecze\u0144stwem rozwi\u0105zania Google zdecydowa\u0142 si\u0119 porzuci\u0107 ten format i zaimplementowa\u0142 ponad rok temu Manifest V3.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W minionym tygodniu gigant z Mountain View og\u0142osi\u0142, \u017ce w styczniu 2022 zablokuje mo\u017cliwo\u015b\u0107 dodawania do Chrome Web Store wtyczek opartych o Manifest V2, a od stycznia 2023 Chrome ca\u0142kowicie usunie ich wsparcie. Temat wsparcia Manifest V2\u00a0 ju\u017c od dawna jest tematem spor\u00f3w mi\u0119dzy tw\u00f3rcami wtyczek a Google. Ci pierwsi twierdz\u0105, \u017ce Manifest V3 jest niekompletny i zbugowany, natomiast ci drudzy usilnie powo\u0142uj\u0105 si\u0119 na argument poprawy bezpiecze\u0144stwa u\u017cytkownika. S\u0105 nawet tacy (na was patrz\u0119 uBlock), kt\u00f3rzy zarzucaj\u0105 Googlowi celowy atak na blokery reklam w celu optymalizacji przychod\u00f3w.<\/p>\n","innerContent":["\n<p>W minionym tygodniu gigant z Mountain View og\u0142osi\u0142, \u017ce w styczniu 2022 zablokuje mo\u017cliwo\u015b\u0107 dodawania do Chrome Web Store wtyczek opartych o Manifest V2, a od stycznia 2023 Chrome ca\u0142kowicie usunie ich wsparcie. Temat wsparcia Manifest V2\u00a0 ju\u017c od dawna jest tematem spor\u00f3w mi\u0119dzy tw\u00f3rcami wtyczek a Google. Ci pierwsi twierdz\u0105, \u017ce Manifest V3 jest niekompletny i zbugowany, natomiast ci drudzy usilnie powo\u0142uj\u0105 si\u0119 na argument poprawy bezpiecze\u0144stwa u\u017cytkownika. S\u0105 nawet tacy (na was patrz\u0119 uBlock), kt\u00f3rzy zarzucaj\u0105 Googlowi celowy atak na blokery reklam w celu optymalizacji przychod\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W zaistnia\u0142ym sporze wyj\u0105tkowo rzadko wspomina si\u0119, \u017ce Manifest V3 wspierany jest r\u00f3wnie\u017c przez Firefoxa i Safari, a za jego rozw\u00f3j obecnie odpowiedzialna jest grupa W3C WebExtensions Community Group, a nie sam Google. Brak niekt\u00f3rych API mo\u017ce by\u0107 wi\u0119c pok\u0142osiem nie z\u0142ej woli kt\u00f3rej\u015b ze stron, a poszukiwa\u0144 wsp\u00f3lnego mianownika, na kt\u00f3rego zgodz\u0105 si\u0119 wszyscy zainteresowani\u00a0 Standaryzacja potrafi by\u0107 bolesna, ale czasem warto zacisn\u0105\u0107 troch\u0119 z\u0119by.<\/p>\n","innerContent":["\n<p>W zaistnia\u0142ym sporze wyj\u0105tkowo rzadko wspomina si\u0119, \u017ce Manifest V3 wspierany jest r\u00f3wnie\u017c przez Firefoxa i Safari, a za jego rozw\u00f3j obecnie odpowiedzialna jest grupa W3C WebExtensions Community Group, a nie sam Google. Brak niekt\u00f3rych API mo\u017ce by\u0107 wi\u0119c pok\u0142osiem nie z\u0142ej woli kt\u00f3rej\u015b ze stron, a poszukiwa\u0144 wsp\u00f3lnego mianownika, na kt\u00f3rego zgodz\u0105 si\u0119 wszyscy zainteresowani\u00a0 Standaryzacja potrafi by\u0107 bolesna, ale czasem warto zacisn\u0105\u0107 troch\u0119 z\u0119by.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":2697,"width":402,"height":302,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/giphy-1.gif\" alt=\"\" class=\"wp-image-2697\" width=\"402\" height=\"302\"\/><figcaption>Ach te internetowe dramy \ud83d\ude01<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/giphy-1.gif\" alt=\"\" class=\"wp-image-2697\" width=\"402\" height=\"302\"\/><figcaption>Ach te internetowe dramy \ud83d\ude01<\/figcaption><\/figure><\/div>\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.theregister.com\/2021\/09\/27\/google_chrome_manifest_v2_extensions\/\">https:\/\/www.theregister.com\/2021\/09\/27\/google_chrome_manifest_v2_extensions\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/www.theregister.com\/2021\/09\/27\/google_chrome_manifest_v2_extensions\/\">https:\/\/www.theregister.com\/2021\/09\/27\/google_chrome_manifest_v2_extensions\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Czy sk\u0142adnia when-else trafi do standardu CSS ?<\/h2>\n","innerContent":["\n<h2>2. Czy sk\u0142adnia when-else trafi do standardu CSS ?<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Lubicie sk\u0142adni\u0119 media-queries? Ja te\u017c nie \ud83d\ude09. Za ka\u017cdym razem, kiedy patrz\u0119 na style zale\u017cne od wielko\u015bci ekranu musz\u0119 po\u015bwi\u0119ci\u0107 chwil\u0119 na zrozumienie, co si\u0119 w\u0142a\u015bciwie dzieje. Na ten problem maj\u0105 odpowiada\u0107 zaproponowane przez CSS Working Group @when i @else. Sk\u0142adnia jest znacznie czytelniejsza od obecnego rozwi\u0105zania, ale zanim trafi do przegl\u0105darek czeka j\u0105 jeszcze niestety d\u0142uga droga.<\/p>\n","innerContent":["\n<p>Lubicie sk\u0142adni\u0119 media-queries? Ja te\u017c nie \ud83d\ude09. Za ka\u017cdym razem, kiedy patrz\u0119 na style zale\u017cne od wielko\u015bci ekranu musz\u0119 po\u015bwi\u0119ci\u0107 chwil\u0119 na zrozumienie, co si\u0119 w\u0142a\u015bciwie dzieje. Na ten problem maj\u0105 odpowiada\u0107 zaproponowane przez CSS Working Group @when i @else. Sk\u0142adnia jest znacznie czytelniejsza od obecnego rozwi\u0105zania, ale zanim trafi do przegl\u0105darek czeka j\u0105 jeszcze niestety d\u0142uga droga.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"css"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">@when media(width >= 400px) and media(pointer: fine) and supports(display: flex) {\n  \/* A *\/\n} @else supports(caret-color: pink) and supports(background: double-rainbow()) {\n  \/* B *\/\n} @else {\n  \/* C *\/\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">@when media(width >= 400px) and media(pointer: fine) and supports(display: flex) {\n  \/* A *\/\n} @else supports(caret-color: pink) and supports(background: double-rainbow()) {\n  \/* B *\/\n} @else {\n  \/* C *\/\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W ramach prac nad draftem wszcz\u0119\u0142a si\u0119 r\u00f3wnie\u017c ciekawa dyskusja dotycz\u0105ca projektowania nowych funkcjonalno\u015bci dla weba. Dla wi\u0119kszo\u015bci programist\u00f3w domy\u015bln\u0105 sk\u0142adni\u0105 jest if-else, a nie when-else. Niestety nie zdecydowano si\u0119 na pierwszy wariant ze wzgl\u0119du na istnienie operatora @if w Sass, kt\u00f3ry jest obecnie najpopularniejszym prepocesorem css\u00f3w. Internet podzieli\u0142 si\u0119 na dwa obozy: tych kt\u00f3rzy uwa\u017caj\u0105, \u017ce nowe funkcje powinny dobrze integrowa\u0107 si\u0119 z istniej\u0105cym ekosystemem i tych kt\u00f3rzy uwa\u017caj\u0105, \u017ce zale\u017cno\u015bci stron trzecich nie powinny wp\u0142ywa\u0107 na podejmowane decyzje.<\/p>\n","innerContent":["\n<p>W ramach prac nad draftem wszcz\u0119\u0142a si\u0119 r\u00f3wnie\u017c ciekawa dyskusja dotycz\u0105ca projektowania nowych funkcjonalno\u015bci dla weba. Dla wi\u0119kszo\u015bci programist\u00f3w domy\u015bln\u0105 sk\u0142adni\u0105 jest if-else, a nie when-else. Niestety nie zdecydowano si\u0119 na pierwszy wariant ze wzgl\u0119du na istnienie operatora @if w Sass, kt\u00f3ry jest obecnie najpopularniejszym prepocesorem css\u00f3w. Internet podzieli\u0142 si\u0119 na dwa obozy: tych kt\u00f3rzy uwa\u017caj\u0105, \u017ce nowe funkcje powinny dobrze integrowa\u0107 si\u0119 z istniej\u0105cym ekosystemem i tych kt\u00f3rzy uwa\u017caj\u0105, \u017ce zale\u017cno\u015bci stron trzecich nie powinny wp\u0142ywa\u0107 na podejmowane decyzje.<\/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:\/\/css-tricks.com\/proposal-for-css-when\/\">https:\/\/css-tricks.com\/proposal-for-css-when\/<\/a><br><a href=\"https:\/\/github.com\/w3ctag\/design-principles\/issues\/335\">https:\/\/github.com\/w3ctag\/design-principles\/issues\/335<\/a><br><a href=\"https:\/\/tabatkins.github.io\/specs\/css-when-else\/\">https:\/\/tabatkins.github.io\/specs\/css-when-else\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/css-tricks.com\/proposal-for-css-when\/\">https:\/\/css-tricks.com\/proposal-for-css-when\/<\/a><br><a href=\"https:\/\/github.com\/w3ctag\/design-principles\/issues\/335\">https:\/\/github.com\/w3ctag\/design-principles\/issues\/335<\/a><br><a href=\"https:\/\/tabatkins.github.io\/specs\/css-when-else\/\">https:\/\/tabatkins.github.io\/specs\/css-when-else\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Flexbox wspiera gap property<\/h2>\n","innerContent":["\n<h2>3. Flexbox wspiera gap property<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Prawdopodobnie kojarzycie property gap z CSS Grid Layout, ale czy wiecie, \u017ce ostatnimi czasy, troch\u0119 po cichu zosta\u0142o dodane wsparcie dla gap w Flexbox? Co prawda taki sam efekt mo\u017cna by\u0142o do tej pory osi\u0105gn\u0105\u0107 odpowiednio manipuluj\u0105c marginesami i paddingiem, ale nowa sk\u0142adnia znacznie poprawia czytelno\u015b\u0107.<\/p>\n","innerContent":["\n<p>Prawdopodobnie kojarzycie property gap z CSS Grid Layout, ale czy wiecie, \u017ce ostatnimi czasy, troch\u0119 po cichu zosta\u0142o dodane wsparcie dla gap w Flexbox? Co prawda taki sam efekt mo\u017cna by\u0142o do tej pory osi\u0105gn\u0105\u0107 odpowiednio manipuluj\u0105c marginesami i paddingiem, ale nowa sk\u0142adnia znacznie poprawia czytelno\u015b\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"css"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">.container {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">.container {\n  display: flex;\n  flex-direction: column;\n  gap: 10px;\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":2698,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-11.21.30.png\" alt=\"\" class=\"wp-image-2698\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-30-at-11.21.30.png\" alt=\"\" class=\"wp-image-2698\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli chcecie zag\u0142\u0119bi\u0107 si\u0119 w temat, to css-tricks przygotowa\u0142 \u015bwietny artyku\u0142 zag\u0142\u0119biaj\u0105cy si\u0119, w to jak dzia\u0142a gap w Flexbox i Grid Layout i dlaczego jest lepszy od konfiguracji margines\u00f3w.<\/p>\n","innerContent":["\n<p>Je\u015bli chcecie zag\u0142\u0119bi\u0107 si\u0119 w temat, to css-tricks przygotowa\u0142 \u015bwietny artyku\u0142 zag\u0142\u0119biaj\u0105cy si\u0119, w to jak dzia\u0142a gap w Flexbox i Grid Layout i dlaczego jest lepszy od konfiguracji margines\u00f3w.<\/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:\/\/css-tricks.com\/minding-the-gap\/\">https:\/\/css-tricks.com\/minding-the-gap\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/css-tricks.com\/minding-the-gap\/\">https:\/\/css-tricks.com\/minding-the-gap\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Bonus: Jak powsta\u0142 Quake w 13kB JavaScript<\/h2>\n","innerContent":["\n<h2>Bonus: Jak powsta\u0142 Quake w 13kB JavaScript<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli wydaje wam si\u0119, \u017ce ju\u017c gdzie\u015b widzieli\u015bcie Quake w 13kB JavaScript, to przeczucie Was nie myli. Ta kreatywna implementacja Quake pojawi\u0142a si\u0119 ju\u017c w naszym zesz\u0142otygodniowym przegl\u0105dzie, ale tw\u00f3rca gry opublikowa\u0142 blogpost dok\u0142adnie t\u0142umacz\u0105cy, jak uda\u0142o mu si\u0119 osi\u0105gn\u0105\u0107 tak ma\u0142\u0105 paczk\u0119. Je\u015bli t\u0119sknicie za niskopoziomowym kodem, albo po prostu lubicie hardcorowe optymalizacje, to b\u0119dzie dla Was idealny artyku\u0142 do popo\u0142udniowej kawy.<\/p>\n","innerContent":["\n<p>Je\u015bli wydaje wam si\u0119, \u017ce ju\u017c gdzie\u015b widzieli\u015bcie Quake w 13kB JavaScript, to przeczucie Was nie myli. Ta kreatywna implementacja Quake pojawi\u0142a si\u0119 ju\u017c w naszym zesz\u0142otygodniowym przegl\u0105dzie, ale tw\u00f3rca gry opublikowa\u0142 blogpost dok\u0142adnie t\u0142umacz\u0105cy, jak uda\u0142o mu si\u0119 osi\u0105gn\u0105\u0107 tak ma\u0142\u0105 paczk\u0119. Je\u015bli t\u0119sknicie za niskopoziomowym kodem, albo po prostu lubicie hardcorowe optymalizacje, to b\u0119dzie dla Was idealny artyku\u0142 do popo\u0142udniowej kawy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":2701,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/giphy-3.gif\" alt=\"\" class=\"wp-image-2701\"\/><figcaption>Fun fact: Powy\u017cszy gif wa\u017cy znacznie wi\u0119cej ni\u017c ca\u0142a podlinkowana poni\u017cej implementacja Quake \ud83d\ude09<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/09\/giphy-3.gif\" alt=\"\" class=\"wp-image-2701\"\/><figcaption>Fun fact: Powy\u017cszy gif wa\u017cy znacznie wi\u0119cej ni\u017c ca\u0142a podlinkowana poni\u017cej implementacja Quake \ud83d\ude09<\/figcaption><\/figure><\/div>\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:\/\/lunduke.substack.com\/p\/quake-in-13k-of-javascript\">https:\/\/lunduke.substack.com\/p\/quake-in-13k-of-javascript<\/a><br><a href=\"https:\/\/js13kgames.com\/entries\/q1k3\">https:\/\/js13kgames.com\/entries\/q1k3<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/lunduke.substack.com\/p\/quake-in-13k-of-javascript\">https:\/\/lunduke.substack.com\/p\/quake-in-13k-of-javascript<\/a><br><a href=\"https:\/\/js13kgames.com\/entries\/q1k3\">https:\/\/js13kgames.com\/entries\/q1k3<\/a><\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10075","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=10075"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10075\/revisions"}],"predecessor-version":[{"id":10620,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10075\/revisions\/10620"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/7716"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}