---
title: Introduction
---

## Fast & Memory efficient

[How we did it](/stdlib/principles/performance).

Pattern matching with type-safe exhaustiveness checks, inspired by [ts-pattern](https://github.com/gvergnaud/ts-pattern):

**V8**

| ops/s · B/op | stdlib     | ts-pattern    |
| ------------ | ---------- | ------------- |
| Per call     | 425M · 0 B | 6.1M · 1.7 KB |

**JSC**

| ops/s    | stdlib | ts-pattern |
| -------- | ------ | ---------- |
| Per call | 785M   | 13M        |

`Array.map`, 1000 items

**V8**

| ops/s · B/op | stdlib        | remeda        | immer         | mutative     |
| ------------ | ------------- | ------------- | ------------- | ------------ |
| Unchanged    | 5.3M · 2 B    | 254K · 8.2 KB | 2.5K · 148 KB | 3.9K · 66 KB |
| Changed      | 1.2M · 8.2 KB | 245K · 8.2 KB | 2.4K · 158 KB | 4.1K · 75 KB |

**JSC**

| ops/s     | stdlib | remeda | immer | mutative |
| --------- | ------ | ------ | ----- | -------- |
| Unchanged | 4.7M   | 1.2M   | 3.8K  | 13K      |
| Changed   | 816K   | 914K   | 3.0K  | 13K      |

`Object.setPath`

**V8**

| ops/s · B/op | stdlib      | remeda        | immer         | mutative      |
| ------------ | ----------- | ------------- | ------------- | ------------- |
| Unchanged    | 434M · 0 B  | 1.8M · 1.0 KB | 1.5M · 2.8 KB | 2.6M · 2.7 KB |
| Changed      | 33M · 200 B | 1.8M · 1.0 KB | 669K · 3.8 KB | 1.8M · 3.5 KB |

**JSC**

| ops/s     | stdlib | remeda | immer | mutative |
| --------- | ------ | ------ | ----- | -------- |
| Unchanged | 691M   | 3.6M   | 1.8M  | 2.2M     |
| Changed   | 30M    | 3.7M   | 225K  | 1.8M     |

`Object.merge`

**V8**

| ops/s · B/op | stdlib     | remeda      |
| ------------ | ---------- | ----------- |
| Unchanged    | 328M · 0 B | 23M · 176 B |
| Changed      | 65M · 72 B | 24M · 176 B |

**JSC**

| ops/s     | stdlib | remeda |
| --------- | ------ | ------ |
| Unchanged | 929M   | 19M    |
| Changed   | 80M    | 18M    |

Unchanged/Changed: Our functions return the original input when nothing changed:

```ts
const a = [1, 2, 3]
const b = Array.map(a, (i) => i)
a === b // true
```
