Skip to content
Back to Stack Recommender

Million.js

Million.js — extremely fast virtual DOM with block virtual DOM optimization.

FrontendModerate

Stack Components

FrameworkMillion 3.x
BaseReact

Why

Block virtual DOM skips diffing for static parts, 70%+ faster than React for lists. JavaScript is used by 62% of developers per the Stack Overflow 2024 survey, and React holds 40% framework market share (State of JS 2024).

Vite replaced Webpack as the default bundler, cutting dev server startup from 30s to <1s.

When

Use for React apps with large lists or frequent updates. Avoid for static content.

How

1. npm install million 2. Wrap components with block() 3. Use Million's compiler 4. Benchmark 5. Add environment configuration — cp .env.example .env && edit values 6. Run tests — npm test or pnpm test to verify setup 7. Deploy — git push to trigger CI/CD or manual deploy

Example

import { block } from 'million/react'; const List = block(function List({ items }) { return <ul>{items.map(i => <li key={i.id}>{i.text}</li>)}</ul>; });

Common Problems

  • ⚠Block components can't use hooks inside — extract to non-block wrapper
  • ⚠Compiler plugin needed — configure MillionReact Babel plugin
  • ⚠Configuration drift between environments — use infrastructure-as-code (Terraform/Pulumi) to keep dev/staging/prod identical

Best Practices

  • ✓Use block() for list items, not entire pages
  • ✓Profile before/after to verify gains
  • ✓Set up health checks and graceful shutdown — handle SIGTERM to drain in-flight requests before exit

FAQ

What is Million.js and what projects is it for?

Million.js — extremely fast virtual DOM with block virtual DOM optimization. It pairs layered technologies for end-to-end type safety and out-of-the-box deploys, fitting everything from MVPs to production SaaS.

How do I spin up a working demo with Million.js in 10 minutes?

Two steps: (1) npm install million; (2) Wrap components with block(). Get the local dev server running, then wire one real data source to verify the end-to-end loop.

What is the most common pitfall with Million.js and how do I avoid it?

The most common pitfall is: Block components can't use hooks inside — extract to non-block wrapper. Avoid it by adding the matching checklist to your PR template and running type-check + lint + unit tests in CI — three gates before merge.

What are the best practices for Million.js?

Best practices for Million.js include: Use block() for list items, not entire pages; Profile before/after to verify gains; Set up health checks and graceful shutdown — handle SIGTERM to drain in-flight requests before exit. The first one — "Use block() for list items, not entire pages" — should be set up at project init to avoid costly rework later.

When should I NOT choose Million.js?

Pick something else in three cases: (1) the team has zero experience with the core framework and the deadline is tight (learning-curve risk); (2) it's a pure content/marketing site (Astro is lighter); (3) you need very high throughput (>10k RPS) or strict-consistency microservices (Go/Rust). Million.js shines for mid-to-high complexity full-stack and API work — don't over-engineer simple static pages with it.