From f63d960bdc8471de501604f782011a25fbac4124 Mon Sep 17 00:00:00 2001 From: Richard Viney Date: Tue, 8 Oct 2024 00:16:52 +1300 Subject: Improve JS string performance by caching the Intl Segmenter --- CHANGELOG.md | 2 ++ src/gleam_stdlib.mjs | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84a76b0..03c850f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ - The `bit_array` module gains the `compare` function. - The `float` modeule gains the `to_precision` function. - The `try_fold` function in the `iterator` module is now tail recursive. +- The performance of many functions in the `string` module on the JavaScript + target has been improved. ## v0.40.0 - 2024-08-19 diff --git a/src/gleam_stdlib.mjs b/src/gleam_stdlib.mjs index 50ebb46..1c0754f 100644 --- a/src/gleam_stdlib.mjs +++ b/src/gleam_stdlib.mjs @@ -156,9 +156,12 @@ export function graphemes(string) { } } +let segmenter = undefined; + function graphemes_iterator(string) { if (globalThis.Intl && Intl.Segmenter) { - return new Intl.Segmenter().segment(string)[Symbol.iterator](); + segmenter ??= new Intl.Segmenter(); + return segmenter.segment(string)[Symbol.iterator](); } } -- cgit v1.2.3