Skip to content

Commit

Permalink
readme upd
Browse files Browse the repository at this point in the history
  • Loading branch information
Morglod committed Sep 26, 2024
1 parent 2ec851f commit a63b707
Show file tree
Hide file tree
Showing 5 changed files with 270 additions and 14 deletions.
32 changes: 20 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,26 @@ Up to **x12** faster than `eventemitter3` in terms of "classic api event emitter
- Fully tested with eventemitter3 tests
- No external deps
- Only 381 bytes size in real app (brotlied)
- Safe version without eval implemented
- No eval implemented

[how it works](./docs/how_it_works_en.md)

## Benchmarks

emit-multiple-listeners:
```
tseep x 40,569,711 ops/sec <---
EventEmitter1 x 4,498,223 ops/sec
EventEmitter2 x 4,536,296 ops/sec
EventEmitter3 x 5,852,395 ops/sec
fastemitter x 6,127,215 ops/sec
event-emitter x 3,449,595 ops/sec
contra/emitter x 2,186,002 ops/sec
tsee x 5,231,167 ops/sec
emitix x 6,549,983 ops/sec
tseep 89,030,882 ops/sec
tseep no-eval 15,235,353 ops/sec
emitix 6,201,874 ops/sec
fastemitter 5,981,406 ops/sec
EventEmitter3 5,698,255 ops/sec
tsee 5,163,550 ops/sec
EventEmitter2 4,588,433 ops/sec
EventEmitter1 4,437,743 ops/sec
mitt 3,587,734 ops/sec
event-emitter 3,508,490 ops/sec
contra/emitter 2,183,943 ops/sec
Fastest is [ 'tseep' ]
```

