lukeed/clsxPublic

A tiny (239B) utility for constructing `className` strings conditionally.

rebuild: refactor index.js using FP patterns - significant improvements in package size and performance #39

Closedmalomickclosed 2 commits intomasterfromrefs/pull/39/head
  1. MA

    Refactored index.js using FP patterns - Saves 15B on gzipped package size (228B → 213B for index.m.js) - Performance improvements of ~116-465% (in ops/s) across all benchmarks - Now outperforms classnames and classcat across all benchmarks - Reads better, IMO

    Build results: ``` Filename Filesize (gzip) dist/clsx.js 338 B 216 B dist/clsx.m.js 337 B 213 B dist/clsx.min.js 497 B 282 B ```

    Bench results: ``` # Strings classcat* x 6,727,875 ops/sec ±0.48% (92 runs sampled) classnames x 3,685,670 ops/sec ±0.39% (93 runs sampled) clsx (prev) x 7,271,968 ops/sec ±1.24% (88 runs sampled) clsx x 2,480,173 ops/sec ±0.35% (92 runs sampled)

    # Objects classcat* x 5,422,709 ops/sec ±3.47% (91 runs sampled) classnames x 3,548,977 ops/sec ±0.52% (93 runs sampled) clsx (prev) x 4,789,157 ops/sec ±0.40% (95 runs sampled) clsx x 1,385,614 ops/sec ±1.10% (89 runs sampled)

    # Arrays classcat* x 5,372,072 ops/sec ±1.18% (91 runs sampled) classnames x 1,799,371 ops/sec ±0.67% (89 runs sampled) clsx (prev) x 5,454,027 ops/sec ±0.82% (89 runs sampled) clsx x 1,439,790 ops/sec ±0.66% (95 runs sampled)

    # Nested Arrays classcat* x 4,667,051 ops/sec ±0.35% (92 runs sampled) classnames x 995,594 ops/sec ±7.36% (83 runs sampled) clsx (prev) x 4,069,753 ops/sec ±3.00% (90 runs sampled) clsx x 720,109 ops/sec ±11.85% (69 runs sampled)

    # Nested Arrays w/ Objects classcat* x 3,317,717 ops/sec ±7.56% (73 runs sampled) classnames x 1,479,754 ops/sec ±5.78% (75 runs sampled) clsx (prev) x 3,183,521 ops/sec ±9.50% (75 runs sampled) clsx x 837,185 ops/sec ±5.94% (77 runs sampled)

    # Mixed classcat* x 4,854,490 ops/sec ±0.82% (92 runs sampled) classnames x 2,134,090 ops/sec ±0.74% (93 runs sampled) clsx (prev) x 4,521,580 ops/sec ±0.37% (95 runs sampled) clsx x 1,172,055 ops/sec ±0.36% (88 runs sampled)

    # Mixed (Bad Data) classcat* x 1,392,011 ops/sec ±0.38% (90 runs sampled) classnames x 1,039,459 ops/sec ±0.36% (91 runs sampled) clsx (prev) x 1,605,209 ops/sec ±0.41% (89 runs sampled) clsx x 742,233 ops/sec ±0.37% (95 runs sampled) ```

  2. malomickrenamed Refactor index.js using FP patterns - significant improvements in package size and performance to rebuild: refactor index.js using FP patterns - significant improvements in package size and performance5 years ago on GitHub

  3. LU

    Hi, thank you, but your changes are significantly slower. They seem to be the last line per bench, and higher "ops/sec" is better.

    Functional primitives are (almost) aways slower than for loops in JS.

  4. MA
    Author

    ah interesting, I thought ops/sec was a representation of load, so was shooting for lowest possible load — got that backwards

  5. LU

    Yup, no worries :) Thank you anyway

  6. lukeedclosed5 years ago on GitHub