← ALL TAGS

Tag: performance

11 articles tagged “performance” on Oak Oliver Engineering, newest first. The latest is “OG Images with Satori and resvg-js in Bun: Server and CLI”.

Runtime

OG Images with Satori and resvg-js in Bun: Server and CLI

Satori turns a JSX or object tree into SVG, resvg-js turns it into PNG. A standalone CLI, a cached Bun route, fonts, timings and pitfalls from production.

October 28, 2026 16 min read
Read Story →
Runtime

Zero JavaScript on Load Cost Us 400 Milliseconds on the First Click. The Page Already Knew How to Get Them Back.

We moved 16 production sites from React to Qwik 2: 1-2 scripts on load instead of 22, first paint twice as fast. Then the first click took 400 ms to 1.6 s. A 1 KB idle warm-up that reads the chunk names the page already carries brought it to 56-90 ms, plus two deploy traps and one benchmark that lied.

October 27, 2026 11 min read
Read Story →
Engineering

Porting ERNIE-Image-Turbo to Zig and Metal: An 8B Diffusion Transformer From Scratch on Apple Silicon

I rewrote the hot path of Baidu's 8B-parameter ERNIE-Image-Turbo (DiT + scheduler) from scratch in Zig with hand-written Metal kernels. 13.06s/step at 1024×1024 on M2 Max. The bug archaeology behind getting 36 layers numerically correct, plus the honest accounting of what still has Python in it.

April 23, 2026 18 min read
Read Story →
Runtime

I Rewrote Python's Fastest BM25 Library in TypeScript: 2x Faster Indexing, Zero Dependencies

How bm25s (formerly bun-bm25s) indexes about 2x faster than Python's bm25s library using nothing but TypeScript and typed arrays. Retrieval beats bm25s's numpy backend but not its numba backend, as the October 2026 re-measurement shows.

March 15, 2026 9 min read
Read Story →
Architecture

40 Languages, 400KB Bundle — Why I Refuse to Ship Translations in JavaScript

How dynamic translation loading with client-side caching serves 40 locales without bloating the SPA bundle, keeping the React app under 400KB while supporting instant language switching.

February 4, 2026 10 min read
Read Story →
Frontend

480 Pages, 40 Locales, Zero Frameworks — How I Beat Next.js at International SEO

How we bake hreflang tags, Schema.org structured data, and locale-specific Open Graph metadata into 480 static HTML pages at build time — without any client-side i18n framework or SSR.

February 2, 2026 9 min read
Read Story →
Frontend

I Killed the Loading Spinner — Without Next.js, Without SSR, Without Any Framework

How a 6-line data injection pattern eliminates the loading spinner from React SPAs by injecting server data into HTML and pre-populating React Query's cache before the first render.

February 1, 2026 10 min read
Read Story →
Runtime

I Deleted a 200MB Rust Binary From My Docker Image. My Deploys Have Never Been the Same.

How migrating from Prisma 5's Rust query engine to Prisma 7's pure-JavaScript driver adapter cut our Docker image by 42%, slashed cold starts by 68%, and gave us back control of our connection pool.

January 23, 2026 8 min read
Read Story →
Runtime

Your Users Download 1.5MB of JavaScript to See a Landing Page. We Fixed It With an If Statement.

How we split a React SPA into public (400KB), auth (150KB), and private (1.5MB) bundles — selected server-side by URL path, built with Bun, zero framework required.

January 21, 2026 9 min read
Read Story →
Runtime

We Built a 340-Line Static Site Generator That Made Next.js Irrelevant. It Renders 480 Pages in 650ms.

How mentoring.oakoliver.com generates 40 locales × 12 routes at server startup using React 19, hydrates with React Query, and why we'll never go back to a framework for this.

January 17, 2026 9 min read
Read Story →
Runtime

We Replaced Node.js With Bun Across Every Production Service. Here's What Nobody Tells You.

The real story of migrating three production services from Node.js to Bun on a single VPS — cold starts, memory savings, deleted dependencies, and every gotcha that bit us.

January 15, 2026 9 min read
Read Story →