MinhVo

Minh Vo

rss feed

Slaying code & making it lit fr fr 🔥 tagline

Hey there 👋 I'm an AI Engineer with 7 years of experience building scalable web and mobile applications. Currently at Neurond AI (May 2025 — present), architecting an Enterprise AI Assistant Platform with multi-tenant RAG on pgvector, multi-provider LLM orchestration, and Azure-native infrastructure. Previously spent 5+ years at SNAPTEC (Sep 2019 — Apr 2025), leading SaaS themes, admin dashboards, and e-commerce platforms — earned the Hero of the Year award in 2021. I specialize in TypeScript, React, Next.js, and AI-Native engineering with Claude Code and Cursor.bio

Back to blogs

SolidJS Fine-Grained Reactivity Without Virtual DOM

SolidJS fine-grained reactivity. Signals, effects, no virtual DOM, performance comparison with React.

SolidJSsignalsreactivityJavaScriptfrontendperformance

By MinhVo

Introduction

Compiles components to real DOM operations. Fine-grained reactivity updates only changed DOM nodes. API inspired by React: JSX, components, hooks-like primitives. Components run once, signals handle reactivity. Consistently tops framework benchmarks. SolidStart as meta-framework.

SolidJS Different Approach

frontend illustration

Compiles components to real DOM operations. Fine-grained reactivity updates only changed DOM nodes. API inspired by React: JSX, components, hooks-like primitives. Components run once, signals handle reactivity. Consistently tops framework benchmarks. SolidStart as meta-framework.

Signals Core Reactivity

createSignal returns getter and setter. Getter function call auto-subscribes in tracking scope. When setter called, only DOM nodes reading getter are updated. No re-render, no virtual DOM diff. createMemo caches derived values. produce for mutable updates, reconcile for replacing objects.

Effects and Tracking

Effects run when dependencies change. Automatic dependency tracking eliminates dependency arrays. createMemo caches and recomputes only on change. Tracking scopes: JSX, createEffect, createMemo. onCleanup for disposal cleanup.

No Virtual DOM

frontend illustration

Compiler creates DOM elements once with reactive bindings. No reconciliation overhead. O(1) updates per signal change. Runtime 7KB vs React 40KB. Different mental model: components run once, closures capture initial values.

Components and SolidStart

Components run once. Show, For, Switch/Match for control flow. ErrorBoundary, Suspense, Portal. SolidStart: file-based routing, SSR, API routes, edge deployment. Server functions with use server directive. Streaming SSR for improved TTFB.

Performance and When to Choose

1.5-3x faster than React in benchmarks. Gap widens for large lists and frequent updates. Choose SolidJS for performance-critical apps. Choose React for existing code and larger ecosystem. SolidJS ecosystem growing: Solid Router, Solid Stores, Kobalte, TanStack Query.

Conclusion

The topics covered in this article represent important developments in modern software engineering. By understanding these concepts deeply and applying them in your projects, you can build more robust, scalable, and maintainable systems. Continue exploring, experimenting, and building — the technology landscape rewards those who stay curious and keep learning.