jQuery中的Sizzle引擎分析

  我分析的jQuery版本是1.8.3。Sizzle代码从3669行开始到5358行,将近2000行的代码,这个引擎的版本还是比较旧,最新的版本已经到v2.2.2了,代码已经超过2000行了。并且还有个专门的Sizzle主页

从一个demo开始,HTML代码如下:

<div id="grand_father">
<div id="father">
<div id="child1" class="child">子集1</div>
<div id="child2" class="child">子集2</div>
<div id="child3" class="child">子集3</div>
<input type="radio" id="radio1"/>
</div>
</div>

然后JavaScript代码如下:

var $nodes = $('div + input[type="radio"],div.child:first-child');
console.log($nodes);

1)返回的是一个jQuery对象,如下图所示,并且匹配到了两个标签,一个div和radio,

2)右边的div在0的位置,radio在1的位置,这说明jQuery的选择器匹配是从右往左的!

aaarticlea/png;base64,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" alt="" />

下面看一个流程图,当我编写了$('div + input[type="radio"],div.child:first-child')后发生的过程:

jQuery中的Sizzle引擎分析

一、jQuery对象

对象是需要new一下才行的,但是jQuery只要$("xxx")后,就生成了一个对象。

1)jQuery构造函数

在第42行,将会返回一个new对象:

jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context, rootjQuery );
}

2)jQuery对象结构

根据上面的返回对象的图中可以看到:

a. 对象的原型属性__proto__指向的是函数jQuery的原型属性prototype。__proto__ 是内部 [ [Prototype ]] ,原型链就是通过这个属性来实现的。

b. 索引是0和1的,其实是浏览器中的原生对象,我们可以搞个简单的选择器来验证,例如$("#radio1"),代码将会执行到140行

elem = document.getElementById(match[2]);
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
if (elem && elem.parentNode) {
// Handle the case where IE and Opera return items
// by name instead of ID
if (elem.id !== match[2]) {
return rootjQuery.find(selector);
}
// Otherwise, we inject the element directly into the jQuery object
this.length = 1;
this[0] = elem;
}
this.context = document;
this.selector = selector;
return this;

二、select函数

5116行的select函数是引擎的入口:

1)在这里引用了词法分析函数tokenize。

2)当tokenize返回的Token集合数组只有一个的时候,将会寻找种子合集【通过一些原生DOM接口可获取到】,在5147行中可以看到:

/*
完整的find在4089行,简易的find如下:
Expr.find = {
'ID': context.getElementById,
'CLASS': context.getElementsByClassName,
'NAME': context.getElementsByName,
'TAG': context.getElementsByTagName
}
*/
if ((find = Expr.find[type])) {
// Search, expanding context for leading sibling combinators
if ((seed = find(
token.matches[0].replace(rbackslash, ""),
rsibling.test(tokens[0].type) && context.parentNode || context,
xml
))) {
//省略逻辑....
}
}

3)通过compile编译函数,生成Token集合数组对应的匹配器,匹配后返回结果。

三、词法分析

高级的浏览器会直接使用querySelectorAll方法选择匹配。而低级的浏览器IE6或IE7等,就只能进入到jQuery的Sizzle引擎进行匹配。

为了调试方便,我将5182行的代码修改成“!document.querySelectorAll”,让高级浏览器也进入Sizzle引擎中匹配。

1)Token格式

4684行的tokenize函数最终返回的是Token集合数组,Token是一个String对象,格式如下:

String{0:'字符1',1:'字符2',....., type:'对应的Token类型【TAG,ID,CLASS,ATTR,CHILD,PSEUDO,NAME,>,+,空格,~】', matches:'正则匹配到的一个结构'}

type类型根据4150行的relative对象和4230行的filter对象中的key值获取。

2)返回的结果

'div + input[type="radio"],div.child:first-child'返回的数组如下:

aaarticlea/png;base64,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" alt="" />

