|
| 1 | +import _sortBy from 'lodash/sortBy' |
| 2 | +import {bench, describe} from 'vitest' |
| 3 | + |
| 4 | +import {sortBy} from './sortBy' |
| 5 | + |
| 6 | +const ITERATIONS = 100 |
| 7 | + |
| 8 | +interface User { |
| 9 | + user: string |
| 10 | + age: number |
| 11 | +} |
| 12 | + |
| 13 | +const USERS_SMALL: User[] = [ |
| 14 | + {user: 'ChengJha', age: 48}, |
| 15 | + {user: 'JoelSaad', age: 36}, |
| 16 | + {user: 'RaulIsmail', age: 40}, |
| 17 | + {user: 'VeraSaeed', age: 45}, |
| 18 | + {user: 'RobertoRamos', age: 28}, |
| 19 | + {user: 'OscarWatanabe', age: 21}, |
| 20 | + {user: 'AnnXiang', age: 25}, |
| 21 | +] |
| 22 | + |
| 23 | +const USERS_BIG: User[] = Array.from({length: 1000}, (_, i) => ({ |
| 24 | + user: 'user' + (i % 100), |
| 25 | + age: Math.floor(Math.random() * 100), |
| 26 | +})) |
| 27 | + |
| 28 | +const USERS_HUGE: User[] = Array.from({length: 10_000}, (_) => ({ |
| 29 | + user: 'randomUser' + Math.floor(Math.random() * 1000), |
| 30 | + age: Math.floor(Math.random() * 1000), |
| 31 | +})) |
| 32 | + |
| 33 | +const USERS_MULTI: User[] = [ |
| 34 | + {user: 'barney', age: 36}, |
| 35 | + {user: 'fred', age: 48}, |
| 36 | + {user: 'wilma', age: 40}, |
| 37 | + {user: 'wilma', age: 36}, |
| 38 | + {user: 'betty', age: 36}, |
| 39 | + {user: 'barney', age: 34}, |
| 40 | + {user: 'fred', age: 48}, |
| 41 | + {user: 'betty', age: 40}, |
| 42 | +] as const |
| 43 | + |
| 44 | +const testCases = [ |
| 45 | + {data: USERS_SMALL, iteratees: ['age']}, |
| 46 | + {data: USERS_SMALL, iteratees: [(o: User) => o.user]}, |
| 47 | + {data: USERS_BIG, iteratees: ['user']}, |
| 48 | + {data: USERS_BIG, iteratees: [(o: User) => o.age]}, |
| 49 | + {data: USERS_HUGE, iteratees: ['age']}, |
| 50 | + {data: USERS_MULTI, iteratees: ['user', 'age']}, |
| 51 | + {data: USERS_MULTI, iteratees: ['user', (o: User) => o.age]}, |
| 52 | +] as const |
| 53 | +describe('sortBy performance', () => { |
| 54 | + bench('hidash sortBy', () => { |
| 55 | + for (let i = 0; i < ITERATIONS; i++) { |
| 56 | + for (const {data, iteratees} of testCases) { |
| 57 | + sortBy(data, ...iteratees) |
| 58 | + } |
| 59 | + } |
| 60 | + }) |
| 61 | + |
| 62 | + bench('lodash sortBy', () => { |
| 63 | + for (let i = 0; i < ITERATIONS; i++) { |
| 64 | + for (const {data, iteratees} of testCases) { |
| 65 | + _sortBy(data, ...iteratees) |
| 66 | + } |
| 67 | + } |
| 68 | + }) |
| 69 | +}) |
0 commit comments