Skip to content

Conversation

@alex28sh
Copy link
Contributor

@alex28sh alex28sh commented Dec 18, 2025

With the purpose of investigating which String methods in Wasm could be implemented similarly to their counterparts in K/Js.
linked issue https://youtrack.jetbrains.com/issue/KT-83156/K-Wasm-rewise-StringBuilder-usages-in-stdlib
Preliminary local evaluation:

Wasm

wasm: microBenchmarks.StringBenchmark.stringIndexOf
Warm-up #0: 0.154017 ms/op
Warm-up #1: 0.159848 ms/op
Warm-up #2: 0.152405 ms/op
Warm-up #3: 0.152419 ms/op
Warm-up #4: 0.151956 ms/op
Iteration #0: 0.158402 ms/op
Iteration #1: 0.157095 ms/op
Iteration #2: 0.158064 ms/op
Iteration #3: 0.158432 ms/op
Iteration #4: 0.156818 ms/op
  ~ 0.157762 ms/op ±0.42%

wasm: microBenchmarks.StringBenchmark.stringRemoveRange
Warm-up #0: 7.24390 ms/op
Warm-up #1: 7.35677 ms/op
Warm-up #2: 7.20336 ms/op
Warm-up #3: 7.54938 ms/op
Warm-up #4: 7.64899 ms/op
Iteration #0: 7.65213 ms/op
Iteration #1: 7.61498 ms/op
Iteration #2: 7.58112 ms/op
Iteration #3: 7.39488 ms/op
Iteration #4: 7.87974 ms/op
  ~ 7.62457 ms/op ±2.0%

wasm: microBenchmarks.StringBenchmark.stringRepeat
Warm-up #0: 1.26310 ms/op
Warm-up #1: 1.33175 ms/op
Warm-up #2: 1.25300 ms/op
Warm-up #3: 1.30432 ms/op
Warm-up #4: 1.36178 ms/op
Iteration #0: 1.34740 ms/op
Iteration #1: 1.36127 ms/op
Iteration #2: 1.33119 ms/op
Iteration #3: 1.33972 ms/op
Iteration #4: 1.33625 ms/op
  ~ 1.34317 ms/op ±0.76%

wasm: microBenchmarks.StringBenchmark.stringReplace
Warm-up #0: 295.580 ms/op
Warm-up #1: 292.284 ms/op
Warm-up #2: 291.719 ms/op
Warm-up #3: 277.161 ms/op
Warm-up #4: 298.287 ms/op
Iteration #0: 281.397 ms/op
Iteration #1: 278.939 ms/op
Iteration #2: 303.475 ms/op
Iteration #3: 301.655 ms/op
Iteration #4: 808.703 ms/op
  ~ 394.834 ms/op ±51%

Js

js: microBenchmarks.StringBenchmark.stringIndexOf
Warm-up #0: 0.0139317 ms/op
Warm-up #1: 0.0130344 ms/op
Warm-up #2: 0.0137545 ms/op
Warm-up #3: 0.0131107 ms/op
Warm-up #4: 0.0131188 ms/op
Iteration #0: 0.0124660 ms/op
Iteration #1: 0.0126771 ms/op
Iteration #2: 0.0129944 ms/op
Iteration #3: 0.0125529 ms/op
Iteration #4: 0.0126307 ms/op
  ~ 0.0126642 ms/op ±1.4%

js: microBenchmarks.StringBenchmark.stringRemoveRange
Warm-up #0: 13.9127 ms/op
Warm-up #1: 9.10726 ms/op
Warm-up #2: 13.1903 ms/op
Warm-up #3: 11.4397 ms/op
Warm-up #4: 9.67798 ms/op
Iteration #0: 12.5309 ms/op
Iteration #1: 9.72434 ms/op
Iteration #2: 12.9641 ms/op
Iteration #3: 12.8643 ms/op
Iteration #4: 9.72210 ms/op
  ~ 11.5612 ms/op ±13%

js: microBenchmarks.StringBenchmark.stringRepeat
Warm-up #0: 0.206734 ms/op
Warm-up #1: 0.191148 ms/op
Warm-up #2: 0.157657 ms/op
Warm-up #3: 0.164414 ms/op
Warm-up #4: 0.145794 ms/op
Iteration #0: 0.143821 ms/op
Iteration #1: 0.138290 ms/op
Iteration #2: 0.142675 ms/op
Iteration #3: 0.169228 ms/op
Iteration #4: 0.151387 ms/op
  ~ 0.149080 ms/op ±7.2%

js: microBenchmarks.StringBenchmark.stringReplace
Warm-up #0: 19.1304 ms/op
Warm-up #1: 18.8845 ms/op
Warm-up #2: 15.8104 ms/op
Warm-up #3: 21.3412 ms/op
Warm-up #4: 16.5629 ms/op
Iteration #0: 15.5913 ms/op
Iteration #1: 19.4830 ms/op
Iteration #2: 15.6627 ms/op
Iteration #3: 20.8699 ms/op
Iteration #4: 15.5969 ms/op
  ~ 17.4407 ms/op ±13%

indexOf, repeat, replace are working faster in K/Js

@alex28sh
Copy link
Contributor Author

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants