Sign in

Ivan Akulov

@iamakulov.com
854 followers 74 following 118 posts

Web perf engineer @ Framer. Prev. web perf consultant (Google, Appsmith, Toggl, etc). Getting React interactions 2-4x faster. GDE. He/him 🏳️‍🌈

PostsRepliesMedia
Ivan Akulov @iamakulov.com · 24/09/2026
@storyhb.com hey :) i’m a staff performance engineer at Framer. i have a quick q about automatic image preloading in React 19. (hopefully you’re the right person as you merged github.com/react/react/... – if not, sorry, just lmk who’s the best person to ask this at 🙏)
github.com
131
Ivan Akulov @iamakulov.com · 22/09/2026
common but surprisingly rarely mentioned react perf pitfall: 1) text changes its size when fonts load (duh, you see this every day). often it gets larger 2) lcp (= google’s loading speed metric) scans for the largest element on the page. but it scans only newly added elements. it doesn’t scan--
131
Ivan Akulov @iamakulov.com · 15/07/2026
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.
3615
Ivan Akulov @iamakulov.com · 06/07/2026
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()
120
Reposted by Ivan Akulov
mattzeunert.com @mattzeunert.com · 14/04/2026
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-...
3perf.com
Chrome DevTools Throttling Is Not Accurate
Chrome DevTools slows down requests, not packets. This means its throttling is often off where it matters.
121
Ivan Akulov @iamakulov.com · 14/04/2026
Doctor: Chrome DevTools throttling is real and can hurt you Chrome DevTools throttling: [proceeds to not be real]
110
Reposted by Ivan Akulov
Mark Erikson @acemarke.dev · 19/03/2026
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.
1103
Ivan Akulov @iamakulov.com · 27/03/2026
Something I worked on (with a few other wonderful folks) for the past few weeks :) www.framer.com/llm
010
Ivan Akulov @iamakulov.com · 18/03/2026
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
020
Ivan Akulov @iamakulov.com · 17/03/2026
next.js (pages router) loads data for pages you navigate to, but never releases it, whoops: github.com/vercel/next...
120
Ivan Akulov @iamakulov.com · 17/03/2026
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
1242
Ivan Akulov @iamakulov.com · 23/02/2026
Tomorrow, when you publish a Framer site, every page’s HTML will get 10-20% smaller:
110
Ivan Akulov @iamakulov.com · 14/02/2026
Last week in Framer performance: the first view of unoptimized pages is now much faster, especially on large sites:
100
Ivan Akulov @iamakulov.com · 26/11/2025
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:
120
Ivan Akulov @iamakulov.com · 26/11/2025
spent the day shaking the tree, shook 1.5 MB
140
Ivan Akulov @iamakulov.com · 16/11/2025
just why
110
Ivan Akulov @iamakulov.com · 14/11/2025
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)
3315
Ivan Akulov @iamakulov.com · 10/11/2025
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...
2140
Ivan Akulov @iamakulov.com · 09/11/2025
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.
3131
Ivan Akulov @iamakulov.com · 31/10/2025
Belated hi from @perfnow.nl! Come talk to us (me & @kurtextrem.de) about React performance, Framer sites, LCP/INP and more :D
021
Ivan Akulov @iamakulov.com · 30/10/2025
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
2269
Ivan Akulov @iamakulov.com · 24/10/2025
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!
220
Ivan Akulov @iamakulov.com · 21/10/2025
til oxlint does some insane tricks (custom js ast interface that understands rust memory layout!) to make js plugins fast github.com/oxc-project...
140
Ivan Akulov @iamakulov.com · 20/10/2025
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)
Screenshot of a table titled “Proposed plan”, showing some updates to speculative rules, from the doc linked in the next post
283
Ivan Akulov @iamakulov.com · 08/10/2025
feels so good to be writing something again huh
screenshot of an intro to a “Why you should ditch <Link>s and use <a>s”  article. it says:

The standard advice for React/Vue/Next.js sites is to use the framework’s router to navigate between pages. A single-page router comes with a lot of goodies: prefetching, keeping state between routes, integration with framework primitives (like server components), etc. So why am I, in the year of 2025, think it’s worth switching back to `<a>`s from the 90s?
060
Ivan Akulov @iamakulov.com · 01/10/2025
Got bitten by `new URL()` today. Guess why this doesn’t work?
160
Ivan Akulov @iamakulov.com · 30/09/2025
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)
150
Ivan Akulov @iamakulov.com · 12/06/2025
⚡ Lighthouse (incorrectly) punishes preloading If you’re like me, you probably struggled with Lighthouse scores at least once. “I already optimized everything; why is my score still yellow?” Often, the cause is there’s more to optimize. But sometimes, it’s Lighthouse itself.
1146
Reposted by Ivan Akulov
Alex Moldovan @alexmoldovan.dev · 29/05/2025
Super cool React performance deep dive with @iamakulov.com 👏 @jsheroes.io #JSHeroes2025
082
Ivan Akulov @iamakulov.com · 24/03/2025
📝 Wrote about that one time I was doing performance work and ran into an eval()-based JS minifier from 2004. (Also, it’s compatible with ES2024, guess what) 3perf.com/blog/packer/
052
Ivan Akulov @iamakulov.com · 17/03/2025
Introducing @Framer.com Code Boundaries. No more optimization errors, no more blank pages, and no more searching for broken Components. (Or: how we went down the rabbit hole of React error handling for a month 🧵)
1254
Ivan Akulov @iamakulov.com · 20/01/2025
Stumbled upon a fun Chrome issue where you can get a high CLS score when nothing jumps on the screen – simply by using `content-visibility: auto`! Filed a bug: issues.chromium.org/issues/3911...
160
Reposted by Ivan Akulov
jeremAIas @jeremias.codes · 16/01/2025
So excited to have @iamakulov.com this year on the conference. Stay tuned for the full lineup announcement!
031
Ivan Akulov @iamakulov.com · 03/12/2024
This is the most comprehensive deep overview of React INP optimizations I’ve seen to date:
132
Ivan Akulov @iamakulov.com · 03/12/2024
One of the best productivity tips I have ever learned at Framer (from @eelco.lempsink.nl) is: Whenever you want to ask a teammate for help, don’t DM them. Instead, always post your question in a channel (and cc them).
130
Ivan Akulov @iamakulov.com · 02/12/2024
I found the dumbest way to preload an iframe ahead of time: <iframe src="..." sandbox="allow-same-origin"> • Downloads the iframe + its CSS/JS/etc • Puts these resources into the cache, so they’re there when you need them later • Critically, doesn’t execute any JS at all
140
Ivan Akulov @iamakulov.com · 18/11/2024
Today in React wishlist: support for setting several refs on a single <div> github.com/facebook/rea...
141
Reposted by Ivan Akulov
Ricky @ricky.fm · 14/11/2024
This fix for this is so slick: instead of reverting back to the old behavior where Suspense fallbacks have to wait for suspended siblings to render, the new feature commits fallbacks immediately, then schedules a render for the siblings after to "pre-warm" the lazy requests in the tree.
815924
Reposted by Ivan Akulov
henry ✷ @strange.website · 14/11/2024
you know what actually fuck you and in fact fuck the horse you rode in on "one of us only tells the truth and one only lies"-ass CSS property
The MDN article for the CSS property "border-end-start-radius", which is obviously completely nonsensical.The MDN article for the CSS property "border-start-end-radius", which is ALSO completely nonsensical.
44210
Ivan Akulov @iamakulov.com · 13/11/2024
Hi #perfnow! Glad to be at the main conf of the year for the next three days :)
091