
  <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
      <title>Kamil Owczarek | Senior Full-Stack Engineer</title>
      <link>https://whoisarjen.com/pl/blog</link>
      <description>Senior Full-Stack Engineer specjalizujący się w wydajnym e-commerce, skalowalnej architekturze i optymalizacji wydajności. TypeScript, React, Next.js, Vue, Nuxt, PostgreSQL, Redis.</description>
      <language>pl</language>
      <managingEditor>kamilow97@gmail.com (Kamil Owczarek)</managingEditor>
      <webMaster>kamilow97@gmail.com (Kamil Owczarek)</webMaster>
      <lastBuildDate>Mon, 06 Apr 2026 13:00:00 GMT</lastBuildDate>
      <atom:link href="https://whoisarjen.com/pl/tags/performance/feed.xml" rel="self" type="application/rss+xml"/>
      
  <item>
    <guid>https://whoisarjen.com/pl/blog/lazy-loading-toast-library-bundle-optimization</guid>
    <title>Jak zdjęliśmy 22 KB z entry bundle&#39;a, lazy-loadując bibliotekę do toastów</title>
    <link>https://whoisarjen.com/pl/blog/lazy-loading-toast-library-bundle-optimization</link>
    <description>vue3-toastify lądował w entry chunku każdej strony — także tych, które nigdy nie pokazują toasta. Composable z dynamicznym importem przeniósł go do osobnego chunka ładowanego przy pierwszym użyciu, zdejmując 22 KB z entry.js i 9 KB z entry.css.</description>
    <pubDate>Mon, 06 Apr 2026 13:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Performance</category><category>Vue</category><category>Nuxt</category><category>Bundle Optimization</category><category>Dynamic Import</category><category>TypeScript</category><category>Web Vitals</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/parallel-ssr-data-fetching-vue-onserverprefetch</guid>
    <title>Usunęliśmy jedną linijkę kodu i nasz SSR przyspieszył trzykrotnie</title>
    <link>https://whoisarjen.com/pl/blog/parallel-ssr-data-fetching-vue-onserverprefetch</link>
    <description>Jak pojedynczy inline&#39;owy await w naszym composable&#39;u Vue po cichu serializował całe pobieranie danych podczas renderowania na serwerze i jak onServerPrefetch naprawił to bez żadnych zmian w architekturze.</description>
    <pubDate>Mon, 06 Apr 2026 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Vue</category><category>SSR</category><category>Performance</category><category>Nuxt</category><category>TanStack Query</category><category>TypeScript</category><category>Optimization</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/redirect-constants-client-bundle-bloat-server-migration</guid>
    <title>3842 linie stałych z przekierowaniami ukrywały się w naszym client bundle</title>
    <link>https://whoisarjen.com/pl/blog/redirect-constants-client-bundle-bloat-server-migration</link>
    <description>Jak odkryliśmy, że trzy pliki ze stałymi przekierowań wysyłają 316 KB martwego balastu do każdej przeglądarki, i dlaczego przeniesienie ich do server middleware z fallbackiem w bazie ucięło nasz bundle JavaScriptu o jedną trzecią.</description>
    <pubDate>Mon, 06 Apr 2026 11:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>JavaScript</category><category>Performance</category><category>Bundle Size</category><category>SEO</category><category>Redirects</category><category>Server-Side</category><category>Nuxt</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/responsive-images-sizes-attribute-performance</guid>
    <title>Atrybut sizes to najskuteczniejsza optymalizacja obrazów, której nie używasz</title>
    <link>https://whoisarjen.com/pl/blog/responsive-images-sizes-attribute-performance</link>
    <description>Odkryliśmy, że nasz pipeline optymalizacji obrazów generował idealne wartości srcset, które przeglądarka całkowicie ignorowała. Naprawą okazał się pojedynczy atrybut HTML, który od lat traktowaliśmy jako opcjonalny.</description>
    <pubDate>Mon, 06 Apr 2026 10:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Performance</category><category>Images</category><category>Web Vitals</category><category>Responsive Design</category><category>Nuxt</category><category>Frontend</category><category>Optimization</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/history-replacestate-vs-router-replace-url-canonicalization</guid>
    <title>Przestań używać Router.replace() do kanonikalizacji adresów — sięgnij po History.replaceState()</title>
    <link>https://whoisarjen.com/pl/blog/history-replacestate-vs-router-replace-url-canonicalization</link>
    <description>Przepalaliśmy pełne cykle nawigacji Vue Routera tylko po to, żeby poprawić slug w adresie karty produktu. Zamiana router.replace() na history.replaceState() wycięła zbędne re-rendery, naprawiła popsute meta tagi SEO i sprowadziła kanonikalizację po stronie klienta do jednego wywołania, które nie dotyka DOM-u.</description>
    <pubDate>Mon, 06 Apr 2026 09:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Vue.js</category><category>Performance</category><category>SEO</category><category>Nuxt</category><category>URL Canonicalization</category><category>SSR</category><category>Router</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/replacing-redis-with-postgres-cache-migration</guid>
    <title>Zastąpiliśmy Redisa PostgreSQL-em w cache&#39;owaniu — oto co z tego wyszło</title>
    <link>https://whoisarjen.com/pl/blog/replacing-redis-with-postgres-cache-migration</link>
    <description>Nasz cache na Redisie ciągle zrywał połączenia TLS, kładąc całą warstwę cache&#39;owania. Po benchmarku, który omal nie wysłał nas w złą stronę, przenieśliśmy się na PostgreSQL — ta sama wydajność, zero dropów, o jeden serwis mniej do utrzymania.</description>
    <pubDate>Mon, 06 Apr 2026 08:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Caching</category><category>PostgreSQL</category><category>Redis</category><category>Performance</category><category>Architecture</category><category>Serverless</category><category>Migration</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/splitting-monolith-into-services-fix-api-bugs</guid>
    <title>Kiedy podwojenie pamięci serwera to zły fix: jak rozdzielenie serwisów zakończyło nasz kryzys OOM</title>
    <link>https://whoisarjen.com/pl/blog/splitting-monolith-into-services-fix-api-bugs</link>
    <description>Nasza monolityczna aplikacja Nuxt regularnie wykładała się na limicie 2 GB pamięci. Podbiliśmy go do 4 GB — dwa razy drożej, ten sam problem u podstaw. Po pięciu dniach nieudanych optymalizacji (kompresja strumieniowa, polling po Redisie, cache SWR) rozbiliśmy monolit na trzy niezależne serwisy. Każdy dostał własne 2 GB, łączny koszt spadł, a crashe się skończyły.</description>
    <pubDate>Sat, 14 Mar 2026 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Architecture</category><category>Nuxt</category><category>Nitro</category><category>Memory</category><category>Performance</category><category>Serverless</category><category>Vercel</category><category>TypeScript</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/the-api-payload-trap-why-your-server-shouldnt-touch-the-bytes</guid>
    <title>Pułapka payloadu w API: dlaczego twój serwer nie powinien dotykać bajtów</title>
    <link>https://whoisarjen.com/pl/blog/the-api-payload-trap-why-your-server-shouldnt-touch-the-bytes</link>
    <description>Jak zastąpienie proxowania odpowiedzi API redirectami 307 do podpisanych URL-i CDN wyzerowało koszty transferu na origin i usunęło całą klasę bugów ze streamowaniem.</description>
    <pubDate>Wed, 11 Mar 2026 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>CDN</category><category>Performance</category><category>Architecture</category><category>API Design</category><category>Node.js</category><category>Caching</category><category>Security</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/hidden-languages-wasting-vercel-budget-seo-fix</guid>
    <title>Jak nieopublikowane języki po cichu drenowały nasz budżet na Vercelu i zabiły wydajność na mobile</title>
    <link>https://whoisarjen.com/pl/blog/hidden-languages-wasting-vercel-budget-seo-fix</link>
    <description>Dodaliśmy arabski i portugalski do naszej konfiguracji i18n w Nuxcie, ale zablokowaliśmy je na produkcji. Problem? Sitemapy, tagi hreflang i crawlery nic o tym nie wiedziały — generując tysiące bezużytecznych URL-i, podwajając liczbę zapytań do API i przepalając wywołania funkcji serverless.</description>
    <pubDate>Sat, 14 Feb 2026 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Nuxt</category><category>i18n</category><category>Vercel</category><category>SEO</category><category>Performance</category><category>Sitemap</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/css-radial-gradient-scroll-lag-svg-fix</guid>
    <title>Jak CSS-owy radial-gradient zabił mi płynność scrollowania (i jednolinijkowa poprawka na SVG)</title>
    <link>https://whoisarjen.com/pl/blog/css-radial-gradient-scroll-lag-svg-fix</link>
    <description>Powtarzalny radial-gradient, który świetnie wyglądał w projekcie, zamienił moją stronę w ociężałego potworka. Oto jak namierzyłem winowajcę i naprawiłem go inline SVG w data URI — zero różnicy wizualnej, płynne 60 klatek na sekundę.</description>
    <pubDate>Thu, 12 Feb 2026 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>CSS</category><category>Performance</category><category>SVG</category><category>Nuxt</category><category>Web Vitals</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/optimizing-api-responses-removing-redundant-data</guid>
    <title>Odchudziłem odpowiedzi API o 60%: ukryty koszt spreadowania obiektów</title>
    <link>https://whoisarjen.com/pl/blog/optimizing-api-responses-removing-redundant-data</link>
    <description>Jak zwykły destructuring usunął zbędne obiekty tłumaczeń z odpowiedzi API, odciążył cache i przyspieszył frontend.</description>
    <pubDate>Mon, 29 Dec 2025 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>TypeScript</category><category>API Design</category><category>Performance</category><category>Caching</category><category>Redis</category><category>Nuxt</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/smart-swr-caching-user-context-aware-freshness</guid>
    <title>Inteligentny cache SWR: świeżość danych zależna od kontekstu użytkownika w e-commerce</title>
    <link>https://whoisarjen.com/pl/blog/smart-swr-caching-user-context-aware-freshness</link>
    <description>Jak wdrożyć cache Stale-While-Revalidate, który dostosowuje się do typu użytkownika i wrażliwości endpointu. Klienci B2B dostają świeże stany magazynowe, a anonimowi odwiedzający szybsze odpowiedzi z cache.</description>
    <pubDate>Sun, 28 Dec 2025 19:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Caching</category><category>SWR</category><category>Performance</category><category>E-commerce</category><category>Node.js</category><category>TypeScript</category><category>Redis</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/redis-cache-compression-6x-capacity-1gb-server</guid>
    <title>6x więcej pojemności cache: kompresja Redisa na serwerze 1 GB</title>
    <link>https://whoisarjen.com/pl/blog/redis-cache-compression-6x-capacity-1gb-server</link>
    <description>Jak upchnęliśmy 6x więcej wpisów cache w instancji Redisa o rozmiarze 1 GB, używając kompresji gzip i zachowując przy tym type safety oraz narzut poniżej milisekundy.</description>
    <pubDate>Sun, 28 Dec 2025 18:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Redis</category><category>Performance</category><category>Caching</category><category>Compression</category><category>Node.js</category><category>TypeScript</category><category>Nuxt 3</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/nuxt-ssr-cache-hostname-bug</guid>
    <title>Subtelny bug cache&#39;owania w SSR, który fragmentuje cache: dlaczego url.hostname kłamie podczas renderowania na serwerze</title>
    <link>https://whoisarjen.com/pl/blog/nuxt-ssr-cache-hostname-bug</link>
    <description>Jak pozornie poprawny cache key oparty na url.hostname prowadzi do fragmentacji cache&#39;u między requestami SSR a tymi z przeglądarki i drastycznie obniża cache hit rate w aplikacjach Nuxt/Nitro.</description>
    <pubDate>Sun, 28 Dec 2025 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Nuxt</category><category>SSR</category><category>Caching</category><category>Performance</category><category>Nitro</category><category>TypeScript</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/timestamp-based-cache-invalidation-swr</guid>
    <title>Inwalidacja cache&#39;a w O(1): flagi z timestampem zamiast kasowania kluczy</title>
    <link>https://whoisarjen.com/pl/blog/timestamp-based-cache-invalidation-swr</link>
    <description>Jak zastąpiliśmy powolne czyszczenie cache&#39;a po kluczach natychmiastową inwalidacją opartą na timestampach, nie tracąc przy tym wydajności SWR.</description>
    <pubDate>Sun, 28 Dec 2025 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Performance</category><category>Redis</category><category>Caching</category><category>Nuxt 3</category><category>Architecture</category><category>SWR</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/postgresql-pagination-consistency-different-limit-values</guid>
    <title>Dlaczego różne wartości LIMIT zwracają różne wyniki w PostgreSQL (i jak to naprawić)</title>
    <link>https://whoisarjen.com/pl/blog/postgresql-pagination-consistency-different-limit-values</link>
    <description>Dogłębne spojrzenie na niespójną paginację w PostgreSQL i na to, dlaczego deterministyczne sortowanie w złożonych zapytaniach jest tak ważne — bo nasi użytkownicy dostawali od tego szału</description>
    <pubDate>Sun, 10 Aug 2025 16:32:14 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>PostgreSQL</category><category>Database</category><category>Pagination</category><category>SQL</category><category>Performance</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/nuxt-disable-prefetch-save-costs</guid>
    <title>Jak uciąłem kosztowne skoki transferu, wyłączając prefetch linków w Nuxcie</title>
    <link>https://whoisarjen.com/pl/blog/nuxt-disable-prefetch-save-costs</link>
    <description>Optymalizując projekt w Nuxt 3, odkryłem, że nadmierny automatyczny prefetch napędzał zużycie transferu na Vercelu. Globalne wyłączenie prefetcha mocno ścięło koszty i ruch sieciowy.</description>
    <pubDate>Sat, 09 Aug 2025 18:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Nuxt 3</category><category>Performance</category><category>Prefetch</category><category>Vercel</category><category>Optimization</category><category>Vue</category><category>Bandwidth</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/nuxt-fontawesome-bundle-cost</guid>
    <title>Jak odziedziczyłem problem z Font Awesome za 50 dolarów dziennie w Nuxt 3</title>
    <link>https://whoisarjen.com/pl/blog/nuxt-fontawesome-bundle-cost</link>
    <description>Przejąłem projekt w Nuxt 3, który zjadał ponad 50 dolarów dziennie na transferze w Vercelu. Winowajca? Jeden import z gwiazdką, który wciągał do bundle&#39;a całą bibliotekę Font Awesome. Oto jak go znalazłem i naprawiłem.</description>
    <pubDate>Sat, 09 Aug 2025 13:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Nuxt 3</category><category>Font Awesome</category><category>Performance</category><category>Vercel</category><category>Vue</category><category>Optimization</category><category>Bundle Size</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/92-percent-smaller-bundle-translation-optimization</guid>
    <title>92% mniejszy bundle: jak inteligentne ładowanie tłumaczeń odmieniło naszą międzynarodową stronę</title>
    <link>https://whoisarjen.com/pl/blog/92-percent-smaller-bundle-translation-optimization</link>
    <description>Od czerwonych wyników w Lighthouse do soczystej zieleni: technika lazy loadingu, która ścięła początkowy bundle o 92% i podniosła wydajność o 47%</description>
    <pubDate>Sat, 09 Aug 2025 10:32:14 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Performance</category><category>Optimization</category><category>Lighthouse</category><category>i18n</category><category>Lazy Loading</category><category>Bundle Size</category><category>Nuxt 3</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/ai-search-bar-technical-deep-dive</guid>
    <title>Wyszukiwarka, która sprawia wrażenie AI: techniczny deep dive</title>
    <link>https://whoisarjen.com/pl/blog/ai-search-bar-technical-deep-dive</link>
    <description>Jak zbudowaliśmy wielowarstwowy system wyszukiwania, który rozumie intencję użytkownika, radzi sobie z literówkami i dostarcza trafne wyniki w 9 językach, korzystając z PostgreSQL, TypeScriptu i sprytnych algorytmów</description>
    <pubDate>Mon, 21 Jul 2025 16:32:14 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>PostgreSQL</category><category>Search</category><category>AI</category><category>E-commerce</category><category>Full-text Search</category><category>TypeScript</category><category>Performance</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/core-web-vitals-nuxt3-lcp-cls-fixes</guid>
    <title>Naprawa Core Web Vitals w Nuxt 3: szybkie wygrane w LCP i CLS</title>
    <link>https://whoisarjen.com/pl/blog/core-web-vitals-nuxt3-lcp-cls-fixes</link>
    <description>Proste zmiany, które naprawiają Largest Contentful Paint i Cumulative Layout Shift w Nuxt 3. Preconnect, wymiary obrazków i ukryci zabójcy wydajności.</description>
    <pubDate>Mon, 12 May 2025 13:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>Core Web Vitals</category><category>Performance</category><category>Nuxt 3</category><category>LCP</category><category>CLS</category><category>SEO</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/postgresql-cte-optimization-60-percent-faster-search</guid>
    <title>Wyszukiwarka szybsza o 60-80%: optymalizacja CTE w PostgreSQL pod Node.js</title>
    <link>https://whoisarjen.com/pl/blog/postgresql-cte-optimization-60-percent-faster-search</link>
    <description>Trzy antywzorce SQL, które zabijały wydajność naszej wyszukiwarki, i optymalizacje CTE, które to naprawiły.</description>
    <pubDate>Mon, 05 May 2025 12:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>PostgreSQL</category><category>Performance</category><category>SQL</category><category>Node.js</category><category>Prisma</category><category>Optimization</category>
  </item>

  <item>
    <guid>https://whoisarjen.com/pl/blog/fixing-youtube-error-153-gdpr-compliant</guid>
    <title>Naprawa błędu YouTube 153: sposób zgodny z RODO</title>
    <link>https://whoisarjen.com/pl/blog/fixing-youtube-error-153-gdpr-compliant</link>
    <description>Jak naprawić błąd 153 przy odtwarzaniu osadzonych filmów z YouTube, przechodząc na youtube-nocookie.com, i przy okazji zyskać na wydajności oraz prywatności.</description>
    <pubDate>Tue, 22 Apr 2025 11:00:00 GMT</pubDate>
    <author>kamilow97@gmail.com (Kamil Owczarek)</author>
    <category>YouTube</category><category>GDPR</category><category>Privacy</category><category>Performance</category><category>Vue</category><category>Nuxt 3</category>
  </item>

    </channel>
  </rss>
