From 176e8f0ddcabdd6684cb31d1635bc31d7601a53a Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Tue, 15 Nov 2022 12:46:16 +0100 Subject: [PATCH] Initialize the find-related `DIACRITICS_EXCEPTION_STR` constant lazily Adding some logging with `console.{time, timeEnd}` around all the constant definitions at the top of the `web/pdf_find_controller.js` file, I noticed that computing `DIACRITICS_EXCEPTION_STR` took close to half the total time. My first idea was just to try and make it slightly more efficient, by reducing the amount of iterations and intermediate allocations. However, with this constant only being used during "match diacritics" searches it thus seemed like a good candidate for lazy initialization. *Please note:* Given that this is a micro optimization, I fully understand if the patch is rejected. --- web/pdf_find_controller.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/web/pdf_find_controller.js b/web/pdf_find_controller.js index a18ff2d2e41d1..276015d723148 100644 --- a/web/pdf_find_controller.js +++ b/web/pdf_find_controller.js @@ -76,9 +76,7 @@ const DIACRITICS_EXCEPTION = new Set([ // https://www.compart.com/fr/unicode/combining/132 0x0f74, ]); -const DIACRITICS_EXCEPTION_STR = [...DIACRITICS_EXCEPTION.values()] - .map(x => String.fromCharCode(x)) - .join(""); +let DIACRITICS_EXCEPTION_STR; // Lazily initialized, see below. const DIACRITICS_REG_EXP = /\p{M}+/gu; const SPECIAL_CHARS_REG_EXP = @@ -675,6 +673,10 @@ class PDFFindController { if (matchDiacritics) { // aX must not match aXY. if (hasDiacritics) { + DIACRITICS_EXCEPTION_STR ||= String.fromCharCode( + ...DIACRITICS_EXCEPTION + ); + isUnicode = true; query = `${query}(?=[${DIACRITICS_EXCEPTION_STR}]|[^\\p{M}]|$)`; }