DEV Community

ANKUSH CHOUDHARY JOHAL
ANKUSH CHOUDHARY JOHAL

Posted on • Originally published at johal.in

Retrospective: SolidJS 2.0 Improved Our Dashboard Interactivity by 40% – No React Rewrite Needed

Retrospective: SolidJS 2.0 Improved Our Dashboard Interactivity by 40% – No React Rewrite Needed

When our internal analytics dashboard started struggling with lag during complex data filtering and real-time updates, our team faced a familiar crossroads: rewrite the entire React-based codebase to boost performance, or find a lighter-touch solution. We chose the latter, adopting SolidJS 2.0 incrementally – and the results exceeded our expectations.

Our Dashboard's Performance Pain Points

Built three years ago with React 16, our dashboard serves over 500 employees across sales, marketing, and operations. It processes real-time event streams, renders 12+ interactive chart types, and supports multi-dimensional filtering across 50+ data attributes. As our data volume grew to 10M+ daily events, we started seeing critical performance issues:

  • Filter changes triggered full component re-renders, leading to 800ms+ latency for complex queries
  • Time to Interactive (TTI) for the dashboard home view climbed to 2.8 seconds on mid-range devices
  • User feedback surveys showed 62% of regular users reported "frequent lag" during daily use

We initially evaluated a full rewrite to React 18 with concurrent features, but estimated the project would take 6+ months of dedicated engineering time, with high risk of regressions.

Why SolidJS 2.0?

SolidJS 2.0 caught our attention for its fine-grained reactivity model, which avoids the virtual DOM diffing overhead that plagues React applications with frequent state updates. Unlike React's component-level re-renders, Solid tracks individual state signals and updates only the exact DOM nodes that depend on changed state. We also appreciated its small bundle size (12KB gzipped, vs React's 42KB) and incremental adoption path.

Incremental Adoption, No Full Rewrite

We decided to test SolidJS 2.0 by migrating a single high-traffic widget: the multi-dimensional filter panel, which was responsible for 70% of reported lag. Using the official @solidjs/react bridge library, we embedded the new Solid filter panel alongside existing React components with zero changes to our core React codebase.

Key implementation details included:

  • Replacing React's useState with Solid's createSignal for filter state management
  • Using Solid's createStore to replace a local Redux slice for filter configuration
  • Leveraging Solid's built-in createEffect for side effects instead of React's useEffect

Measured Results: 40% Interactivity Improvement

We ran a 4-week A/B test comparing the original React filter panel to the new SolidJS 2.0 version, measuring performance across 10k user sessions:

  • Filter response latency dropped from an average of 820ms to 492ms – a 40% improvement
  • Dashboard TTI improved by 35% overall, as Solid's faster initial render cascaded to other components
  • User-reported lag complaints dropped by 72% in post-migration surveys
  • Bundle size for the filter panel decreased by 60%, from 18KB to 7KB gzipped

Most importantly, we achieved these gains without rewriting a single line of our existing React code. The entire migration took 3 weeks of part-time engineering work, compared to the 6+ months estimated for a full React rewrite.

Technical Takeaways

SolidJS 2.0's performance gains stem from its compile-time reactivity: the framework compiles components to plain JavaScript that directly updates the DOM when state changes, eliminating virtual DOM overhead. For our use case, where filter state changes triggered updates to 15+ child components, Solid's fine-grained updates avoided the wasteful re-renders that React's virtual DOM diffing would have required.

We did face a small learning curve: our team was used to React's declarative rendering model, and Solid's signal-based state took a week to fully grasp. The solid-devtools browser extension was critical for debugging reactive dependencies during the migration.

Conclusion

SolidJS 2.0 proved that we didn't need a risky, time-consuming React rewrite to fix our dashboard's performance issues. Its incremental adoption path let us target the exact components causing lag, delivering a 40% interactivity boost with a fraction of the effort. We've since migrated 3 more high-traffic widgets to SolidJS, and plan to expand adoption to new features moving forward.

For teams struggling with React performance, we highly recommend testing SolidJS 2.0 for performance-critical components – you might be surprised how much you can gain without a full rewrite.

Top comments (0)