github lukeed/clsx v1.1.1

latest releases: v1.2.1, v1.2.0
3 years ago

Note: This is a performance-related patch only!
Across all benchmarks, this version of clsx is ~1M ops/sec faster than clsx@1.1.0.
...It also happens to be 1 byte (gzip) smaller 😅🎉

Patches

  • fix: Remove needless spacer on string/number condition: ff11464
  • fix: Remove unnecessary recursive caller for object keys: f43dd23
  • perf: Guard all toVal calls with truthy assertions: 4fa8811, 019ec02
  • perf: Reorder typeof checks for common case: 08a5a7f

Chores

Benchmarks

Run on Node.js v10.13.0.
You may find updated browser benchmarks here.

The snippet below is comparing clsx@1.1.1 (this version) to the previous version, and to classnames for ballpark comparison. All candidates are functionally identical!

# Strings
  classnames    x  3,992,284 ops/sec ±1.64% (94 runs sampled)
  clsx@1.1.0    x 11,253,372 ops/sec ±0.35% (96 runs sampled)
  clsx@1.1.1    x 12,784,134 ops/sec ±0.42% (97 runs sampled)

# Objects
  classnames    x 3,772,978 ops/sec ±0.46% (96 runs sampled)
  clsx@1.1.0    x 7,288,178 ops/sec ±0.31% (96 runs sampled)
  clsx@1.1.1    x 9,412,010 ops/sec ±0.42% (95 runs sampled)

# Arrays
  classnames    x 1,665,275 ops/sec ±1.83% (93 runs sampled)
  clsx@1.1.0    x 8,340,174 ops/sec ±0.53% (96 runs sampled)
  clsx@1.1.1    x 9,141,916 ops/sec ±0.42% (95 runs sampled)

# Nested Arrays
  classnames    x 1,164,706 ops/sec ±1.60% (95 runs sampled)
  clsx@1.1.0    x 6,284,485 ops/sec ±0.58% (90 runs sampled)
  clsx@1.1.1    x 7,165,151 ops/sec ±0.47% (91 runs sampled)

# Nested Arrays w/ Objects
  classnames    x 1,597,180 ops/sec ±1.49% (93 runs sampled)
  clsx@1.1.0    x 6,345,248 ops/sec ±0.21% (95 runs sampled)
  clsx@1.1.1    x 7,651,411 ops/sec ±0.56% (95 runs sampled)

# Mixed
  classnames    x 2,129,199 ops/sec ±1.46% (94 runs sampled)
  clsx@1.1.0    x 6,557,515 ops/sec ±0.73% (91 runs sampled)
  clsx@1.1.1    x 8,119,210 ops/sec ±0.42% (93 runs sampled)

# Mixed (Bad Data)
  classnames    x 1,166,577 ops/sec ±0.84% (94 runs sampled)
  clsx@1.1.0    x 2,018,654 ops/sec ±0.15% (98 runs sampled)
  clsx@1.1.1    x 2,238,939 ops/sec ±0.34% (95 runs sampled)

Don't miss a new clsx release

NewReleases is sending notifications on new releases.