Skip to content

Performance Benchmarks

urdu-text-utils is designed to be fast, lightweight, and zero-dependency. All functions are pure, synchronous, and side-effect free.

Benchmark Results

Measured on Node.js 22 (AMD Ryzen 5, 16GB RAM). Higher ops/sec is better.

Normalization

FunctionInputOps/secTime/op
normalizeUrduShort (10 chars)81,000+0.012 ms
normalizeUrduMedium (100 chars)21,000+0.046 ms
normalizeUrduLong (500 chars)4,400+0.225 ms
removeDiacriticsShort1,870,000+0.001 ms
removeDiacriticsWith diacritics365,000+0.003 ms
foldUrduShort81,000+0.012 ms

Transliteration

FunctionInputOps/secTime/op
romanizeShort (10 chars)60,000+0.017 ms
romanizeMedium (100 chars)7,800+0.128 ms
romanToUrduSingle word436,000+0.002 ms
romanToUrduMedium phrase43,000+0.023 ms
FunctionCorpus SizeOps/secTime/op
searchUrdu (exact)100 items600+1.667 ms
searchUrdu (fuzzy)100 items355+2.815 ms

Sorting

FunctionItemsOps/secTime/op
sortUrdu20 words2,700+0.365 ms

Statistics

FunctionInputOps/secTime/op
countWordsMedium108,000+0.009 ms
countSentencesMedium111,000+0.009 ms
analyzeUrduMedium17,600+0.057 ms
splitWordsMedium109,000+0.009 ms
splitSentencesMedium137,000+0.007 ms

Detection

FunctionInputOps/secTime/op
isUrduMedium39,000+0.025 ms
urduRatioMedium41,000+0.024 ms

Numbers & Stemming

FunctionInputOps/secTime/op
convertNumbersShort537,000+0.002 ms
stemUrduSingle word132,000+0.008 ms
stemUrduTextMedium9,500+0.105 ms

Date & Time

FunctionInputOps/secTime/op
formatUrduDateCurrent date152,000+0.007 ms
timeAgoUrdu2 hours ago376,000+0.003 ms

Key Takeaways

  1. Fastest functionsremoveDiacritics, convertNumbers, and romanToUrdu run at 400K–1.8M ops/sec. These are essentially regex-based and have negligible overhead.

  2. Normalization — Handles 80K+ short strings/sec, which is well above typical UI requirements (even for real-time search as the user types).

  3. Search — Exact search over 100 items completes in ~1.7ms; fuzzy search adds ~1ms for edit distance calculation. For larger corpora, consider building an index with foldUrdu keys.

  4. Transliteration — Dictionary lookups are near-instant (436K ops/sec). Rule-based fallback adds ~0.1ms per word, which is imperceptible in UI contexts.

  5. Zero dependencies — No external libraries means smaller bundle size and no transitive dependency overhead.

Bundle Size

FormatSize (minified)Size (min + gzip)
ESM162 KB~11 KB
CJS163 KB~11 KB
IIFE128 KB~11 KB

Running Benchmarks

To run benchmarks yourself:

bash
npx tsx bench.mjs

The benchmark script is in the repository root. Results will vary based on your hardware and Node.js version.

Released under the MIT License.