aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Sitnikov <sitnikov.vladimir@gmail.com>2022-07-20 11:51:13 +0300
committerGitHub <noreply@github.com>2022-07-20 10:51:13 +0200
commit699401008fbc6cdfc5d6a1d531e1bc5013a94bec (patch)
treec9cfb47a214b08cd69d02f626f2715cf784378e7
parent410d5cf0c3d0d92b2e9abd7fe0b16eb79c9a2a51 (diff)
downloadjquery-699401008fbc6cdfc5d6a1d531e1bc5013a94bec.tar.gz
jquery-699401008fbc6cdfc5d6a1d531e1bc5013a94bec.zip
Deprecated: Improve $.trim performance for strings with lots of whitespace
Regex imp implementation takes `O(N^2)` time to trim the string when multiple adjacent spaces were present. The new expression require that the "whitespace run" starts from a non-whitespace to avoid `O(N^2)` behavior when the engine would try matching `\s+$` at each space position. Closes gh-5068
-rw-r--r--src/deprecated.js6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/deprecated.js b/src/deprecated.js
index cc13c3c82..ca54982d7 100644
--- a/src/deprecated.js
+++ b/src/deprecated.js
@@ -15,7 +15,9 @@ define( [
// Support: Android <=4.0 only
// Make sure we trim BOM and NBSP
-var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+// Require that the "whitespace run" starts from a non-whitespace
+// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position.
+var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
// Bind a function to a context, optionally partially applying any
// arguments.
@@ -82,6 +84,6 @@ jQuery.isNumeric = function( obj ) {
jQuery.trim = function( text ) {
return text == null ?
"" :
- ( text + "" ).replace( rtrim, "" );
+ ( text + "" ).replace( rtrim, "$1" );
};
} );