Expand All @@ -58,15 +61,20 @@ const events = new EventEmitter<{
events.emit("foo", 123, "hello world");
```

### Use safe version without evals
### Use no-eval version

There is no user code evaluated so its complete safe to use with-eval version.
But in some cases (eg chrome's extensions), you just cant use it.
For this cases there is no-eval version:

```ts
import { EventEmitter } from "tseep/lib/ee-safe";
import { EventEmitter } from "tseep/lib/ee-safe"; // no-eval version
import { EventEmitter } from "tseep/lib/fallback"; // or with autofallback

// same api
```

"tseep/lib/fallback" may bundle both versions which may result in bigger app bundle size.

## Api

Expand Down
3 changes: 2 additions & 1 deletion benchmarks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ eventemitter2, Drip, event-emitter, contra/emitter does not handle `listeners` m

results:

[5apr-2023](./results.md)
[26sep-2024](./results.sep26-2024.md)
[5apr-2023](./results.apr5-2023.md)
[oct20-2019](./results.oct20-2019.md)


Expand Down
247 changes: 247 additions & 0 deletions benchmarks/results.apr5-2023.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
Starting benchmark emit-multiple-listeners.js

```
EventEmitter1 x 4,586,295 ops/sec ±0.53% (95 runs sampled)
EventEmitter2 x 4,619,034 ops/sec ±0.59% (99 runs sampled)
EventEmitter3 x 5,918,681 ops/sec ±0.18% (92 runs sampled)
Drip:
fastemitter x 6,092,914 ops/sec ±0.28% (100 runs sampled)
event-emitter x 3,567,456 ops/sec ±0.35% (99 runs sampled)
contra/emitter x 2,148,965 ops/sec ±0.46% (99 runs sampled)
tsee x 5,173,137 ops/sec ±0.44% (99 runs sampled)
tseep x 40,511,592 ops/sec ±0.15% (95 runs sampled)
emitix x 6,515,426 ops/sec ±0.21% (99 runs sampled)
mitt x 4,303,288 ops/sec ±0.26% (99 runs sampled)
Fastest is [ 'tseep' ]
```

Starting benchmark emit-multi.js

```
EventEmitter1 x 28,217,898 ops/sec ±0.15% (96 runs sampled)
EventEmitter2 x 11,307,372 ops/sec ±0.49% (98 runs sampled)
EventEmitter3 x 12,759,365 ops/sec ±0.41% (99 runs sampled)
Drip x 11,839,258 ops/sec ±0.39% (93 runs sampled)
fastemitter x 10,532,420 ops/sec ±0.37% (96 runs sampled)
event-emitter x 9,024,549 ops/sec ±0.36% (95 runs sampled)
contra/emitter x 3,430,620 ops/sec ±0.29% (95 runs sampled)
tsee x 9,312,531 ops/sec ±0.20% (99 runs sampled)
tseep x 155,087,077 ops/sec ±0.16% (98 runs sampled)
emitix x 816,219 ops/sec ±0.34% (93 runs sampled)
mitt x 14,108,761 ops/sec ±0.35% (94 runs sampled)
Fastest is [ 'tseep' ]
```

Starting benchmark once-multi.js

```
EventEmitter1 x 1,614,875 ops/sec ±0.49% (94 runs sampled)
EventEmitter2 x 1,141,795 ops/sec ±0.25% (96 runs sampled)
EventEmitter3 x 5,328,624 ops/sec ±0.35% (100 runs sampled)
Drip:
fastemitter x 1,339,102 ops/sec ±0.17% (99 runs sampled)
event-emitter x 739,011 ops/sec ±0.31% (92 runs sampled)
contra/emitter x 1,966,692 ops/sec ±0.26% (98 runs sampled)
tseep x 17,844,717 ops/sec ±0.29% (96 runs sampled)
emitix x 2,825,309 ops/sec ±0.40% (93 runs sampled)
mitt:
Fastest is [ 'tseep' ]
```

Starting benchmark emit-empty.js

```
EventEmitter1 x 32,205,058 ops/sec ±0.19% (95 runs sampled)
EventEmitter2 x 47,209,928 ops/sec ±0.31% (95 runs sampled)
EventEmitter3 x 84,651,552 ops/sec ±0.25% (96 runs sampled)
Drip x 63,544,980 ops/sec ±0.15% (99 runs sampled)
fastemitter x 81,156,049 ops/sec ±0.28% (100 runs sampled)
event-emitter x 35,446,656 ops/sec ±0.11% (102 runs sampled)
contra/emitter x 3,467,087 ops/sec ±0.46% (96 runs sampled)
tsee x 24,782,334 ops/sec ±0.42% (98 runs sampled)
tseep x 1,023,072,386 ops/sec ±0.12% (99 runs sampled)
emitix x 127,506,385 ops/sec ±0.19% (100 runs sampled)
mitt x 39,570,173 ops/sec ±0.16% (95 runs sampled)
Fastest is [ 'tseep' ]
```

Starting benchmark hundreds.js

```
EventEmitter1 x 676,826 ops/sec ±0.56% (93 runs sampled)
EventEmitter2 x 606,791 ops/sec ±0.28% (99 runs sampled)
EventEmitter3 x 763,194 ops/sec ±0.26% (99 runs sampled)
Drip x 964,126 ops/sec ±0.23% (98 runs sampled)
fastemitter x 841,133 ops/sec ±0.35% (99 runs sampled)
event-emitter x 614,626 ops/sec ±0.41% (92 runs sampled)
contra/emitter x 456,909 ops/sec ±0.22% (99 runs sampled)
tsee x 1,236,166 ops/sec ±0.23% (96 runs sampled)
tseep x 2,094,643 ops/sec ±0.18% (101 runs sampled)
emitix x 1,694,758 ops/sec ±0.41% (92 runs sampled)
mitt x 1,289,137 ops/sec ±0.22% (93 runs sampled)
Fastest is [ 'tseep' ]
```

Starting benchmark listeners.js

```
EventEmitter1 x 28,081,176 ops/sec ±0.66% (97 runs sampled)
EventEmitter3 x 29,015,452 ops/sec ±0.17% (97 runs sampled)
fastemitter x 12,011,367 ops/sec ±0.34% (90 runs sampled)
tsee x 27,814,671 ops/sec ±0.30% (100 runs sampled)
tseep x 69,321,380 ops/sec ±0.63% (98 runs sampled)
Fastest is [ 'tseep' ]
```

Starting benchmark emit.js

```
EventEmitter1 x 16,958,937 ops/sec ±0.16% (100 runs sampled)
EventEmitter2 x 11,642,166 ops/sec ±0.49% (96 runs sampled)
EventEmitter3 x 14,894,745 ops/sec ±0.25% (98 runs sampled)
Drip x 15,241,970 ops/sec ±0.26% (97 runs sampled)
fastemitter x 12,142,122 ops/sec ±0.30% (94 runs sampled)
event-emitter x 9,838,595 ops/sec ±0.27% (100 runs sampled)
contra/emitter x 2,951,014 ops/sec ±0.49% (96 runs sampled)
tsee x 12,046,633 ops/sec ±0.23% (100 runs sampled)
tseep x 154,864,959 ops/sec ±0.21% (101 runs sampled)
emitix x 75,396,374 ops/sec ±0.11% (101 runs sampled)
mitt x 10,610,306 ops/sec ±0.50% (98 runs sampled)
Fastest is [ 'tseep' ]
```

Starting benchmark init.js

```
EventEmitter1 x 63,081,435 ops/sec ±0.56% (92 runs sampled)
EventEmitter2 x 129,793,450 ops/sec ±0.41% (94 runs sampled)
EventEmitter3 x 175,020,935 ops/sec ±0.29% (100 runs sampled)
Drip x 249,320,013 ops/sec ±0.15% (97 runs sampled)
fastemitter x 57,452,930 ops/sec ±0.79% (96 runs sampled)
event-emitter x 118,575,835 ops/sec ±0.14% (98 runs sampled)
contra/emitter x 37,080,010 ops/sec ±0.56% (92 runs sampled)
tsee x 16,089,598 ops/sec ±3.00% (94 runs sampled)
tseep x 11,412,174 ops/sec ±0.18% (93 runs sampled)
emitix x 174,369,798 ops/sec ±0.29% (97 runs sampled)
mitt x 33,317,288 ops/sec ±0.38% (95 runs sampled)
Fastest is [ 'Drip' ]
```

Starting benchmark remove-emit.js

```
EventEmitter1 x 31,254,951 ops/sec ±0.29% (96 runs sampled)
EventEmitter2 x 46,877,897 ops/sec ±0.14% (98 runs sampled)
EventEmitter3 x 76,427,109 ops/sec ±0.18% (100 runs sampled)
Drip x 61,707,577 ops/sec ±0.12% (99 runs sampled)
event-emitter x 20,905,319 ops/sec ±0.16% (98 runs sampled)
contra/emitter x 3,422,196 ops/sec ±0.25% (91 runs sampled)
tsee x 23,317,573 ops/sec ±0.34% (96 runs sampled)
tseep x 154,473,908 ops/sec ±0.19% (101 runs sampled)
emitix x 105,707,180 ops/sec ±0.21% (98 runs sampled)
mitt x 11,004,502 ops/sec ±0.19% (98 runs sampled)
Fastest is [ 'tseep' ]
```

Starting benchmark context.js

```
EventEmitter1 x 19,598,066 ops/sec ±0.28% (94 runs sampled)
EventEmitter2 x 16,250,831 ops/sec ±0.17% (100 runs sampled)
EventEmitter3 x 25,596,891 ops/sec ±0.16% (96 runs sampled)
Drip x 18,577,032 ops/sec ±0.30% (93 runs sampled)
fastemitter x 15,459,611 ops/sec ±0.17% (97 runs sampled)
event-emitter x 10,953,428 ops/sec ±0.21% (94 runs sampled)
contra/emitter x 2,960,098 ops/sec ±0.39% (98 runs sampled)
tsee x 12,611,985 ops/sec ±0.15% (98 runs sampled)
tseep x 180,676,467 ops/sec ±0.75% (94 runs sampled)
emitix x 59,979,784 ops/sec ±0.10% (101 runs sampled)
mitt x 11,012,468 ops/sec ±0.30% (97 runs sampled)
Fastest is [ 'tseep' ]
```

Starting benchmark once.js

```
EventEmitter1 x 16,279,198 ops/sec ±0.28% (94 runs sampled)
EventEmitter2 x 7,522,447 ops/sec ±0.30% (97 runs sampled)
EventEmitter3 x 52,871,196 ops/sec ±0.21% (99 runs sampled)
Drip x 37,423,419 ops/sec ±0.19% (99 runs sampled)
fastemitter x 19,917,854 ops/sec ±0.20% (94 runs sampled)
event-emitter x 8,800,300 ops/sec ±0.21% (100 runs sampled)
contra/emitter x 8,619,258 ops/sec ±0.34% (94 runs sampled)
tseep x 108,688,843 ops/sec ±0.15% (98 runs sampled)
emitix x 78,891,712 ops/sec ±0.21% (100 runs sampled)
Fastest is [ 'tseep' ]
```

Starting benchmark add-remove.js

```
EventEmitter1 x 24,954,602 ops/sec ±0.44% (93 runs sampled)
EventEmitter2 x 9,580,405 ops/sec ±0.25% (98 runs sampled)
EventEmitter3 x 113,090,638 ops/sec ±0.32% (92 runs sampled)
Drip x 152,736,958 ops/sec ±0.25% (98 runs sampled)
fastemitter x 68,054,208 ops/sec ±0.25% (95 runs sampled)
event-emitter x 16,275,170 ops/sec ±0.12% (95 runs sampled)
contra/emitter x 27,783,231 ops/sec ±0.22% (94 runs sampled)
tsee x 29,669,318 ops/sec ±0.36% (100 runs sampled)
tseep x 70,905,688 ops/sec ±0.11% (100 runs sampled)
emitix x 129,807,510 ops/sec ±0.26% (99 runs sampled)
mitt x 20,512,296 ops/sec ±0.29% (96 runs sampled)
Fastest is [ 'Drip' ]
```

baking:
```
for_10 x 8,800,860 ops/sec ±0.29% (100 runs sampled)
bake_and_call_fixed_10 x 495,870 ops/sec ±0.71% (97 runs sampled)
call_baked_fixed_10 x 20,038,193 ops/sec ±0.20% (96 runs sampled)
bake_and_call_var_10 x 449,056 ops/sec ±0.43% (99 runs sampled)
call_baked_var_10 x 10,995,372 ops/sec ±0.20% (98 runs sampled)
for_100 x 841,238 ops/sec ±0.32% (101 runs sampled)
bake_and_call_fixed_100 x 66,189 ops/sec ±0.39% (94 runs sampled)
call_baked_fixed_100 x 1,105,069 ops/sec ±0.25% (97 runs sampled)
bake_and_call_var_100 x 58,238 ops/sec ±0.35% (94 runs sampled)
call_baked_var_100 x 832,133 ops/sec ±0.32% (97 runs sampled)
for_500 x 163,703 ops/sec ±0.49% (96 runs sampled)
bake_and_call_fixed_500 x 24,356 ops/sec ±0.65% (97 runs sampled)
call_baked_fixed_500 x 216,733 ops/sec ±0.21% (99 runs sampled)
bake_and_call_var_500 x 25,757 ops/sec ±0.90% (96 runs sampled)
call_baked_var_500 x 164,954 ops/sec ±0.46% (95 runs sampled)
for_1000 x 57,946 ops/sec ±1.04% (91 runs sampled)
bake_and_call_fixed_1000 x 12,012 ops/sec ±0.75% (97 runs sampled)
call_baked_fixed_1000 x 100,862 ops/sec ±0.78% (93 runs sampled)
bake_and_call_var_1000 x 12,092 ops/sec ±2.88% (98 runs sampled)
call_baked_var_1000 x 64,174 ops/sec ±7.36% (92 runs sampled)
for_1500 x 34,496 ops/sec ±0.63% (93 runs sampled)
bake_and_call_fixed_1500 x 43,249 ops/sec ±1.59% (89 runs sampled)
call_baked_fixed_1500 x 39,522 ops/sec ±1.09% (87 runs sampled)
bake_and_call_var_1500 x 28,968 ops/sec ±0.30% (98 runs sampled)
call_baked_var_1500 x 30,110 ops/sec ±0.18% (97 runs sampled)
for_2000 x 24,834 ops/sec ±0.44% (96 runs sampled)
bake_and_call_fixed_2000 x 26,018 ops/sec ±0.75% (91 runs sampled)
call_baked_fixed_2000 x 27,434 ops/sec ±0.85% (92 runs sampled)
bake_and_call_var_2000 x 21,492 ops/sec ±0.28% (96 runs sampled)
call_baked_var_2000 x 21,633 ops/sec ±0.17% (96 runs sampled)
for_3000 x 15,690 ops/sec ±0.30% (96 runs sampled)
bake_and_call_fixed_3000 x 15,843 ops/sec ±0.33% (95 runs sampled)
call_baked_fixed_3000 x 16,451 ops/sec ±0.38% (98 runs sampled)
bake_and_call_var_3000 x 14,062 ops/sec ±0.35% (97 runs sampled)
call_baked_var_3000 x 14,165 ops/sec ±0.20% (101 runs sampled)
for_4000 x 11,570 ops/sec ±0.35% (99 runs sampled)
bake_and_call_fixed_4000 x 11,730 ops/sec ±0.28% (96 runs sampled)
call_baked_fixed_4000 x 11,952 ops/sec ±0.25% (97 runs sampled)
bake_and_call_var_4000 x 10,509 ops/sec ±0.30% (100 runs sampled)
call_baked_var_4000 x 10,508 ops/sec ±0.29% (100 runs sampled)
for_5000 x 9,253 ops/sec ±0.17% (99 runs sampled)
bake_and_call_fixed_5000 x 9,345 ops/sec ±0.30% (95 runs sampled)
call_baked_fixed_5000 x 9,539 ops/sec ±0.16% (100 runs sampled)
bake_and_call_var_5000 x 8,412 ops/sec ±0.24% (99 runs sampled)
call_baked_var_5000 x 8,450 ops/sec ±0.16% (99 runs sampled)
for_10000 x 4,570 ops/sec ±0.25% (99 runs sampled)
bake_and_call_fixed_10000 x 4,651 ops/sec ±0.27% (99 runs sampled)
call_baked_fixed_10000 x 4,677 ops/sec ±0.29% (96 runs sampled)
bake_and_call_var_10000 x 4,218 ops/sec ±0.18% (100 runs sampled)
call_baked_var_10000 x 4,218 ops/sec ±0.22% (99 runs sampled)
```
File renamed without changes.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "tseep",
"version": "1.3.0",
"version": "1.3.1",
"description": "Fastest event emitter in the world",
"main": "lib/index.js",
"types": "lib/index.d.ts",
Expand Down

0 comments on commit a63b707

Please sign in to comment.