## What is Million.js?
Million.js is an extremely fast and lightweight optimizing compiler that make [components](https://react.dev) up to [_**70% faster**_](https://krausest.github.io/js-framework-benchmark/current.html).
> Oh man... Another [`/virtual dom|javascript/gi`](https://regexr.com/6mr5f) framework? I'm fine with [React](https://reactjs.org) already, why do I need this?
Million.js works with React and makes reconciliation faster. By using a fine-tuned, optimized virtual DOM, Million.js reduces the overhead of diffing ([_try it out here_](https://demo.million.dev))
**TL;DR:** Imagine [React](https://react.dev) components running at the speed of raw JavaScript.
### [**👉 Setup Million.js in seconds! →**](https://million.dev/)
## Installation
The Million.js CLI will automatically install the package and configure your project for you.
```bash
npx million@latest
```
Once your down, just run your project and information should show up in your command line!
> Having issues installing? [**→ View the installation guide**](https://million.dev/docs/install)
## Why Million.js?
To understand why to use Million.js, we need to understand how React updates interfaces. When an application's state or props change, React undergoes an update in two parts: rendering and reconciliation.
To show this, let's say this is our `App`:
```jsx
function App() {
const [count, setCount] = useState(0);
const increment = () => setCount(count + 1);
return (
Count: {count}
);
}
```
In this `App`, when I click on the button, the `count` state will update and the `
` tag will update to reflect the new value. Let's break this down.
### Rendering
The first step is rendering. Rendering is the process of generating a snapshot of the current component. You can imagine it as simply "calling" the `App` function and storing the output in a variable. This is what the `App` snapshot would look like:
```jsx
const snapshot = App();
// snapshot =
Count: 1
;
```
### Reconciliation
In order to update the interface to reflect the new state, React needs to compare the previous snapshot to the new snapshot (_called "diffing"_). React's reconciler will go to each element in the previous snapshot and compare it to the new snapshot. If the element is the same, it will skip it. If the element is different, it will update it.
- The `
` tag is the same, so it doesn't need to be updated. ✅
- The `
` tag is the same, so it doesn't needs to be updated. ✅
- The text inside the `
` tag is different, so it needs to be updated. ⚠ ️
- The `