{"id":9935,"date":"2022-08-05T13:09:07","date_gmt":"2022-08-05T11:09:07","guid":{"rendered":"https:\/\/vived.io\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/"},"modified":"2022-09-19T13:24:35","modified_gmt":"2022-09-19T11:24:35","slug":"szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/","title":{"rendered":"Szybszy Node.js ju\u017c tu jest &#8211; Frontend Weekly vol. 99"},"content":{"rendered":"\n<h2 id=\"1-bun-alternatywa-typu-drop-in-dla-node-js-i-deno\" data-num=1>1. Bun &#8211; alternatywa typu drop-in dla Node.js i Deno<\/h2>\n\n\n\n<p>Musz\u0119 przyzna\u0107, \u017ce kiedy informacja o wydaniu Bun po raz pierwszy obieg\u0142a internet \u015bwiadomie postanowi\u0142em j\u0105 zignorowa\u0107. Uzna\u0142em, \u017ce to po prostu kolejny projekt ciekawostka, kt\u00f3ry nie ma szans przebi\u0107 si\u0119 do produkcyjnych aplikacji. Nadal zdania nie zmieni\u0142em (co nie przeszkadza mi trzyma\u0107 za projekt kciuk\u00f3w), ale wok\u00f3\u0142 narz\u0119dzia wyros\u0142o w ostatnich tygodniach tyle artyku\u0142\u00f3w i dyskusji, \u017ce po prostu jestem zmuszony Wam o nim opowiedzie\u0107.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"603\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6oztnx.jpeg\" alt=\"\" class=\"wp-image-6210\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6oztnx.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6oztnx-249x300.jpeg 249w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6oztnx-10x12.jpeg 10w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/figure><\/div>\n\n\n<p>Bun to alternatywa typu drop-in dla Node.js i Deno. O ile Deno sw\u00f3j marketing skupia na rozwi\u0105zywaniu problem\u00f3w Node.js, to Bun stawia nacisk na wydajno\u015b\u0107. Je\u015bli wierzy\u0107 benchmarkom opublikowanym przez autora, to naprawd\u0119 wygl\u0105da to imponuj\u0105co.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"439\" height=\"462\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/Screenshot-2022-08-04-at-15.06.18.png\" alt=\"\" class=\"wp-image-6194\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/Screenshot-2022-08-04-at-15.06.18.png 439w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/Screenshot-2022-08-04-at-15.06.18-285x300.png 285w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/Screenshot-2022-08-04-at-15.06.18-11x12.png 11w\" sizes=\"auto, (max-width: 439px) 100vw, 439px\" \/><\/figure><\/div>\n\n\n<p>Wydajno\u015b\u0107 Buna wynika z dw\u00f3ch czynnik\u00f3w. Po pierwsze w odr\u00f3\u017cnieniu od konkurencji jest on napisany nie w C++, a w j\u0119zyku Zig. Je\u015bli jeszcze o nim nie s\u0142yszeli\u015bcie, to nie macie si\u0119 czym martwi\u0107, bo nadal jest on dosy\u0107 niszow\u0105 alternatyw\u0105 dla C++ i Rust.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"687\" height=\"500\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-4.jpeg\" alt=\"\" class=\"wp-image-6195\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-4.jpeg 687w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-4-300x218.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-4-16x12.jpeg 16w\" sizes=\"auto, (max-width: 687px) 100vw, 687px\" \/><figcaption>Nie pytajcie mnie w czym Zig jest lepszy ni\u017c Rust. Pr\u00f3bowa\u0142em si\u0119 dowiedzie\u0107, ale poleg\u0142em.<\/figcaption><\/figure><\/div>\n\n\n<p>Drugim czynnikiem wp\u0142ywaj\u0105cym na wydajno\u015b\u0107 Buna jest wykorzystanie silnika JavaScriptCore od Apple. Pr\u00f3bowa\u0142em znale\u017a\u0107 w sieci benchmarki potwierdzaj\u0105ce to stwierdzenie i niewiele uda\u0142o mi si\u0119 znale\u017a\u0107. Natrafi\u0142em natomiast na film Chris Hey, w kt\u00f3rym por\u00f3wna\u0142 on wydajno\u015b\u0107 Node, Deno i Bun, ale r\u00f3wnie\u017c czystego V8 i JavaScriptCore. Jak si\u0119 okazuje, JavaScriptCore rzeczywi\u015bcie jest szybszy od V8. R\u00f3\u017cnica jest natomiast stosunkowo niewielka i to nie z niej wynikaj\u0105 g\u0142\u00f3wne r\u00f3\u017cnice w wydajno\u015bci mi\u0119dzy Node i Bun.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"679\" height=\"367\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow2xu.jpeg\" alt=\"\" class=\"wp-image-6196\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow2xu.jpeg 679w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow2xu-300x162.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow2xu-18x10.jpeg 18w\" sizes=\"auto, (max-width: 679px) 100vw, 679px\" \/><\/figure><\/div>\n\n\n<p>W ten oto spos\u00f3b dochodzimy do (moim zdaniem) clue zar\u00f3wno imponuj\u0105cej wydajno\u015bci jak i do powodu dla kt\u00f3rego przed Bun jeszcze d\u0142uga i wyboista droga. Obecnie Bun implementuje oko\u0142o 90% Node API. Jak g\u0142osi jedna ze s\u0142ynnych zasad projekt\u00f3w informatycznych ostatnie 10% pracy kosztuje 80% pracy. Jak g\u0142osi inna zasada projekt\u00f3w informatycznych, cykl \u017cycia biblioteki zaczyna si\u0119 od ma\u0142ego wydajnego projektu, nast\u0119pnie odbudowywany on jest w kolejne zale\u017cno\u015bci, aby ostatecznie sta\u0107 si\u0119 oci\u0119\u017ca\u0142ym i doczeka\u0107 si\u0119 ma\u0142ej i wydajnej alternatywy. Bior\u0105c pod uwag\u0119 te dwie prawdy programistyczne, przed Bun jeszcze d\u0142uga droga na ko\u0144cu kt\u00f3rej benchmarki wydajno\u015bci mog\u0105 wygl\u0105da\u0107 zupe\u0142nie inaczej.<\/p>\n\n\n\n<p>O tym jak Bun radzi sobie w produkcyjnym \u015brodowisku postanowi\u0142 przekona\u0107 si\u0119 autor kilku ksi\u0105\u017cek na temat Node.js &#8211; David Herron. Jak s\u0142usznie zwraca on uwag\u0119, proste benchmarki prawie nigdy nie oddaj\u0105 reali\u00f3w produkcyjnych aplikacji. Dlatego postanowi\u0142 on uruchomi\u0107 rozwijan\u0105 przez siebie bibliotek\u0119 CMS przy u\u017cyciu Buna.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-3.jpeg\" alt=\"\" class=\"wp-image-6197\" width=\"548\" height=\"456\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-3.jpeg 548w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-3-300x250.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-3-14x12.jpeg 14w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/figure><\/div>\n\n\n<p>Jak si\u0119 pewnie domy\u015blacie przedsi\u0119wzi\u0119cie zako\u0144czy\u0142o si\u0119 fiaskiem. Brakuj\u0105ce 10% funkcjonalno\u015bci uniemo\u017cliwi\u0142o trywialn\u0105 migracj\u0119. Z sukcesem uda\u0142o si\u0119 natomiast uruchomi\u0107 kilka podmodu\u0142\u00f3w aplikacji. Wyniki okaza\u0142y si\u0119 niejednoznaczne. W cz\u0119\u015bci modu\u0142\u00f3w wydajno\u015b\u0107 znacz\u0105co wzros\u0142a, a w cz\u0119\u015bci w\u0142a\u015bciwie nie uleg\u0142a zmianie.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/\/Source: https:\/\/techsparx.com\/nodejs\/bun\/speed-test.html\n$ npm run bench\n\n&gt; bench@1.0.0 bench\n&gt; npm-run-all render:node render:bun\n\n&gt; bench@1.0.0 render:node\n&gt; node render-node.mjs\n\ncpu: Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz\nruntime: node v18.6.0 (x64-linux)\n\nbenchmark            time (avg)             (min \u2026 max)\n-------------------------------------------------------\nliteral          133.73 ns\/iter (119.76 ns \u2026 661.32 ns)\nliquid-join       30.26 \u00b5s\/iter    (18.04 \u00b5s \u2026 3.66 ms)\ncheerio          130.17 \u00b5s\/iter    (78.42 \u00b5s \u2026 5.04 ms)\n\n&gt; bench@1.0.0 render:bun\n&gt; bun render-bun.js\n\ncpu: Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz\nruntime: bun 0.1.4 (x64-linux)\n\nbenchmark                 time (avg)             (min \u2026 max)\n------------------------------------------------------------\nliteral               129.64 ns\/iter (107.87 ns \u2026 534.11 ns)\nliquid-list           125.84 \u00b5s\/iter    (87.41 \u00b5s \u2026 2.12 ms)\ncheerio                68.81 \u00b5s\/iter    (43.25 \u00b5s \u2026 2.09 ms)<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"888\" height=\"499\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow56j.jpeg\" alt=\"\" class=\"wp-image-6198\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow56j.jpeg 888w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow56j-300x169.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow56j-768x432.jpeg 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow56j-18x10.jpeg 18w\" sizes=\"auto, (max-width: 888px) 100vw, 888px\" \/><figcaption>Pierwsze benchmarki Davida Gerron, kt\u00f3re rozesz\u0142y si\u0119 po sieci, wskazywa\u0142y na prawie identyczn\u0105 wydajno\u015b\u0107 Node.js i Bun. Jak si\u0119 potem okaza\u0142o, ze wzgl\u0119du na bug w interpretacji hashbang przez Bun, wszystkie testy by\u0142y odpalane na Node.js&nbsp;<\/figcaption><\/figure><\/div>\n\n\n<p>David Gerron w swoim blogpo\u015bcie zwraca r\u00f3wnie\u017c uwag\u0119 na konsekwencje dla ca\u0142ego \u015brodowiska jakie mo\u017ce przynie\u015b\u0107 rozw\u00f3j Buna. W ekosystemie Javy rozwijanych jest wiele implementacji JVM, a do weryfikacji ich kompatybilno\u015bci wykorzystywany jest zestaw test\u00f3w nazywanych TCK. Do tej pory nie doczekali\u015bmy si\u0119 odpowiednika takich test\u00f3w dla Node, ale z du\u017cym prawdopodobie\u0144stwem testy tworzone na potrzeby Buna b\u0119d\u0105 \u015bwietnym zal\u0105\u017ckiem do dalszej pracy. Kto wie, mo\u017ce za kilka lat w \u015brodowisku Node.js b\u0119dziemy mie\u0107 tak\u0105 sam\u0105 r\u00f3\u017cnorodno\u015b\u0107 \u015brodowisk uruchomieniowych z jak\u0105 mamy do czynienia teraz w Javie.<\/p>\n\n\n\n<p>Mam wra\u017cenie, \u017ce agresywny marketing wok\u00f3\u0142 wydajno\u015bci odbi\u0142 si\u0119 Bun troch\u0119 czkawk\u0105. Pod przykrywk\u0105 alternatywy dla Node.js wprowadza on bowiem ca\u0142kiem sporo usprawnie\u0144. Podobnie jak w przypadku Deno, TypeScript jest natywnie wspieranym j\u0119zykiem. Bun jest te\u017c alternatyw\u0105 dla NPM, kt\u00f3ra jest nawet do 100x szybsza. To sprawia, \u017ce bez problemu mo\u017ce stawa\u0107 w szranki chocia\u017cby z pnpm. Bun udost\u0119pnia&nbsp; te\u017c API do tworzenia makr, czyli kodu generowanego podczas kompilacji z dost\u0119pem do drzewa AST i metadanych typ\u00f3w. Do pakowania aplikacji Bun wykorzystuje niesamowicie szybkiego esbuild skompilowanego przy u\u017cyciu Ziga. Szczerze m\u00f3wi\u0105c ,wszystkie te funkcjonalno\u015bci brzmi\u0105 du\u017co ciekawiej ni\u017c pusty slogan: szybszy Node.js.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"659\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-1.jpeg\" alt=\"\" class=\"wp-image-6199\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-1.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-1-228x300.jpeg 228w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-1-9x12.jpeg 9w\" 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:\/\/bun.sh\/\">https:\/\/bun.sh\/<\/a><br><a href=\"https:\/\/techsparx.com\/nodejs\/bun\/1st-trial.html\">https:\/\/techsparx.com\/nodejs\/bun\/1st-trial.html<\/a><br><a href=\"https:\/\/techsparx.com\/nodejs\/bun\/speed-test.html\">https:\/\/techsparx.com\/nodejs\/bun\/speed-test.html<\/a><br><a href=\"https:\/\/www.lunasec.io\/docs\/blog\/bun-first-look\/\">https:\/\/www.lunasec.io\/docs\/blog\/bun-first-look\/<\/a><br><a href=\"https:\/\/www.youtube.com\/watch?v=8wTulvlllGQ\">https:\/\/www.youtube.com\/watch?v=8wTulvlllGQ<\/a><\/p>\n\n\n\n<h2 id=\"2-discord-na-androidzie-zostal-przepisany-do-react-native\" data-num=2>2. Discord na Androidzie zosta\u0142 przepisany do React Native<\/h2>\n\n\n\n<p>W minionym tygodniu Discord og\u0142osi\u0142, \u017ce ich aplikacja na Androida zosta\u0142a przepisana do React Native. Do tej pory wersja komunikatora dla systemu Android by\u0142a t\u0105, kt\u00f3ra pod wzgl\u0119dem funkcjonalno\u015bci pozostawa\u0142a w tyle. Dzi\u0119ki migracji do React Native niezale\u017cnie od urz\u0105dzenia, u\u017cytkownicy wreszcie b\u0119d\u0105 mogli cieszy\u0107 si\u0119 sp\u00f3jnym do\u015bwiadczeniem.<\/p>\n\n\n\n<p>Decyzja o migracji zosta\u0142a podj\u0119ta przede wszystkim ze wzgl\u0119du na potencjaln\u0105 mo\u017cliwo\u015b\u0107 wsp\u00f3\u0142dzielenia sporej cz\u0119\u015bci kodu pomi\u0119dzy r\u00f3\u017cnymi wersjami aplikacji. Wersja Discord na iOS u\u017cywa React Native w\u0142a\u015bciwie od pierwszego wydania tego narz\u0119dzia. Wersja desktopowa jest aplikacj\u0105 webow\u0105 zapakowan\u0105 w Electrona. Oznacza to, \u017ce wszystkie wersje Discorda oparte s\u0105 aktualnie o JavaScript.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"675\" height=\"499\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow0lw.jpeg\" alt=\"\" class=\"wp-image-6200\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow0lw.jpeg 675w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow0lw-300x222.jpeg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow0lw-16x12.jpeg 16w\" sizes=\"auto, (max-width: 675px) 100vw, 675px\" \/><\/figure><\/div>\n\n\n<p>Na koniec warto podkre\u015bli\u0107 jeszcze, \u017ce zesp\u00f3\u0142 Discorda nie zdecydowa\u0142 si\u0119 ca\u0142kowicie uwsp\u00f3lni\u0107 aplikacji na iOS i Androida. Taka architektura ma pozwoli\u0107 na optymalne wykorzystanie mo\u017cliwo\u015bci jakie daje konkretny system operacyjny.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/discord.com\/blog\/android-react-native-framework-update\">https:\/\/discord.com\/blog\/android-react-native-framework-update<\/a><br><a href=\"https:\/\/www.theverge.com\/2022\/8\/1\/23286860\/discord-react-native-android-new-app-ios-new-updates-features\">https:\/\/www.theverge.com\/2022\/8\/1\/23286860\/discord-react-native-android-new-app-ios-new-updates-features<\/a><\/p>\n\n\n\n<h2 id=\"3-lepsza-enkapsulacja-transform-dostepna-juz-we-wszystkich-przegladarkach\" data-num=3>3. Lepsza enkapsulacja `transform` dost\u0119pna ju\u017c we wszystkich przegl\u0105darkach<\/h2>\n\n\n\n<p>Wydany pocz\u0105tkiem miesi\u0105ca Chrome 104 dostarczy\u0142 funkcjonalno\u015b\u0107 umo\u017cliwiaj\u0105c\u0105 rozdzielenie jednego `transform` na 3 osobne w\u0142a\u015bciwo\u015bci &#8211; `scale`, `rotate` i `translate`. Tym samym funkcjonalno\u015b\u0107 ta dost\u0119pna jest ju\u017c we wszystkich popularnych przegl\u0105darkach i bez obaw mo\u017cemy zacz\u0105\u0107 u\u017cywa\u0107 jej w naszych aplikacjach.<\/p>\n\n\n\n<p>Z nowej funkcjonalno\u015bci skorzystamy przede wszystkim przy tworzeniu animacji. Do tej pory je\u015bli chcieli\u015bmy do animacji wykorzysta\u0107 kilka w\u0142a\u015bciwo\u015bci to nale\u017ca\u0142o wyliczy\u0107 ich stan we wszystkich klatkach kluczowych. Teraz dzi\u0119ki mo\u017cliwo\u015bci rozdzielenia w\u0142a\u015bciwo\u015bci wymagane b\u0119dzie zadeklarowanie tylko tych, kt\u00f3re podlega\u0107 b\u0119d\u0105 zmianie. Je\u015bli t\u0142umacz\u0119 to zbyt zawile, to przyk\u0142ad poni\u017cej powinien rozwia\u0107 Wasze w\u0105tpliwo\u015bci.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"745\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/AF5n6UlhcuQ5UNKemX8M.jpg\" alt=\"\" class=\"wp-image-6201\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/AF5n6UlhcuQ5UNKemX8M.jpg 800w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/AF5n6UlhcuQ5UNKemX8M-300x279.jpg 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/AF5n6UlhcuQ5UNKemX8M-768x715.jpg 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/AF5n6UlhcuQ5UNKemX8M-13x12.jpg 13w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure><\/div>\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">\/* Old syntax *\/\n@keyframes anim {\n  0% { transform: translateX(0%); }\n  5% { transform: translateX(5%) rotate(90deg) scale(1.2); }\n  10% { transform: translateX(10%) rotate(180deg) scale(1.2); }\n  90% { transform: translateX(90%) rotate(180deg) scale(1.2); }\n  95% { transform: translateX(95%) rotate(270deg) scale(1.2); }\n  100% { transform: translateX(100%) rotate(360deg); }\n}\n\n.target {\n  animation: anim 2s;\n  animation-fill-mode: forwards;\n}<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/* New syntax *\/\n@keyframes anim {\n  0% { translate: 0% 0; }\n  100% { translate: 100% 0; }\n\n  0%, 100% { scale: 1; }\n  5%, 95% { scale: 1.2; }\n\n  0% { rotate: 0deg; }\n  10%, 90% { rotate: 180deg; }\n  100% { rotate: 360deg; }\n}\n\n.target {\n  animation: anim 2s;\n  animation-fill-mode: forwards;\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/web.dev\/css-individual-transform-properties\/\">https:\/\/web.dev\/css-individual-transform-properties\/<\/a><\/p>\n\n\n\n<h2 id=\"4-docusaurus-2-0\" data-num=4>4. Docusaurus 2.0<\/h2>\n\n\n\n<p>Docusaurus to narz\u0119dzie do tworzenia rozbudowanych dokumentacji.O ile o samym projekcie mogli\u015bcie do tej pory nie s\u0142ysze\u0107, to na pewno mieli\u015bcie ju\u017c okazj\u0119 korzysta\u0107 z opartych o niego stron. W\u015br\u00f3d najpopularniejszych bibliotek wykorzystuj\u0105cych Docusaurus znajdziemy bowiem mi\u0119dzy innymi&nbsp; Prettiera, Babela, React Native czy Ionica.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/CgGkN6YVAAAZ3_1.jpeg\" alt=\"\" class=\"wp-image-6202\" width=\"417\" height=\"547\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/CgGkN6YVAAAZ3_1.jpeg 600w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/CgGkN6YVAAAZ3_1-229x300.jpeg 229w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/CgGkN6YVAAAZ3_1-9x12.jpeg 9w\" sizes=\"auto, (max-width: 417px) 100vw, 417px\" \/><\/figure><\/div>\n\n\n<p>W minionym tygodniu po 4 latach rozwoju wreszcie doczekali\u015bmy si\u0119 kolejnej wersji narz\u0119dzia oznaczonej numerkiem 2.0. W\u015br\u00f3d nowo\u015bci znajdziemy mi\u0119dzy innymi:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Wsparcie dla MDX, czyli formatu kt\u00f3ry umo\u017cliwia wzbogacenie Markdownu o Reactowe komponenty. Dzi\u0119ki temu mo\u017cliwe b\u0119dzie szybkie i wygodne tworzenie interaktywnej dokumentacji.<\/li><li>Wzorem Next.js i Remix, r\u00f3wnie\u017c Docusaurus b\u0119dzie opiera\u0142 swoj\u0105 nawigacj\u0119 o struktur\u0119 plik\u00f3w.<\/li><li>Docusaurus z architektury monolitycznej przemigrowany zosta\u0142 na znacznie bardziej elastyczna architektur\u0119 modularn\u0105. Od teraz ka\u017cda funkcjonalno\u015b\u0107 taka jak dokumentacja, blog czy wyszukiwarka ma sw\u00f3j osobny plugin. Rewolucja pod wzgl\u0119dem architektury zwiastuje r\u00f3wnie\u017c rych\u0142y nap\u0142yw wtyczek od spo\u0142eczno\u015bci.<\/li><li>Je\u015bli otworzycie obok siebie kilka dokumentacji opartych o Docusaurus 1.0 to szybko zorientujecie si\u0119, \u017ce wygl\u0105daj\u0105 one w\u0142a\u015bciwie identycznie. Docusaurus 2.0 udost\u0119pnia publiczne API do stylowania, kt\u00f3re umo\u017cliwi wyczekiwan\u0105 od dawna personalizacj\u0119.<\/li><\/ul>\n\n\n\n<p>Na zako\u0144czenie ciekawostka: wersje alfa i beta Docusaurusa by\u0142y publicznie dost\u0119pne ju\u017c od ponad dw\u00f3ch lat. Znalaz\u0142o si\u0119 te\u017c sporo \u015bmia\u0142k\u00f3w, kt\u00f3rzy zdecydowali si\u0119 zmigrowa\u0107 do wersji 2.0 jeszcze przed wydaniem stabilnej wersji. Jak chwal\u0105 si\u0119 tw\u00f3rcy, ju\u017c w po\u0142owie 2020 roku wersja 2.0 przeros\u0142a popularno\u015bci\u0105 stabiln\u0105 wersj\u0119 1.0.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/npm-downloads-f9d754a81ff372a5bae83c8751195e2b-1024x550.png\" alt=\"\" class=\"wp-image-6203\" width=\"712\" height=\"382\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/npm-downloads-f9d754a81ff372a5bae83c8751195e2b-1024x550.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/npm-downloads-f9d754a81ff372a5bae83c8751195e2b-300x161.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/npm-downloads-f9d754a81ff372a5bae83c8751195e2b-768x413.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/npm-downloads-f9d754a81ff372a5bae83c8751195e2b-18x10.png 18w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/npm-downloads-f9d754a81ff372a5bae83c8751195e2b.png 1200w\" sizes=\"auto, (max-width: 712px) 100vw, 712px\" \/><\/figure><\/div>\n\n\n<p>Je\u015bli zastanawiacie si\u0119 dlaczego wersja druga tak d\u0142ugo tkwi\u0142a we wczesnym dost\u0119pie to nie jeste\u015bcie jedyni. Jak t\u0142umacz\u0105 autorzy narz\u0119dzia, najwi\u0119kszym wyzwaniem by\u0142o przygotowanie stabilnego i publicznego API do stylowania. Do tej pory takie API nie istnia\u0142o, a wielu klient\u00f3w do stylowania swoich dokumentacji wykorzystywa\u0142o wewn\u0119trzne zale\u017cno\u015bci. Jak to zwykle bywa w takich przypadkach, dla takich klient\u00f3w migracja by\u0142a bardzo trudna. Z perspektywy zespo\u0142u rozwijaj\u0105cego bibliotek\u0119 trudne by\u0142o natomiast rozdzielenie API publicznego od niepublicznego oraz odpowiednie uporz\u0105dkowanie tego pierwszego. Jak zapowiadaj\u0105 tw\u00f3rcy, od teraz kolejnych du\u017cych wyda\u0144 mo\u017cemy spodziewa\u0107 si\u0119 co 2-4 miesi\u0105ce.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"560\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-2.jpeg\" alt=\"\" class=\"wp-image-6204\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-2.jpeg 500w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-2-268x300.jpeg 268w, https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-2-11x12.jpeg 11w\" 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:\/\/docusaurus.io\/blog\/2022\/08\/01\/announcing-docusaurus-2.0\">https:\/\/docusaurus.io\/blog\/2022\/08\/01\/announcing-docusaurus-2.0<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bun, czyli alternatywa typu drop-in dla Node.js, w ostatnich tygodniach zalewa wszystkie frontendowe newslettery. Tw\u00f3rcy obiecuj\u0105 niesamowity skok wydajno\u015bci &#8211; pytanie tylko czy rzeczywi\u015bcie jego osi\u0105gni\u0119cie jest tak blisko jak sugeruj\u0105 autorzy.<\/p>\n","protected":false},"author":12,"featured_media":8996,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[],"class_list":["post-9935","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl"],"acf":{"feature_image_visible":false,"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.png","feature_image_blog":{"ID":8997,"id":8997,"title":"pexels-photo-1098545","filename":"pexels-photo-1098545.jpeg","filesize":220915,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-1098545.jpeg","link":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/pexels-photo-1098545-2\/","alt":"","author":"12","description":"","caption":"","name":"pexels-photo-1098545-2","status":"inherit","uploaded_to":9935,"date":"2022-08-05 10:50:51","modified":"2022-08-05 10:50:51","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":2495,"height":1500,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-1098545-150x150.jpeg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-1098545-300x180.jpeg","medium-width":300,"medium-height":180,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-1098545-768x462.jpeg","medium_large-width":768,"medium_large-height":462,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-1098545-1024x616.jpeg","large-width":1024,"large-height":616,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-1098545-1536x923.jpeg","1536x1536-width":1536,"1536x1536-height":923,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-1098545-2048x1231.jpeg","2048x2048-width":2048,"2048x2048-height":1231,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-1098545.jpeg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":180,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-1098545.jpeg","gform-image-choice-md-width":400,"gform-image-choice-md-height":240,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/pexels-photo-1098545.jpeg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":361}},"estimated_reading_time":"8"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Szybszy Node.js ju\u017c tu jest - Frontend Weekly vol. 99 - 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\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Szybszy Node.js ju\u017c tu jest - Frontend Weekly vol. 99 - Vived\" \/>\n<meta property=\"og:description\" content=\"Bun, czyli alternatywa typu drop-in dla Node.js, w ostatnich tygodniach zalewa wszystkie frontendowe newslettery. Tw\u00f3rcy obiecuj\u0105 niesamowity skok wydajno\u015bci - pytanie tylko czy rzeczywi\u015bcie jego osi\u0105gni\u0119cie jest tak blisko jak sugeruj\u0105 autorzy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-05T11:09:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:24:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.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\/08\/FRONTEND.png\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Szybszy Node.js ju\u017c tu jest &#8211; Frontend Weekly vol. 99\",\"datePublished\":\"2022-08-05T11:09:07+00:00\",\"dateModified\":\"2022-09-19T11:24:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/\"},\"wordCount\":1555,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.png\",\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/\",\"url\":\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/\",\"name\":\"Szybszy Node.js ju\u017c tu jest - Frontend Weekly vol. 99 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.png\",\"datePublished\":\"2022-08-05T11:09:07+00:00\",\"dateModified\":\"2022-09-19T11:24:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Szybszy Node.js ju\u017c tu jest &#8211; Frontend Weekly vol. 99\"}]},{\"@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":"Szybszy Node.js ju\u017c tu jest - Frontend Weekly vol. 99 - 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\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/","og_locale":"pl_PL","og_type":"article","og_title":"Szybszy Node.js ju\u017c tu jest - Frontend Weekly vol. 99 - Vived","og_description":"Bun, czyli alternatywa typu drop-in dla Node.js, w ostatnich tygodniach zalewa wszystkie frontendowe newslettery. Tw\u00f3rcy obiecuj\u0105 niesamowity skok wydajno\u015bci - pytanie tylko czy rzeczywi\u015bcie jego osi\u0105gni\u0119cie jest tak blisko jak sugeruj\u0105 autorzy.","og_url":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/","og_site_name":"Vived","article_published_time":"2022-08-05T11:09:07+00:00","article_modified_time":"2022-09-19T11:24:35+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.png","type":"image\/png"}],"author":"Tomasz Borowicz","twitter_card":"summary_large_image","twitter_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.png","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Szybszy Node.js ju\u017c tu jest &#8211; Frontend Weekly vol. 99","datePublished":"2022-08-05T11:09:07+00:00","dateModified":"2022-09-19T11:24:35+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/"},"wordCount":1555,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.png","articleSection":["Frontend"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/","url":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/","name":"Szybszy Node.js ju\u017c tu jest - Frontend Weekly vol. 99 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.png","datePublished":"2022-08-05T11:09:07+00:00","dateModified":"2022-09-19T11:24:35+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/FRONTEND.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/szybszy-node-js-juz-tu-jest-frontend-weekly-vol-99\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Szybszy Node.js ju\u017c tu jest &#8211; Frontend Weekly vol. 99"}]},{"@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. Bun - alternatywa typu drop-in dla Node.js i Deno<\/h2>\n","innerContent":["\n<h2>1. Bun - alternatywa typu drop-in dla Node.js i Deno<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Musz\u0119 przyzna\u0107, \u017ce kiedy informacja o wydaniu Bun po raz pierwszy obieg\u0142a internet \u015bwiadomie postanowi\u0142em j\u0105 zignorowa\u0107. Uzna\u0142em, \u017ce to po prostu kolejny projekt ciekawostka, kt\u00f3ry nie ma szans przebi\u0107 si\u0119 do produkcyjnych aplikacji. Nadal zdania nie zmieni\u0142em (co nie przeszkadza mi trzyma\u0107 za projekt kciuk\u00f3w), ale wok\u00f3\u0142 narz\u0119dzia wyros\u0142o w ostatnich tygodniach tyle artyku\u0142\u00f3w i dyskusji, \u017ce po prostu jestem zmuszony Wam o nim opowiedzie\u0107.<\/p>\n","innerContent":["\n<p>Musz\u0119 przyzna\u0107, \u017ce kiedy informacja o wydaniu Bun po raz pierwszy obieg\u0142a internet \u015bwiadomie postanowi\u0142em j\u0105 zignorowa\u0107. Uzna\u0142em, \u017ce to po prostu kolejny projekt ciekawostka, kt\u00f3ry nie ma szans przebi\u0107 si\u0119 do produkcyjnych aplikacji. Nadal zdania nie zmieni\u0142em (co nie przeszkadza mi trzyma\u0107 za projekt kciuk\u00f3w), ale wok\u00f3\u0142 narz\u0119dzia wyros\u0142o w ostatnich tygodniach tyle artyku\u0142\u00f3w i dyskusji, \u017ce po prostu jestem zmuszony Wam o nim opowiedzie\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6210,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6oztnx.jpeg\" alt=\"\" class=\"wp-image-6210\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6oztnx.jpeg\" alt=\"\" class=\"wp-image-6210\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Bun to alternatywa typu drop-in dla Node.js i Deno. O ile Deno sw\u00f3j marketing skupia na rozwi\u0105zywaniu problem\u00f3w Node.js, to Bun stawia nacisk na wydajno\u015b\u0107. Je\u015bli wierzy\u0107 benchmarkom opublikowanym przez autora, to naprawd\u0119 wygl\u0105da to imponuj\u0105co.<\/p>\n","innerContent":["\n<p>Bun to alternatywa typu drop-in dla Node.js i Deno. O ile Deno sw\u00f3j marketing skupia na rozwi\u0105zywaniu problem\u00f3w Node.js, to Bun stawia nacisk na wydajno\u015b\u0107. Je\u015bli wierzy\u0107 benchmarkom opublikowanym przez autora, to naprawd\u0119 wygl\u0105da to imponuj\u0105co.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6194,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/Screenshot-2022-08-04-at-15.06.18.png\" alt=\"\" class=\"wp-image-6194\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/Screenshot-2022-08-04-at-15.06.18.png\" alt=\"\" class=\"wp-image-6194\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wydajno\u015b\u0107 Buna wynika z dw\u00f3ch czynnik\u00f3w. Po pierwsze w odr\u00f3\u017cnieniu od konkurencji jest on napisany nie w C++, a w j\u0119zyku Zig. Je\u015bli jeszcze o nim nie s\u0142yszeli\u015bcie, to nie macie si\u0119 czym martwi\u0107, bo nadal jest on dosy\u0107 niszow\u0105 alternatyw\u0105 dla C++ i Rust.&nbsp;<\/p>\n","innerContent":["\n<p>Wydajno\u015b\u0107 Buna wynika z dw\u00f3ch czynnik\u00f3w. Po pierwsze w odr\u00f3\u017cnieniu od konkurencji jest on napisany nie w C++, a w j\u0119zyku Zig. Je\u015bli jeszcze o nim nie s\u0142yszeli\u015bcie, to nie macie si\u0119 czym martwi\u0107, bo nadal jest on dosy\u0107 niszow\u0105 alternatyw\u0105 dla C++ i Rust.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6195,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-4.jpeg\" alt=\"\" class=\"wp-image-6195\"\/><figcaption>Nie pytajcie mnie w czym Zig jest lepszy ni\u017c Rust. Pr\u00f3bowa\u0142em si\u0119 dowiedzie\u0107, ale poleg\u0142em.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-4.jpeg\" alt=\"\" class=\"wp-image-6195\"\/><figcaption>Nie pytajcie mnie w czym Zig jest lepszy ni\u017c Rust. Pr\u00f3bowa\u0142em si\u0119 dowiedzie\u0107, ale poleg\u0142em.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Drugim czynnikiem wp\u0142ywaj\u0105cym na wydajno\u015b\u0107 Buna jest wykorzystanie silnika JavaScriptCore od Apple. Pr\u00f3bowa\u0142em znale\u017a\u0107 w sieci benchmarki potwierdzaj\u0105ce to stwierdzenie i niewiele uda\u0142o mi si\u0119 znale\u017a\u0107. Natrafi\u0142em natomiast na film Chris Hey, w kt\u00f3rym por\u00f3wna\u0142 on wydajno\u015b\u0107 Node, Deno i Bun, ale r\u00f3wnie\u017c czystego V8 i JavaScriptCore. Jak si\u0119 okazuje, JavaScriptCore rzeczywi\u015bcie jest szybszy od V8. R\u00f3\u017cnica jest natomiast stosunkowo niewielka i to nie z niej wynikaj\u0105 g\u0142\u00f3wne r\u00f3\u017cnice w wydajno\u015bci mi\u0119dzy Node i Bun.<\/p>\n","innerContent":["\n<p>Drugim czynnikiem wp\u0142ywaj\u0105cym na wydajno\u015b\u0107 Buna jest wykorzystanie silnika JavaScriptCore od Apple. Pr\u00f3bowa\u0142em znale\u017a\u0107 w sieci benchmarki potwierdzaj\u0105ce to stwierdzenie i niewiele uda\u0142o mi si\u0119 znale\u017a\u0107. Natrafi\u0142em natomiast na film Chris Hey, w kt\u00f3rym por\u00f3wna\u0142 on wydajno\u015b\u0107 Node, Deno i Bun, ale r\u00f3wnie\u017c czystego V8 i JavaScriptCore. Jak si\u0119 okazuje, JavaScriptCore rzeczywi\u015bcie jest szybszy od V8. R\u00f3\u017cnica jest natomiast stosunkowo niewielka i to nie z niej wynikaj\u0105 g\u0142\u00f3wne r\u00f3\u017cnice w wydajno\u015bci mi\u0119dzy Node i Bun.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6196,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow2xu.jpeg\" alt=\"\" class=\"wp-image-6196\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow2xu.jpeg\" alt=\"\" class=\"wp-image-6196\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W ten oto spos\u00f3b dochodzimy do (moim zdaniem) clue zar\u00f3wno imponuj\u0105cej wydajno\u015bci jak i do powodu dla kt\u00f3rego przed Bun jeszcze d\u0142uga i wyboista droga. Obecnie Bun implementuje oko\u0142o 90% Node API. Jak g\u0142osi jedna ze s\u0142ynnych zasad projekt\u00f3w informatycznych ostatnie 10% pracy kosztuje 80% pracy. Jak g\u0142osi inna zasada projekt\u00f3w informatycznych, cykl \u017cycia biblioteki zaczyna si\u0119 od ma\u0142ego wydajnego projektu, nast\u0119pnie odbudowywany on jest w kolejne zale\u017cno\u015bci, aby ostatecznie sta\u0107 si\u0119 oci\u0119\u017ca\u0142ym i doczeka\u0107 si\u0119 ma\u0142ej i wydajnej alternatywy. Bior\u0105c pod uwag\u0119 te dwie prawdy programistyczne, przed Bun jeszcze d\u0142uga droga na ko\u0144cu kt\u00f3rej benchmarki wydajno\u015bci mog\u0105 wygl\u0105da\u0107 zupe\u0142nie inaczej.<\/p>\n","innerContent":["\n<p>W ten oto spos\u00f3b dochodzimy do (moim zdaniem) clue zar\u00f3wno imponuj\u0105cej wydajno\u015bci jak i do powodu dla kt\u00f3rego przed Bun jeszcze d\u0142uga i wyboista droga. Obecnie Bun implementuje oko\u0142o 90% Node API. Jak g\u0142osi jedna ze s\u0142ynnych zasad projekt\u00f3w informatycznych ostatnie 10% pracy kosztuje 80% pracy. Jak g\u0142osi inna zasada projekt\u00f3w informatycznych, cykl \u017cycia biblioteki zaczyna si\u0119 od ma\u0142ego wydajnego projektu, nast\u0119pnie odbudowywany on jest w kolejne zale\u017cno\u015bci, aby ostatecznie sta\u0107 si\u0119 oci\u0119\u017ca\u0142ym i doczeka\u0107 si\u0119 ma\u0142ej i wydajnej alternatywy. Bior\u0105c pod uwag\u0119 te dwie prawdy programistyczne, przed Bun jeszcze d\u0142uga droga na ko\u0144cu kt\u00f3rej benchmarki wydajno\u015bci mog\u0105 wygl\u0105da\u0107 zupe\u0142nie inaczej.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>O tym jak Bun radzi sobie w produkcyjnym \u015brodowisku postanowi\u0142 przekona\u0107 si\u0119 autor kilku ksi\u0105\u017cek na temat Node.js - David Herron. Jak s\u0142usznie zwraca on uwag\u0119, proste benchmarki prawie nigdy nie oddaj\u0105 reali\u00f3w produkcyjnych aplikacji. Dlatego postanowi\u0142 on uruchomi\u0107 rozwijan\u0105 przez siebie bibliotek\u0119 CMS przy u\u017cyciu Buna.<\/p>\n","innerContent":["\n<p>O tym jak Bun radzi sobie w produkcyjnym \u015brodowisku postanowi\u0142 przekona\u0107 si\u0119 autor kilku ksi\u0105\u017cek na temat Node.js - David Herron. Jak s\u0142usznie zwraca on uwag\u0119, proste benchmarki prawie nigdy nie oddaj\u0105 reali\u00f3w produkcyjnych aplikacji. Dlatego postanowi\u0142 on uruchomi\u0107 rozwijan\u0105 przez siebie bibliotek\u0119 CMS przy u\u017cyciu Buna.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6197,"width":548,"height":456,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-3.jpeg\" alt=\"\" class=\"wp-image-6197\" width=\"548\" height=\"456\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-3.jpeg\" alt=\"\" class=\"wp-image-6197\" width=\"548\" height=\"456\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak si\u0119 pewnie domy\u015blacie przedsi\u0119wzi\u0119cie zako\u0144czy\u0142o si\u0119 fiaskiem. Brakuj\u0105ce 10% funkcjonalno\u015bci uniemo\u017cliwi\u0142o trywialn\u0105 migracj\u0119. Z sukcesem uda\u0142o si\u0119 natomiast uruchomi\u0107 kilka podmodu\u0142\u00f3w aplikacji. Wyniki okaza\u0142y si\u0119 niejednoznaczne. W cz\u0119\u015bci modu\u0142\u00f3w wydajno\u015b\u0107 znacz\u0105co wzros\u0142a, a w cz\u0119\u015bci w\u0142a\u015bciwie nie uleg\u0142a zmianie.<\/p>\n","innerContent":["\n<p>Jak si\u0119 pewnie domy\u015blacie przedsi\u0119wzi\u0119cie zako\u0144czy\u0142o si\u0119 fiaskiem. Brakuj\u0105ce 10% funkcjonalno\u015bci uniemo\u017cliwi\u0142o trywialn\u0105 migracj\u0119. Z sukcesem uda\u0142o si\u0119 natomiast uruchomi\u0107 kilka podmodu\u0142\u00f3w aplikacji. Wyniki okaza\u0142y si\u0119 niejednoznaczne. W cz\u0119\u015bci modu\u0142\u00f3w wydajno\u015b\u0107 znacz\u0105co wzros\u0142a, a w cz\u0119\u015bci w\u0142a\u015bciwie nie uleg\u0142a zmianie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/\/Source: https:\/\/techsparx.com\/nodejs\/bun\/speed-test.html\n$ npm run bench\n\n> bench@1.0.0 bench\n> npm-run-all render:node render:bun\n\n> bench@1.0.0 render:node\n> node render-node.mjs\n\ncpu: Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz\nruntime: node v18.6.0 (x64-linux)\n\nbenchmark            time (avg)             (min \u2026 max)\n-------------------------------------------------------\nliteral          133.73 ns\/iter (119.76 ns \u2026 661.32 ns)\nliquid-join       30.26 \u00b5s\/iter    (18.04 \u00b5s \u2026 3.66 ms)\ncheerio          130.17 \u00b5s\/iter    (78.42 \u00b5s \u2026 5.04 ms)\n\n> bench@1.0.0 render:bun\n> bun render-bun.js\n\ncpu: Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz\nruntime: bun 0.1.4 (x64-linux)\n\nbenchmark                 time (avg)             (min \u2026 max)\n------------------------------------------------------------\nliteral               129.64 ns\/iter (107.87 ns \u2026 534.11 ns)\nliquid-list           125.84 \u00b5s\/iter    (87.41 \u00b5s \u2026 2.12 ms)\ncheerio                68.81 \u00b5s\/iter    (43.25 \u00b5s \u2026 2.09 ms)<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/\/Source: https:\/\/techsparx.com\/nodejs\/bun\/speed-test.html\n$ npm run bench\n\n> bench@1.0.0 bench\n> npm-run-all render:node render:bun\n\n> bench@1.0.0 render:node\n> node render-node.mjs\n\ncpu: Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz\nruntime: node v18.6.0 (x64-linux)\n\nbenchmark            time (avg)             (min \u2026 max)\n-------------------------------------------------------\nliteral          133.73 ns\/iter (119.76 ns \u2026 661.32 ns)\nliquid-join       30.26 \u00b5s\/iter    (18.04 \u00b5s \u2026 3.66 ms)\ncheerio          130.17 \u00b5s\/iter    (78.42 \u00b5s \u2026 5.04 ms)\n\n> bench@1.0.0 render:bun\n> bun render-bun.js\n\ncpu: Intel(R) Core(TM) i7-5600U CPU @ 2.60GHz\nruntime: bun 0.1.4 (x64-linux)\n\nbenchmark                 time (avg)             (min \u2026 max)\n------------------------------------------------------------\nliteral               129.64 ns\/iter (107.87 ns \u2026 534.11 ns)\nliquid-list           125.84 \u00b5s\/iter    (87.41 \u00b5s \u2026 2.12 ms)\ncheerio                68.81 \u00b5s\/iter    (43.25 \u00b5s \u2026 2.09 ms)<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6198,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow56j.jpeg\" alt=\"\" class=\"wp-image-6198\"\/><figcaption>Pierwsze benchmarki Davida Gerron, kt\u00f3re rozesz\u0142y si\u0119 po sieci, wskazywa\u0142y na prawie identyczn\u0105 wydajno\u015b\u0107 Node.js i Bun. Jak si\u0119 potem okaza\u0142o, ze wzgl\u0119du na bug w interpretacji hashbang przez Bun, wszystkie testy by\u0142y odpalane na Node.js&nbsp;<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow56j.jpeg\" alt=\"\" class=\"wp-image-6198\"\/><figcaption>Pierwsze benchmarki Davida Gerron, kt\u00f3re rozesz\u0142y si\u0119 po sieci, wskazywa\u0142y na prawie identyczn\u0105 wydajno\u015b\u0107 Node.js i Bun. Jak si\u0119 potem okaza\u0142o, ze wzgl\u0119du na bug w interpretacji hashbang przez Bun, wszystkie testy by\u0142y odpalane na Node.js&nbsp;<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>David Gerron w swoim blogpo\u015bcie zwraca r\u00f3wnie\u017c uwag\u0119 na konsekwencje dla ca\u0142ego \u015brodowiska jakie mo\u017ce przynie\u015b\u0107 rozw\u00f3j Buna. W ekosystemie Javy rozwijanych jest wiele implementacji JVM, a do weryfikacji ich kompatybilno\u015bci wykorzystywany jest zestaw test\u00f3w nazywanych TCK. Do tej pory nie doczekali\u015bmy si\u0119 odpowiednika takich test\u00f3w dla Node, ale z du\u017cym prawdopodobie\u0144stwem testy tworzone na potrzeby Buna b\u0119d\u0105 \u015bwietnym zal\u0105\u017ckiem do dalszej pracy. Kto wie, mo\u017ce za kilka lat w \u015brodowisku Node.js b\u0119dziemy mie\u0107 tak\u0105 sam\u0105 r\u00f3\u017cnorodno\u015b\u0107 \u015brodowisk uruchomieniowych z jak\u0105 mamy do czynienia teraz w Javie.<\/p>\n","innerContent":["\n<p>David Gerron w swoim blogpo\u015bcie zwraca r\u00f3wnie\u017c uwag\u0119 na konsekwencje dla ca\u0142ego \u015brodowiska jakie mo\u017ce przynie\u015b\u0107 rozw\u00f3j Buna. W ekosystemie Javy rozwijanych jest wiele implementacji JVM, a do weryfikacji ich kompatybilno\u015bci wykorzystywany jest zestaw test\u00f3w nazywanych TCK. Do tej pory nie doczekali\u015bmy si\u0119 odpowiednika takich test\u00f3w dla Node, ale z du\u017cym prawdopodobie\u0144stwem testy tworzone na potrzeby Buna b\u0119d\u0105 \u015bwietnym zal\u0105\u017ckiem do dalszej pracy. Kto wie, mo\u017ce za kilka lat w \u015brodowisku Node.js b\u0119dziemy mie\u0107 tak\u0105 sam\u0105 r\u00f3\u017cnorodno\u015b\u0107 \u015brodowisk uruchomieniowych z jak\u0105 mamy do czynienia teraz w Javie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Mam wra\u017cenie, \u017ce agresywny marketing wok\u00f3\u0142 wydajno\u015bci odbi\u0142 si\u0119 Bun troch\u0119 czkawk\u0105. Pod przykrywk\u0105 alternatywy dla Node.js wprowadza on bowiem ca\u0142kiem sporo usprawnie\u0144. Podobnie jak w przypadku Deno, TypeScript jest natywnie wspieranym j\u0119zykiem. Bun jest te\u017c alternatyw\u0105 dla NPM, kt\u00f3ra jest nawet do 100x szybsza. To sprawia, \u017ce bez problemu mo\u017ce stawa\u0107 w szranki chocia\u017cby z pnpm. Bun udost\u0119pnia&nbsp; te\u017c API do tworzenia makr, czyli kodu generowanego podczas kompilacji z dost\u0119pem do drzewa AST i metadanych typ\u00f3w. Do pakowania aplikacji Bun wykorzystuje niesamowicie szybkiego esbuild skompilowanego przy u\u017cyciu Ziga. Szczerze m\u00f3wi\u0105c ,wszystkie te funkcjonalno\u015bci brzmi\u0105 du\u017co ciekawiej ni\u017c pusty slogan: szybszy Node.js.<\/p>\n","innerContent":["\n<p>Mam wra\u017cenie, \u017ce agresywny marketing wok\u00f3\u0142 wydajno\u015bci odbi\u0142 si\u0119 Bun troch\u0119 czkawk\u0105. Pod przykrywk\u0105 alternatywy dla Node.js wprowadza on bowiem ca\u0142kiem sporo usprawnie\u0144. Podobnie jak w przypadku Deno, TypeScript jest natywnie wspieranym j\u0119zykiem. Bun jest te\u017c alternatyw\u0105 dla NPM, kt\u00f3ra jest nawet do 100x szybsza. To sprawia, \u017ce bez problemu mo\u017ce stawa\u0107 w szranki chocia\u017cby z pnpm. Bun udost\u0119pnia&nbsp; te\u017c API do tworzenia makr, czyli kodu generowanego podczas kompilacji z dost\u0119pem do drzewa AST i metadanych typ\u00f3w. Do pakowania aplikacji Bun wykorzystuje niesamowicie szybkiego esbuild skompilowanego przy u\u017cyciu Ziga. Szczerze m\u00f3wi\u0105c ,wszystkie te funkcjonalno\u015bci brzmi\u0105 du\u017co ciekawiej ni\u017c pusty slogan: szybszy Node.js.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6199,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-1.jpeg\" alt=\"\" class=\"wp-image-6199\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-1.jpeg\" alt=\"\" class=\"wp-image-6199\"\/><\/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:\/\/bun.sh\/\">https:\/\/bun.sh\/<\/a><br><a href=\"https:\/\/techsparx.com\/nodejs\/bun\/1st-trial.html\">https:\/\/techsparx.com\/nodejs\/bun\/1st-trial.html<\/a><br><a href=\"https:\/\/techsparx.com\/nodejs\/bun\/speed-test.html\">https:\/\/techsparx.com\/nodejs\/bun\/speed-test.html<\/a><br><a href=\"https:\/\/www.lunasec.io\/docs\/blog\/bun-first-look\/\">https:\/\/www.lunasec.io\/docs\/blog\/bun-first-look\/<\/a><br><a href=\"https:\/\/www.youtube.com\/watch?v=8wTulvlllGQ\">https:\/\/www.youtube.com\/watch?v=8wTulvlllGQ<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/bun.sh\/\">https:\/\/bun.sh\/<\/a><br><a href=\"https:\/\/techsparx.com\/nodejs\/bun\/1st-trial.html\">https:\/\/techsparx.com\/nodejs\/bun\/1st-trial.html<\/a><br><a href=\"https:\/\/techsparx.com\/nodejs\/bun\/speed-test.html\">https:\/\/techsparx.com\/nodejs\/bun\/speed-test.html<\/a><br><a href=\"https:\/\/www.lunasec.io\/docs\/blog\/bun-first-look\/\">https:\/\/www.lunasec.io\/docs\/blog\/bun-first-look\/<\/a><br><a href=\"https:\/\/www.youtube.com\/watch?v=8wTulvlllGQ\">https:\/\/www.youtube.com\/watch?v=8wTulvlllGQ<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Discord na Androidzie zosta\u0142 przepisany do React Native<\/h2>\n","innerContent":["\n<h2>2. Discord na Androidzie zosta\u0142 przepisany do React Native<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W minionym tygodniu Discord og\u0142osi\u0142, \u017ce ich aplikacja na Androida zosta\u0142a przepisana do React Native. Do tej pory wersja komunikatora dla systemu Android by\u0142a t\u0105, kt\u00f3ra pod wzgl\u0119dem funkcjonalno\u015bci pozostawa\u0142a w tyle. Dzi\u0119ki migracji do React Native niezale\u017cnie od urz\u0105dzenia, u\u017cytkownicy wreszcie b\u0119d\u0105 mogli cieszy\u0107 si\u0119 sp\u00f3jnym do\u015bwiadczeniem.<\/p>\n","innerContent":["\n<p>W minionym tygodniu Discord og\u0142osi\u0142, \u017ce ich aplikacja na Androida zosta\u0142a przepisana do React Native. Do tej pory wersja komunikatora dla systemu Android by\u0142a t\u0105, kt\u00f3ra pod wzgl\u0119dem funkcjonalno\u015bci pozostawa\u0142a w tyle. Dzi\u0119ki migracji do React Native niezale\u017cnie od urz\u0105dzenia, u\u017cytkownicy wreszcie b\u0119d\u0105 mogli cieszy\u0107 si\u0119 sp\u00f3jnym do\u015bwiadczeniem.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Decyzja o migracji zosta\u0142a podj\u0119ta przede wszystkim ze wzgl\u0119du na potencjaln\u0105 mo\u017cliwo\u015b\u0107 wsp\u00f3\u0142dzielenia sporej cz\u0119\u015bci kodu pomi\u0119dzy r\u00f3\u017cnymi wersjami aplikacji. Wersja Discord na iOS u\u017cywa React Native w\u0142a\u015bciwie od pierwszego wydania tego narz\u0119dzia. Wersja desktopowa jest aplikacj\u0105 webow\u0105 zapakowan\u0105 w Electrona. Oznacza to, \u017ce wszystkie wersje Discorda oparte s\u0105 aktualnie o JavaScript.<\/p>\n","innerContent":["\n<p>Decyzja o migracji zosta\u0142a podj\u0119ta przede wszystkim ze wzgl\u0119du na potencjaln\u0105 mo\u017cliwo\u015b\u0107 wsp\u00f3\u0142dzielenia sporej cz\u0119\u015bci kodu pomi\u0119dzy r\u00f3\u017cnymi wersjami aplikacji. Wersja Discord na iOS u\u017cywa React Native w\u0142a\u015bciwie od pierwszego wydania tego narz\u0119dzia. Wersja desktopowa jest aplikacj\u0105 webow\u0105 zapakowan\u0105 w Electrona. Oznacza to, \u017ce wszystkie wersje Discorda oparte s\u0105 aktualnie o JavaScript.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6200,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow0lw.jpeg\" alt=\"\" class=\"wp-image-6200\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/6ow0lw.jpeg\" alt=\"\" class=\"wp-image-6200\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na koniec warto podkre\u015bli\u0107 jeszcze, \u017ce zesp\u00f3\u0142 Discorda nie zdecydowa\u0142 si\u0119 ca\u0142kowicie uwsp\u00f3lni\u0107 aplikacji na iOS i Androida. Taka architektura ma pozwoli\u0107 na optymalne wykorzystanie mo\u017cliwo\u015bci jakie daje konkretny system operacyjny.<\/p>\n","innerContent":["\n<p>Na koniec warto podkre\u015bli\u0107 jeszcze, \u017ce zesp\u00f3\u0142 Discorda nie zdecydowa\u0142 si\u0119 ca\u0142kowicie uwsp\u00f3lni\u0107 aplikacji na iOS i Androida. Taka architektura ma pozwoli\u0107 na optymalne wykorzystanie mo\u017cliwo\u015bci jakie daje konkretny system operacyjny.<\/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:\/\/discord.com\/blog\/android-react-native-framework-update\">https:\/\/discord.com\/blog\/android-react-native-framework-update<\/a><br><a href=\"https:\/\/www.theverge.com\/2022\/8\/1\/23286860\/discord-react-native-android-new-app-ios-new-updates-features\">https:\/\/www.theverge.com\/2022\/8\/1\/23286860\/discord-react-native-android-new-app-ios-new-updates-features<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/discord.com\/blog\/android-react-native-framework-update\">https:\/\/discord.com\/blog\/android-react-native-framework-update<\/a><br><a href=\"https:\/\/www.theverge.com\/2022\/8\/1\/23286860\/discord-react-native-android-new-app-ios-new-updates-features\">https:\/\/www.theverge.com\/2022\/8\/1\/23286860\/discord-react-native-android-new-app-ios-new-updates-features<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Lepsza enkapsulacja `transform` dost\u0119pna ju\u017c we wszystkich przegl\u0105darkach<\/h2>\n","innerContent":["\n<h2>3. Lepsza enkapsulacja `transform` dost\u0119pna ju\u017c we wszystkich przegl\u0105darkach<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wydany pocz\u0105tkiem miesi\u0105ca Chrome 104 dostarczy\u0142 funkcjonalno\u015b\u0107 umo\u017cliwiaj\u0105c\u0105 rozdzielenie jednego `transform` na 3 osobne w\u0142a\u015bciwo\u015bci - `scale`, `rotate` i `translate`. Tym samym funkcjonalno\u015b\u0107 ta dost\u0119pna jest ju\u017c we wszystkich popularnych przegl\u0105darkach i bez obaw mo\u017cemy zacz\u0105\u0107 u\u017cywa\u0107 jej w naszych aplikacjach.<\/p>\n","innerContent":["\n<p>Wydany pocz\u0105tkiem miesi\u0105ca Chrome 104 dostarczy\u0142 funkcjonalno\u015b\u0107 umo\u017cliwiaj\u0105c\u0105 rozdzielenie jednego `transform` na 3 osobne w\u0142a\u015bciwo\u015bci - `scale`, `rotate` i `translate`. Tym samym funkcjonalno\u015b\u0107 ta dost\u0119pna jest ju\u017c we wszystkich popularnych przegl\u0105darkach i bez obaw mo\u017cemy zacz\u0105\u0107 u\u017cywa\u0107 jej w naszych aplikacjach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z nowej funkcjonalno\u015bci skorzystamy przede wszystkim przy tworzeniu animacji. Do tej pory je\u015bli chcieli\u015bmy do animacji wykorzysta\u0107 kilka w\u0142a\u015bciwo\u015bci to nale\u017ca\u0142o wyliczy\u0107 ich stan we wszystkich klatkach kluczowych. Teraz dzi\u0119ki mo\u017cliwo\u015bci rozdzielenia w\u0142a\u015bciwo\u015bci wymagane b\u0119dzie zadeklarowanie tylko tych, kt\u00f3re podlega\u0107 b\u0119d\u0105 zmianie. Je\u015bli t\u0142umacz\u0119 to zbyt zawile, to przyk\u0142ad poni\u017cej powinien rozwia\u0107 Wasze w\u0105tpliwo\u015bci.<\/p>\n","innerContent":["\n<p>Z nowej funkcjonalno\u015bci skorzystamy przede wszystkim przy tworzeniu animacji. Do tej pory je\u015bli chcieli\u015bmy do animacji wykorzysta\u0107 kilka w\u0142a\u015bciwo\u015bci to nale\u017ca\u0142o wyliczy\u0107 ich stan we wszystkich klatkach kluczowych. Teraz dzi\u0119ki mo\u017cliwo\u015bci rozdzielenia w\u0142a\u015bciwo\u015bci wymagane b\u0119dzie zadeklarowanie tylko tych, kt\u00f3re podlega\u0107 b\u0119d\u0105 zmianie. Je\u015bli t\u0142umacz\u0119 to zbyt zawile, to przyk\u0142ad poni\u017cej powinien rozwia\u0107 Wasze w\u0105tpliwo\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6201,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/AF5n6UlhcuQ5UNKemX8M.jpg\" alt=\"\" class=\"wp-image-6201\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/AF5n6UlhcuQ5UNKemX8M.jpg\" alt=\"\" class=\"wp-image-6201\"\/><\/figure>\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\">\/* Old syntax *\/\n@keyframes anim {\n  0% { transform: translateX(0%); }\n  5% { transform: translateX(5%) rotate(90deg) scale(1.2); }\n  10% { transform: translateX(10%) rotate(180deg) scale(1.2); }\n  90% { transform: translateX(90%) rotate(180deg) scale(1.2); }\n  95% { transform: translateX(95%) rotate(270deg) scale(1.2); }\n  100% { transform: translateX(100%) rotate(360deg); }\n}\n\n.target {\n  animation: anim 2s;\n  animation-fill-mode: forwards;\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-css\">\/* Old syntax *\/\n@keyframes anim {\n  0% { transform: translateX(0%); }\n  5% { transform: translateX(5%) rotate(90deg) scale(1.2); }\n  10% { transform: translateX(10%) rotate(180deg) scale(1.2); }\n  90% { transform: translateX(90%) rotate(180deg) scale(1.2); }\n  95% { transform: translateX(95%) rotate(270deg) scale(1.2); }\n  100% { transform: translateX(100%) rotate(360deg); }\n}\n\n.target {\n  animation: anim 2s;\n  animation-fill-mode: forwards;\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/* New syntax *\/\n@keyframes anim {\n  0% { translate: 0% 0; }\n  100% { translate: 100% 0; }\n\n  0%, 100% { scale: 1; }\n  5%, 95% { scale: 1.2; }\n\n  0% { rotate: 0deg; }\n  10%, 90% { rotate: 180deg; }\n  100% { rotate: 360deg; }\n}\n\n.target {\n  animation: anim 2s;\n  animation-fill-mode: forwards;\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">\/* New syntax *\/\n@keyframes anim {\n  0% { translate: 0% 0; }\n  100% { translate: 100% 0; }\n\n  0%, 100% { scale: 1; }\n  5%, 95% { scale: 1.2; }\n\n  0% { rotate: 0deg; }\n  10%, 90% { rotate: 180deg; }\n  100% { rotate: 360deg; }\n}\n\n.target {\n  animation: anim 2s;\n  animation-fill-mode: forwards;\n}<\/code><\/pre>\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:\/\/web.dev\/css-individual-transform-properties\/\">https:\/\/web.dev\/css-individual-transform-properties\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/web.dev\/css-individual-transform-properties\/\">https:\/\/web.dev\/css-individual-transform-properties\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>4. Docusaurus 2.0<\/h2>\n","innerContent":["\n<h2>4. Docusaurus 2.0<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Docusaurus to narz\u0119dzie do tworzenia rozbudowanych dokumentacji.O ile o samym projekcie mogli\u015bcie do tej pory nie s\u0142ysze\u0107, to na pewno mieli\u015bcie ju\u017c okazj\u0119 korzysta\u0107 z opartych o niego stron. W\u015br\u00f3d najpopularniejszych bibliotek wykorzystuj\u0105cych Docusaurus znajdziemy bowiem mi\u0119dzy innymi&nbsp; Prettiera, Babela, React Native czy Ionica.<\/p>\n","innerContent":["\n<p>Docusaurus to narz\u0119dzie do tworzenia rozbudowanych dokumentacji.O ile o samym projekcie mogli\u015bcie do tej pory nie s\u0142ysze\u0107, to na pewno mieli\u015bcie ju\u017c okazj\u0119 korzysta\u0107 z opartych o niego stron. W\u015br\u00f3d najpopularniejszych bibliotek wykorzystuj\u0105cych Docusaurus znajdziemy bowiem mi\u0119dzy innymi&nbsp; Prettiera, Babela, React Native czy Ionica.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6202,"width":417,"height":547,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/CgGkN6YVAAAZ3_1.jpeg\" alt=\"\" class=\"wp-image-6202\" width=\"417\" height=\"547\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/CgGkN6YVAAAZ3_1.jpeg\" alt=\"\" class=\"wp-image-6202\" width=\"417\" height=\"547\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W minionym tygodniu po 4 latach rozwoju wreszcie doczekali\u015bmy si\u0119 kolejnej wersji narz\u0119dzia oznaczonej numerkiem 2.0. W\u015br\u00f3d nowo\u015bci znajdziemy mi\u0119dzy innymi:<\/p>\n","innerContent":["\n<p>W minionym tygodniu po 4 latach rozwoju wreszcie doczekali\u015bmy si\u0119 kolejnej wersji narz\u0119dzia oznaczonej numerkiem 2.0. W\u015br\u00f3d nowo\u015bci znajdziemy mi\u0119dzy innymi:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li>Wsparcie dla MDX, czyli formatu kt\u00f3ry umo\u017cliwia wzbogacenie Markdownu o Reactowe komponenty. Dzi\u0119ki temu mo\u017cliwe b\u0119dzie szybkie i wygodne tworzenie interaktywnej dokumentacji.<\/li><li>Wzorem Next.js i Remix, r\u00f3wnie\u017c Docusaurus b\u0119dzie opiera\u0142 swoj\u0105 nawigacj\u0119 o struktur\u0119 plik\u00f3w.<\/li><li>Docusaurus z architektury monolitycznej przemigrowany zosta\u0142 na znacznie bardziej elastyczna architektur\u0119 modularn\u0105. Od teraz ka\u017cda funkcjonalno\u015b\u0107 taka jak dokumentacja, blog czy wyszukiwarka ma sw\u00f3j osobny plugin. Rewolucja pod wzgl\u0119dem architektury zwiastuje r\u00f3wnie\u017c rych\u0142y nap\u0142yw wtyczek od spo\u0142eczno\u015bci.<\/li><li>Je\u015bli otworzycie obok siebie kilka dokumentacji opartych o Docusaurus 1.0 to szybko zorientujecie si\u0119, \u017ce wygl\u0105daj\u0105 one w\u0142a\u015bciwie identycznie. Docusaurus 2.0 udost\u0119pnia publiczne API do stylowania, kt\u00f3re umo\u017cliwi wyczekiwan\u0105 od dawna personalizacj\u0119.<\/li><\/ul>\n","innerContent":["\n<ul><li>Wsparcie dla MDX, czyli formatu kt\u00f3ry umo\u017cliwia wzbogacenie Markdownu o Reactowe komponenty. Dzi\u0119ki temu mo\u017cliwe b\u0119dzie szybkie i wygodne tworzenie interaktywnej dokumentacji.<\/li><li>Wzorem Next.js i Remix, r\u00f3wnie\u017c Docusaurus b\u0119dzie opiera\u0142 swoj\u0105 nawigacj\u0119 o struktur\u0119 plik\u00f3w.<\/li><li>Docusaurus z architektury monolitycznej przemigrowany zosta\u0142 na znacznie bardziej elastyczna architektur\u0119 modularn\u0105. Od teraz ka\u017cda funkcjonalno\u015b\u0107 taka jak dokumentacja, blog czy wyszukiwarka ma sw\u00f3j osobny plugin. Rewolucja pod wzgl\u0119dem architektury zwiastuje r\u00f3wnie\u017c rych\u0142y nap\u0142yw wtyczek od spo\u0142eczno\u015bci.<\/li><li>Je\u015bli otworzycie obok siebie kilka dokumentacji opartych o Docusaurus 1.0 to szybko zorientujecie si\u0119, \u017ce wygl\u0105daj\u0105 one w\u0142a\u015bciwie identycznie. Docusaurus 2.0 udost\u0119pnia publiczne API do stylowania, kt\u00f3re umo\u017cliwi wyczekiwan\u0105 od dawna personalizacj\u0119.<\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na zako\u0144czenie ciekawostka: wersje alfa i beta Docusaurusa by\u0142y publicznie dost\u0119pne ju\u017c od ponad dw\u00f3ch lat. Znalaz\u0142o si\u0119 te\u017c sporo \u015bmia\u0142k\u00f3w, kt\u00f3rzy zdecydowali si\u0119 zmigrowa\u0107 do wersji 2.0 jeszcze przed wydaniem stabilnej wersji. Jak chwal\u0105 si\u0119 tw\u00f3rcy, ju\u017c w po\u0142owie 2020 roku wersja 2.0 przeros\u0142a popularno\u015bci\u0105 stabiln\u0105 wersj\u0119 1.0.<\/p>\n","innerContent":["\n<p>Na zako\u0144czenie ciekawostka: wersje alfa i beta Docusaurusa by\u0142y publicznie dost\u0119pne ju\u017c od ponad dw\u00f3ch lat. Znalaz\u0142o si\u0119 te\u017c sporo \u015bmia\u0142k\u00f3w, kt\u00f3rzy zdecydowali si\u0119 zmigrowa\u0107 do wersji 2.0 jeszcze przed wydaniem stabilnej wersji. Jak chwal\u0105 si\u0119 tw\u00f3rcy, ju\u017c w po\u0142owie 2020 roku wersja 2.0 przeros\u0142a popularno\u015bci\u0105 stabiln\u0105 wersj\u0119 1.0.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6203,"width":712,"height":382,"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\/08\/npm-downloads-f9d754a81ff372a5bae83c8751195e2b-1024x550.png\" alt=\"\" class=\"wp-image-6203\" width=\"712\" height=\"382\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/npm-downloads-f9d754a81ff372a5bae83c8751195e2b-1024x550.png\" alt=\"\" class=\"wp-image-6203\" width=\"712\" height=\"382\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli zastanawiacie si\u0119 dlaczego wersja druga tak d\u0142ugo tkwi\u0142a we wczesnym dost\u0119pie to nie jeste\u015bcie jedyni. Jak t\u0142umacz\u0105 autorzy narz\u0119dzia, najwi\u0119kszym wyzwaniem by\u0142o przygotowanie stabilnego i publicznego API do stylowania. Do tej pory takie API nie istnia\u0142o, a wielu klient\u00f3w do stylowania swoich dokumentacji wykorzystywa\u0142o wewn\u0119trzne zale\u017cno\u015bci. Jak to zwykle bywa w takich przypadkach, dla takich klient\u00f3w migracja by\u0142a bardzo trudna. Z perspektywy zespo\u0142u rozwijaj\u0105cego bibliotek\u0119 trudne by\u0142o natomiast rozdzielenie API publicznego od niepublicznego oraz odpowiednie uporz\u0105dkowanie tego pierwszego. Jak zapowiadaj\u0105 tw\u00f3rcy, od teraz kolejnych du\u017cych wyda\u0144 mo\u017cemy spodziewa\u0107 si\u0119 co 2-4 miesi\u0105ce.<\/p>\n","innerContent":["\n<p>Je\u015bli zastanawiacie si\u0119 dlaczego wersja druga tak d\u0142ugo tkwi\u0142a we wczesnym dost\u0119pie to nie jeste\u015bcie jedyni. Jak t\u0142umacz\u0105 autorzy narz\u0119dzia, najwi\u0119kszym wyzwaniem by\u0142o przygotowanie stabilnego i publicznego API do stylowania. Do tej pory takie API nie istnia\u0142o, a wielu klient\u00f3w do stylowania swoich dokumentacji wykorzystywa\u0142o wewn\u0119trzne zale\u017cno\u015bci. Jak to zwykle bywa w takich przypadkach, dla takich klient\u00f3w migracja by\u0142a bardzo trudna. Z perspektywy zespo\u0142u rozwijaj\u0105cego bibliotek\u0119 trudne by\u0142o natomiast rozdzielenie API publicznego od niepublicznego oraz odpowiednie uporz\u0105dkowanie tego pierwszego. Jak zapowiadaj\u0105 tw\u00f3rcy, od teraz kolejnych du\u017cych wyda\u0144 mo\u017cemy spodziewa\u0107 si\u0119 co 2-4 miesi\u0105ce.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":6204,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-2.jpeg\" alt=\"\" class=\"wp-image-6204\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/download-2.jpeg\" alt=\"\" class=\"wp-image-6204\"\/><\/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:\/\/docusaurus.io\/blog\/2022\/08\/01\/announcing-docusaurus-2.0\">https:\/\/docusaurus.io\/blog\/2022\/08\/01\/announcing-docusaurus-2.0<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/docusaurus.io\/blog\/2022\/08\/01\/announcing-docusaurus-2.0\">https:\/\/docusaurus.io\/blog\/2022\/08\/01\/announcing-docusaurus-2.0<\/a><\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9935","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=9935"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9935\/revisions"}],"predecessor-version":[{"id":10461,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9935\/revisions\/10461"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/8996"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=9935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=9935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=9935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}