Web Performance: Guides and Practical Know-how | mironsoft Blog
Web Performance
-
May 9, 2026
Running OPcache, Redis, Varnish and a CDN without a clear division of responsibility produces inconsistent load times and hard to reproduce bugs caused by stale data. This article explains how each layer solves a distinct problem, how invalidation works reliably across tags and TTLs, and how request locking and probabilistic early renewal prevent cache stampedes from overwhelming the origin.
-
May 6, 2026
A/B testing is part of everyday work for many product teams, yet many popular client-side testing tools degrade the exact metrics they are meant to optimize. Flash of original content, extra render-blocking JavaScript, and layout shifts hit Core Web Vitals directly, and with them conversion rate and search engine ranking. Teams that know the real performance price of their testing setup can make a deliberate choice between client-side, server-side, and edge-based testing.
-
May 6, 2026
overflow: clip is the more modern, often more performant alternative to overflow: hidden. The decisive difference is not in the visible result but in the invisible side effects: clip creates no stacking context and no new block formatting context, so it avoids unwanted z-index problems and enables more precise paint isolation for the browser renderer.
-
May 4, 2026
Unused code surprisingly often still ends up in the production bundle, because CommonJS imports, barrel files, or a wrongly set sideEffects flag prevent the bundler from removing it. This article shows mechanically how tree shaking works, which patterns block it, and how bundle analyzer tools make the root causes visible with concrete kilobyte numbers.
-
May 4, 2026
Code splitting is not a one-off measure but an ongoing strategy. React.lazy and dynamic imports only load JavaScript when it is genuinely needed, but only if the split boundaries sit in the right places. Too many small chunks slow down loading through HTTP overhead. Too few prevent any benefit at all. This tutorial shows how to find the balance.
-
May 4, 2026
Structured clone copies data by default on every postMessage call, which costs noticeable time with large binary data. Transferable objects solve this through an ownership change instead of a copy. This article covers the postMessage transfer list, the newer ArrayBuffer.prototype.transfer(), and common pitfalls with detached buffers.
-
May 1, 2026
GraphQL requests default to POST with the query text in the body, and CDNs never cache POST responses. Automatic Persisted Queries solve this by replacing the query with a stable SHA256 hash and sending the request as GET. That suddenly makes CDNs, browser caches and edge layers usable, without the frontend losing the actual query logic.
-
Apr 29, 2026
Every animation passes through the browser's rendering pipeline of layout, paint, and composite, and animating width, top, or margin forces the browser into expensive recalculations on every single frame. This article shows why transform and opacity run almost for free on the compositor thread, how to use will-change correctly, and how to refactor existing animations for real gains.
-
Apr 28, 2026
Anyone who only knows React on the surface knows that the Virtual DOM "makes things fast". Anyone who wants to build performant React apps needs to understand how the diffing algorithm decides what gets updated, and why keys, component identity and the Fiber architecture are the decisive factor.
-
Apr 25, 2026
will-change signals to the browser that a property is about to change, and the browser often responds by creating a dedicated compositing layer for the element. That noticeably speeds up individual animations, but every extra layer costs graphics memory. Set will-change generously on many elements permanently, and you produce exactly the jank the property was meant to prevent.