上面返回的顺序是从左往右,先input,然后是div。

3)tokenize函数的流程

jQuery中的Sizzle引擎分析

上图中有4个关系符号:

Expr.relative = {
">": { dir: "parentNode", first: true },
" ": { dir: "parentNode" },
"+": { dir: "previousSibling", first: true },
"~": { dir: "previousSibling" }
}

结合上面的HTML结构:

1)grand_father与child1属于祖宗与后代关系(空格表达)

2)father与child1属于父子关系,也算是祖先与后代关系(>表达)

3)child1与child2属于临近兄弟关系(+表达)

4)child1与child2,child3都属于普通兄弟关系(~表达)

四、编译函数

把高级规则转换成底层实现就叫编译,比如高级语言到机器语言的过程就是编译。同样把抽象的css选择语法转变成具体的匹配函数的过程也是编译。

jQuery中的Sizzle引擎分析

1)matcherFromTokens

5080行的compile函数通过引用4931行的matcherFromTokens函数获取Token集合对应的匹配器,引用代码如下:

 i = group.length;//从右往左
while (i--) {
cached = matcherFromTokens(group[i]);
if (cached[expando]) {
setMatchers.push(cached);
} else {
elementMatchers.push(cached);
}
}

返回了两个函数数组,对应上面的Token集合数组,由于是从右往左,所以与上面的Token集合数组反过来。【在4979行console.log(matchers)】

aaarticlea/png;base64,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" alt="" />

打开第一个值,会发现里面还嵌套着很多闭包,闭包里面又有闭包,这就是前面所说的大的匹配函数:

aaarticlea/png;base64,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" alt="" />

matcherFromTokens最后会引用4803行的elementMatcher,将上面的数组作为参数传递过去。

上面示例代码的第7行就在将函数插入到elementMatchers数组中。再传递给下面的matcherFromGroupMatchers函数。

2)matcherFromGroupMatchers

再引用4983行的matcherFromGroupMatchers函数生成终极匹配器,返回匹配结果。

这个函数将会return出来的一个curry化的函数,也就是4986行的superMatcher函数。

在4995行,superMatcher函数会根据参数seed 、expandContext和context确定一个起始的查询范围:

elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context )

有可能是直接从seed种子集合中获取,也有可能在context或者context的父节点范围内。

这里的context是“document”,也就是整个DOM树【在5003行console.log(elems)】,elems结构如下:

aaarticlea/png;base64,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" alt="" />

可以看出如果事先定义了content,就会把范围缩小很多,利于匹配,例如jQuery可以这样写:

$('div + input[type="radio"],div.child:first-child', $('#grand_father'))

在5007行开始过滤,elementMatchers参数就是上面返回的大匹配器。

之所以用for是因为选择器(div + input[type="radio"],div.child:first-child)中有“,”号,所以是两组大匹配器。

for (;(elem = elems[i]) != null; i++) {
//省略逻辑...
for (j = 0; (matcher = elementMatchers[j]); j++) {
if (matcher(elem, context, xml)) {
results.push(elem);
break;
}
}
//省略逻辑...
}

大致过程就是这样,里面还有很多细节地方,这里就不讨论了,有兴趣的可以自己去打打断点玩玩。

源码下载:

http://download.csdn.net/detail/loneleaf1/9379318

参考资料:

http://www.cnblogs.com/aaronjs/p/3310937.html    jQuery 2.0.3 源码分析Sizzle引擎 - 解析原理

http://foio.github.io/sizzle-research/      sizzle引擎研究

http://www.imooc.com/learn/172      jQuery源码解析

http://www.cnblogs.com/mufc-go/p/3324488.html     sizzle源码分析

http://rapheal.sinaapp.com/page/2/    jQuery源码剖析

上一篇:PAT1013. Battle Over Cities(邻接矩阵、邻接表分别dfs)


下一篇:Android SDK下载和更新失败解决方法