iamakulov Profile Banner
Ivan Akulov Profile
Ivan Akulov

@iamakulov

Followers
8K
Following
26K
Media
1K
Statuses
6K

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

Amsterdam
Joined January 2015
Don't wanna be here? Send us removal request.
@iamakulov
Ivan Akulov
3 years
How I typically test performance (a thread for a client who asked about this):
8
88
438
@kurtextrem
Jacob 'kurtextrem' Groß
21 hours
At @framer we’ve switched from esbuild to @rolldown_rs in Q4. Since then we’ve launched another feature based on their exclusive “Native MagicString” tech to perform AST transforms via Rust🦀 on-the-fly, fast. Here’s our case study: https://t.co/ZgEIBfTFv3. Rolldown’s awesome!
Tweet card summary image
framer.com
Case-study how Rolldown helps us speed up Framer sites.
0
7
13
@iamakulov
Ivan Akulov
15 days
- esm > cjs modules (bundlers still don’t shake cjs well/at all) - sideEffects: false ftw - don’t bundle a library into a single file for npm. kills shakeability
0
0
6
@allen_ai
Ai2
15 hours
🚀 Try Olmo 3-Think (32B) FREE until Dec 22! Our flagship open reasoning model tackles complex math, science, & coding problems—and you can now use it free via Parasail Serverless.
0
0
2
@iamakulov
Ivan Akulov
15 days
spent the day shaking the tree, shook 1.5 MB
1
0
5
@iamakulov
Ivan Akulov
25 days
Ah yes this why:
@MrFlashAccount
Sergei Garin 🇷🇺
25 days
@iamakulov So, I asked myself the same question and digged into a small research. I found a proposal and this issue: https://t.co/CSNXVHj2Wf I think it’s not the root cause, but for me it’s a good-enough explanation of why Math doesn’t work with bigint.
0
0
1
@iamakulov
Ivan Akulov
25 days
just why
2
0
0
@nebiustf
Nebius Token Factory
2 days
Base models are great for demos, but production needs something better. Today, we’re launching post-training by Nebius Token Factory. Fine-tune frontier open-source LLMs, optimize them and deploy instantly. This is how open-source finally becomes production-grade. 👇
8
17
79
@iamakulov
Ivan Akulov
27 days
Also huge kudos to @subzey. Wild, I’d have never figured out:
@subzey
subzey
1 month
@iamakulov The same happens with schedule.postTask() even with no timers set! Async call stacks are to blame?
0
0
1
@iamakulov
Ivan Akulov
27 days
Benchmark: https://t.co/bFpyOnzYOc. Try with DevTools open vs closed – especially with call stack depth 1000. (“1000 levels deep” might seem like a lot, but it’s pretty realistic with React’s recursivelyTraversePassiveMountEffects. That’s how I ran into it – in TanStack Query!)
1
0
1
@iamakulov
Ivan Akulov
27 days
Welp, turns out these numbers aren’t 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
@iamakulov
Ivan Akulov
1 month
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.
3
0
12
@iamakulov
Ivan Akulov
1 month
This might seem like nothing, but it’s a real issue with e.g. TanStack Query, where timers are slower because of that: https://t.co/nfUdRrr6xA It both • sets timers very deep down React’s `recursivelyTraversePassiveMountEffects` stack • and sets *a lot* of them, for query
1
0
2
@paidworkco
Paidwork
2 months
💸 Earn money anytime, anywhere with Paidwork! Start today – it’s fast, simple & free
0
0
11
@iamakulov
Ivan Akulov
1 month
Timers also get 2× slower after you set ~750 of them (even if they have already fired):
1
0
0
@iamakulov
Ivan Akulov
1 month
Okay, so this is pretty weird: Apparently, in Chromium, the deeper you are in the call stack, the slower your setTimeout() calls become?
@iamakulov
Ivan Akulov
1 month
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.
3
0
5
@iamakulov
Ivan Akulov
1 month
(Question prompted by spending an hour to implement userland setTimeout batching :D)
1
0
1
@iamakulov
Ivan Akulov
1 month
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.
4
0
8
@HeraldWhistler
Herald Whistler
4 days
100 Red and 100 Black ants were put in a jar and placed on a table. Nothing happened, they were at peace with each other. Then someone shook the jar and the ants started killing each other. They were made to believe that each other were the enemy...they were not...
1
6
17
@iamakulov
Ivan Akulov
1 month
> once [2] gets shipped, you should switch to "eager". fresh from @PerfNowConf: it will ship v soon, in Chrome 143 <3
0
0
1
@iamakulov
Ivan Akulov
1 month
Belated hi from @PerfNowConf! Come talk to us (me & @kurtextrem) about React performance, Framer sites, LCP/INP and more :D
0
0
9
@iamakulov
Ivan Akulov
1 month
Currently in Chrome Canary behind a flag (enable at chrome://flags):
0
0
2
@iamakulov
Ivan Akulov
1 month
Neat lil learning from today’s @PerfNowConf (via @umaar): 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
1
10
12
@ygleboeuf
Yves-Gabriel Leboeuf
6 days
Over a 24h period this week, Deck's infra peaked at near 6,000 parallel browser sessions, and made ~$30M in agentic payments. Seeing agents sustain this load of valuable actions is encouraging for what's coming in 2026 💯
11
29
160
@iamakulov
Ivan Akulov
2 months
But to fix other things (like missing links on ⌘C), we had to carefully inject Framer’s page tree information into the schema, something that also took several iterations. This part of the project isn’t *fully* complete. But hopefully we’ll wrap it up soon 🙌
1
0
3
@iamakulov
Ivan Akulov
2 months
So, another big part of this project was moving this logic back into the schema, to make sure it covers all code paths. This wasn’t always easy! Some things, like stripping unnecessary <b>s that come from Google Docs, were simple:
1
0
2