Performance
The Next.js Page That Shipped the Database Client to the Browser
The page weighed two megabytes and the network tab showed a database driver going to the browser. A server only import crossed the boundary through one…
Runtime errors, module systems, async pitfalls and the parts of the language that behave differently than they read.
Performance
The page weighed two megabytes and the network tab showed a database driver going to the browser. A server only import crossed the boundary through one…
Error Autopsy
Support got screenshots of a broken header that no one could reproduce, until someone enabled an ad blocker. The client side DOM was being edited after…
Performance
First paint waited on a vendor's deploy, because a synchronous tag manager script blocked the parser, and its long tasks queued every interaction behind…
Shopify
One script tag without defer, loading a bundle nothing above the fold needed. How to find what is blocking your paint and what each fix actually changes.
Tooling
A profile recorded with a warm cache, no throttling and a mid session state measures none of the conditions your users meet, and the optimisation built on…
Deep Dive
Currency stored as a float accumulates fractions of a cent that are invisible per transaction and visible in the reconciliation.
Performance
With font display block, the browser renders nothing where the text should be until the font arrives, and on a slow network the page is a blank skeleton…
Bug Hunt
Search worked for every input except inputs with a comma, which 404'd. The comma is legal in a URI path, but a router in the middle split on it anyway, and…
Performance
The query took forty milliseconds and the endpoint took nine hundred and forty. The difference was serialisation: building and stringifying forty megabytes…
Deep Dive
setTimeout zero and setImmediate are not the same thing, and which one runs first depends on where in the event loop you called them.
Shopify
The product was live, in stock and searchable from the full search page, yet the predictive suggest box returned nothing. The suggest API was not broken.
Networking
Access-Control-Max-Age caches the preflight decision, including the one that said no. Here is why your fix looked like it did not work.