aboutsummaryrefslogtreecommitdiffstats
path: root/src/selector/selector.js
diff options
context:
space:
mode:
authorJohn Resig <jeresig@gmail.com>2007-08-21 05:43:44 +0000
committerJohn Resig <jeresig@gmail.com>2007-08-21 05:43:44 +0000
commitb6d920cf05fae3dcfe515166013ce39411ac5e16 (patch)
tree8c7e1879e92f4b7de49a3ca8398b2f96de61730f /src/selector/selector.js
parent8c15e852a4614ba5a5100e1c6e8a833c39b4ca79 (diff)
downloadjquery-b6d920cf05fae3dcfe515166013ce39411ac5e16.tar.gz
jquery-b6d920cf05fae3dcfe515166013ce39411ac5e16.zip
Fix for a selector speed regression (calling a simple selector many times resulted in a significant speed down). This has been fixed by breaking the RegExps out into the global scope. This required that a closure be implemented around the full jQuery script (which is now the case). Some simple changes were made in addition to the RegExp one, allowing for some greater flexibility on our part - and hopefully better compression.
Speed results: http://dev.jquery.com/~john/ticket/1351/ vs. http://dev.jquery.com/~john/ticket/1351/113.html vs. http://dev.jquery.com/~john/ticket/1351/112.html
Diffstat (limited to 'src/selector/selector.js')
-rw-r--r--src/selector/selector.js17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/selector/selector.js b/src/selector/selector.js
index 34aaf61e5..f2c224a02 100644
--- a/src/selector/selector.js
+++ b/src/selector/selector.js
@@ -1,3 +1,11 @@
+
+var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ?
+ "(?:[\\w*_-]|\\\\.)" :
+ "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
+ quickChild = new RegExp("^[/>]\\s*(" + chars + "+)"),
+ quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),
+ quickClass = new RegExp("^([#.]?)(" + chars + "*)");
+
jQuery.extend({
expr: {
"": "m[2]=='*'||jQuery.nodeName(a,m[2])",
@@ -62,8 +70,7 @@ jQuery.extend({
/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,
// Match: :even, :last-chlid, #id, .class
- new RegExp("^([:.#]*)(" +
- ( jQuery.chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ? "(?:[\\w*_-]|\\\\.)" : "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)" ) + "+)")
+ new RegExp("^([:.#]*)(" + chars + "+)")
],
multiFilter: function( expr, elems, not ) {
@@ -125,7 +132,7 @@ jQuery.extend({
// An attempt at speeding up child selectors that
// point to a specific element tag
- var re = new RegExp("^[/>]\\s*(" + jQuery.chars + "+)");
+ var re = quickChild;
var m = re.exec(t);
if ( m ) {
@@ -194,7 +201,7 @@ jQuery.extend({
} else {
// Optimize for the case nodeName#idName
- var re2 = new RegExp("^(" + jQuery.chars + "+)(#)(" + jQuery.chars + "+)");
+ var re2 = quickID;
var m = re2.exec(t);
// Re-organize the results, so that they're consistent
@@ -204,7 +211,7 @@ jQuery.extend({
} else {
// Otherwise, do a traditional filter check for
// ID, class, and element selectors
- re2 = new RegExp("^([#.]?)(" + jQuery.chars + "*)");
+ re2 = quickClass;
m = re2.exec(t);
}