Toggle navigation
MeasureThat
.net
Create a benchmark
Tools
Feedback
FAQ
Register
Log In
Run results for:
Classnames vs CLSX vs custom
Compare CLSX vs Classnames vs custom implementation
Go to the benchmark
Embed
Embed Benchmark Result
Run details:
User agent:
Mozilla/5.0 (Linux; Android 10; SAMSUNG SM-J810G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/16.0 Chrome/92.0.4515.166 Mobile Safari/537.36
Browser:
Chrome Mobile 92
Operating system:
Android
Device Platform:
Mobile
Date tested:
2 years ago
Custom implementation using reduce
93.4M/s
clsx
150K/s
classnames
103K/s
View exact numbers
Test name
Executions per second
✓
Custom implementation using reduce
93,391,176 Ops/sec
clsx
149,813 Ops/sec
classnames
103,388 Ops/sec
HTML Preparation code:
<script src='https://cdnjs.cloudflare.com/ajax/libs/classnames/2.2.6/index.min.js'></script> <script src='https://unpkg.com/clsx@1.1.0/dist/clsx.min.js'></script>
Script Preparation code:
var str = 'style'; var obj = { 'style-2': true, 'style-3': false, 'style-4': true, } var arr = ['style-5', 'style-6']
Tests:
classnames
let result = window.classNames(str, obj, arr, 'test classname')
clsx
let result = window.clsx(str, obj, arr, 'test classname')
Custom implementation using reduce
function maybeJoim(a,b) { return b ? a + " " + b : a; } function customCn(...args) { return args.reduce((acc, curr) => { if (!curr) return acc; if (typeof curr === "string") { return maybeJoin(acc,curr); } if (Array.isArray(curr)) { return maybeJoin(acc, curr.filter(Boolean).join(" ")); } if (typeof curr === "object") { return maybeJoin(acc, Object.keys(curr).filter((key) => key && curr[key]).join(" ")); } return acc; }, ''); }