Ivan Akulov
iamakulov.com
Ivan Akulov
@iamakulov.com
Web perf engineer @ Framer. Prev. web perf consultant (Google, Appsmith, Toggl, etc). Getting React interactions 2-4x faster. GDE. He/him 🏳️‍🌈
Possibly one of the most impressive Safari bugs I’ve run into lately:

Going back (with a swipe) in *any* React app that uses Navigation API freezes the page for three seconds.

What’s fun is the main thread is not frozen, only the rendered page is.
July 15, 2026 at 10:00 AM
TIL GTM has a History Change trigger, but this trigger doesn’t fire when you navigate via the new Navigation API :(

There goes my dream of making all Framer sites use navigation.navigate() instead of history.pushState()
July 6, 2026 at 6:36 PM
Reposted by Ivan Akulov
If you throttle the network in DevTools you can't always trust the metrics. @iamakulov.com explains why in his new article.

3perf.com/blog/chrome-...
Chrome DevTools Throttling Is Not Accurate
Chrome DevTools slows down requests, not packets. This means its throttling is often off where it matters.
3perf.com
April 14, 2026 at 1:54 PM
Doctor: Chrome DevTools throttling is real and can hurt you

Chrome DevTools throttling: [proceeds to not be real]
April 14, 2026 at 12:43 PM
Reposted by Ivan Akulov
My Replay time-travel-based React+Redux perf reports experiments are coming together!

Just nailed sourcemapped component + selector identities, and I've got accurate timing details on dispatches + renders from a Replay DevTools E2E recording!

Early perf report example attached.
March 19, 2026 at 6:48 PM
Something I worked on (with a few other wonderful folks) for the past few weeks :) www.framer.com/llm
March 27, 2026 at 9:25 AM
the chart that I feel perhaps the proudest of is this

framer’s lcp (aka page loading time), across all sites, going lower and lower day by day, free for all framer customers

lots of work by our infra/canvas teams, @kurtextrem.de, and yours truly <3
March 18, 2026 at 3:33 PM
next.js (pages router) loads data for pages you navigate to, but never releases it, whoops: github.com/vercel/next...
March 17, 2026 at 11:04 AM
ah yes it’s my favorite “iphone safari wraps every phone number with <a> → react has a hydration mismatch → it remounts the full dom → all images on the page flash, but only on iphone” type of day
March 17, 2026 at 1:33 AM
Tomorrow, when you publish a Framer site, every page’s HTML will get 10-20% smaller:
February 23, 2026 at 7:41 PM
Last week in Framer performance: the first view of unoptimized pages is now much faster, especially on large sites:
February 14, 2026 at 8:48 PM
Yeah, Redux works great because it doesn’t import anything!

Here’s a case when this breaks:

1) Add a random dependency in Redux that’s used in some random function:
November 26, 2025 at 11:42 PM
spent the day shaking the tree, shook 1.5 MB
November 26, 2025 at 5:36 AM
just why
November 16, 2025 at 5:55 PM
Welp, turns out it’s not real.

Just opening DevTools makes all timers 5-100× slower, due to the overhead of capturing stack traces. Even if you do nothing else (don’t record performance, etc)!

Guess who accidentally spent a weekend optimizing this 😅

(h/t @paul.irish for explaining why)
November 14, 2025 at 3:42 AM
Okay, so this is pretty wild: apparently, in Chromium, the deeper you are in the call stack, the slower your `setTimeout()` calls become?

gist.github.com/iamakulov/85...
November 10, 2025 at 4:58 PM
Why are native setTimeout and clearTimeout calls so expensive? Like, here it takes 1.5 ms. What’s the technical reason it’s so slow?

Just 100-200 of those in a row (trivial if you’re mounting a bunch of React components that set timers) will easily block the page.
November 9, 2025 at 10:19 PM
Belated hi from @perfnow.nl! Come talk to us (me & @kurtextrem.de) about React performance, Framer sites, LCP/INP and more :D
October 31, 2025 at 10:05 AM
Neat lil learning from today’s @perfnow.nl (via Umar Hansa):

You can now throttle individual requests in Chrome!

Neat for experimenting with stuff like
- lazy-loading: does the UI look okay if this chunk takes MUCH longer to arrive
- resilience: what happens if this specific CDN is extremely slow
October 30, 2025 at 5:29 PM
This lil boy (www.framer.com/updates/cms...) actually took multiple weeks of full-time work! That’s because we didn’t only fix copy-paste papercuts, we also took an opportunity to improve Framer’s text editing architecture.

Story time!
October 24, 2025 at 10:18 AM
til oxlint does some insane tricks (custom js ast interface that understands rust memory layout!) to make js plugins fast github.com/oxc-project...
October 21, 2025 at 9:58 AM
something very cool to see: Chrome recently shipped automatic <link rel="prefetch"> for all links in viewport

you could do it previously with libs like Quicklink, but it’s super cool to see this implemented natively

(it’s off by default, enabled with one html tag)
October 20, 2025 at 10:00 AM
feels so good to be writing something again huh
October 8, 2025 at 12:20 AM
Got bitten by `new URL()` today. Guess why this doesn’t work?
October 1, 2025 at 9:59 AM
soon in @Framer.com: much better ⌘C ⌘V with google docs, notion, craft, and every other editor out there

(my lil non-performance side project)
September 30, 2025 at 2:59 PM