Page 169 - Maxim Mironjuk
-
Maxim Mironjuk
-
September 17, 2025
A clean Symfony 7 upgrade is not a leap into the unknown, it is a repeatable process: find deprecations systematically, resolve Composer constraints in a controlled way, review config changes one by one and back every step with functional tests before the rollout goes to production.
-
Maxim Mironjuk
-
September 17, 2025
The View Transitions API delivers native, GPU-accelerated transition animations between two page states, entirely without a JavaScript animation loop. Compared to classic transition libraries, main-thread load drops noticeably, and since cross-document view transitions arrived, the same principle now works for classic multi-page navigation too.
-
Maxim Mironjuk
-
September 17, 2025
The symlink switch is not the end of a zero-downtime deployment: it is the start of a critical phase in which Redis, RabbitMQ, and OpenSearch must be compatible with the new code base. These three services are too often treated as peripheral details, even though they are frequently the root cause of post-deploy failures.
-
Maxim Mironjuk
-
September 16, 2025
Persisted queries replace the full GraphQL query text with a short hash that was registered with the server beforehand. This reduces payload size, prevents arbitrary ad hoc queries against the storefront API, and makes GraphQL requests accessible to standard CDN caching through plain GET calls.
-
Maxim Mironjuk
-
September 16, 2025
UNION and UNION ALL both combine the result sets of multiple SELECT statements into a single output, but only UNION deduplicates every single row with an implicit sort or hash step. Anyone who does not know this difference pays unnecessary compute time on every query for a deduplication that in many cases is not needed at all, because the combined result sets are already disjoint.
-
Maxim Mironjuk
-
September 16, 2025
The right tool makes the difference between developing blind and maintaining an API in a structured way. GraphiQL, Apollo Studio, GraphQL Hive and Inspector cover different phases of the API lifecycle, from exploratory development to production schema management across a team.
-
Maxim Mironjuk
-
September 16, 2025
A closure doesn't automatically carry its definition context with it when it comes to visibility. Closure::bind and bindTo let you change a closure's $this context and its scope for visibility checks explicitly, even after the fact. We show how that works in detail and where private access from closures genuinely pays off in practice.
-
Maxim Mironjuk
-
September 16, 2025
=== only compares objects by reference identity, and JSON.stringify fails on key order, maps, sets and dates. A hand written deep equality function compares values recursively by structure instead of reference and covers exactly the data types the simple approaches regularly fail on.
-
Maxim Mironjuk
-
September 16, 2025
Generated columns automatically compute a value from other columns in the same row and, unlike plain expressions in a WHERE clause, can be indexed directly. This article explains the difference between STORED and VIRTUAL, shows indexing strategies, and covers concrete use cases for JSON extraction and computed totals in MySQL 8.
-
Maxim Mironjuk
-
September 16, 2025
Lighthouse CI has established itself as a practical tool for checking performance metrics directly in a pull request, but it works with simulated network conditions on a single machine, usually running locally inside the CI environment. The WebPageTest API takes a different route: it runs real load time tests from real locations, over real network connections with realistic throttling, and additionally delivers a filmstrip view that shows the visual loading sequence frame by frame. This article explains the difference to Lighthouse CI, shows how to define performance budgets as an automated CI gate, and describes how results get compared between deployments to catch regressions early.
-