Page 12 - Web Performance
-
Maxim Mironjuk
-
November 09, 2025
The index exists, the column is selective, yet EXPLAIN shows a full table scan. That pattern almost always has one of a handful of concrete causes: a function on the indexed column, implicit type coercion, a leading wildcard, or stale statistics. This guide walks through a fixed order that narrows down the cause in minutes.
-
Maxim Mironjuk
-
November 05, 2025
A Vue application that runs smoothly with 50 entries can grind to a halt with 5,000 entries. Virtualization, memoization and targeted profiling are the three levers that keep large lists performant, measured, not merely felt.
-
Maxim Mironjuk
-
November 05, 2025
Synthetic tests only show a simulated snapshot, yet real customers experience Magento and Hyvä stores on wildly different devices, networks, and connection qualities. This article shows, in technical depth, how to integrate the web-vitals library, ship measurements efficiently via sendBeacon, sample sensibly under heavy traffic, build a minimal ingestion backend, and stay privacy compliant throughout.
-
Maxim Mironjuk
-
November 04, 2025
The next/image component automatically generates responsive image variants, modern formats, and lazy loading, but it does not solve every performance problem on its own. Configuring sizes correctly, setting priority deliberately on the Largest Contentful Paint element, and maintaining remote patterns cleanly is what actually unlocks the full potential of Next.js image optimization.
-
Maxim Mironjuk
-
November 03, 2025
Wrapping everything in useMemo and useCallback does not make React apps faster, it makes them more complicated. Whoever measures first finds the real bottlenecks: unnecessary re-renders, expensive calculations in the wrong place, and layout thrashing. This article shows the correct workflow with the React Profiler, Chrome DevTools and solid metrics.
-
Maxim Mironjuk
-
October 31, 2025
Load time alone says little about whether a page feels fast to a visitor, because two pages with identical total load time can feel completely different depending on the order in which their resources arrive. The fetchpriority attribute, , and the browser's own preload scanner each intervene at a different point in that order, and only together do they reach their full effect. The most common mistake is preloading as many resources as possible without considering that every additional preload directive competes for the same limited bandwidth as every other critical resource on the page.
-
Maxim Mironjuk
-
October 29, 2025
When requests suddenly hang while CPU usage stays low, lock contention is often the reason. With performance_schema in MySQL and pg_locks in PostgreSQL, lock contention can be diagnosed systematically, instead of guessing anew with every incident which session is blocking which other one.
-
Maxim Mironjuk
-
October 29, 2025
Using fetch or XHR on page unload is a race condition against the browser. When a tab is closed or the page is unloaded, the browser aborts any open requests. navigator.sendBeacon guarantees delivery of data without delaying navigation, which makes it the right solution for analytics, session data and exit tracking.
-
Maxim Mironjuk
-
October 28, 2025
Dynamic import via import() is more than a convenient alternative to static imports: the function returns a promise, loads code only at runtime, and enables patterns such as route based code splitting, conditional loading through feature detection, and robust retry strategies when a chunk gets lost over the network.
-
Maxim Mironjuk
-
October 22, 2025
A PHP object without a single property still occupies several dozen bytes in memory, purely from the internal zend_object header. Anyone seeing unexpectedly high memory usage with thousands of objects per request usually finds the cause in the interplay of object header, property table and the size of typed properties, not in the actual payload.
-