Whenever I come across a product that's client-heavy with real-time data, I open DevTools. Not to find bugs, just to see how it's built. How the sockets are structured, what drives the renders, where the performance headroom is. It's how I learn.

Polymarket being a prediction market platform where data across every page is real-time, hundreds of markets updating constantly, responsiveness is critical for users placing positions. So I wanted to measure INP (Interaction to Next Paint) across various interactions in the product.


Exploring the product

I kept DevTools open and went through the entire product. Every interaction I could find inputs, buttons, comments, navigation, filters felt snappy.

Then I hit the sports page.

The INP spiked. First time I clicked across the sport tabs it touched 2 seconds. I tried a few more times, consistently landing between 2 and 3 seconds.

image.png

What made it interesting was the breakdown:

Phase Duration
Input delay ~2,397ms
Processing duration ~32ms
Presentation delay ~27ms

99% of the time is input delay. The click handler runs in 30ms, React renders in 33ms, both completely fine. The browser just couldn't start processing the click for 2+ seconds. Something else was holding the main thread.

I ran the same test across every other section.

Category INP Behavior
Sports 2,000–3,000ms Completely unresponsive on tab clicks
Esports /live ~1,000ms+ Similar lag
Geopolitics < 50ms No lag
Breaking news < 50ms No lag
Crypto ~125ms No lag

O(n²) in use-event-positions.ts

I recorded a Performance trace while navigating across a few sport tabs, clicking between NBA, NHL, UCL, CBB.

image.png

The Main thread was completely packed with long tasks marked in red. I clicked into one and followed the call stack down.