解散jquery,嘶嘶声?

zac*_*ack 19 jquery sizzle

有没有人有经验/洞察力:解耦jquery/sizzle?

这是为了普遍的兴趣,但这是触发我的问题的场景:

..i已经在项目中有jquery.想试试http://ecsstender.org/,这需要Sizzle选择器引擎.我真的不想包括Sizzle的第二个副本 - 它已经是jquery的一部分..

似乎是一个好主意.虽然我猜它可能会影响性能,但我希望看到基准测试与jQuery生产版本的比较.

有谁知道这是否已经完成?(github fork?)或者有没有理由反对这种方法?.

Nic*_*ver 30

Sizzle不需要包含在jQuery构建中.它可以删除... jQuery代码所有引用Sizzle.,你可以自己抓取/编译jQuery(包括事先包含Sizzle)并将它暴露给任何其他库(实际上不包括它在编译版本中,只是作为外部的闭包编译器).


这是将其嵌入的选项,但是将Sizzle暴露给外部使用:

如果你知道将使用jQuery(依赖),只需在jQuery之后添加:

?window.Sizzle = jQuery.find;
Run Code Online (Sandbox Code Playgroud)

这将重新暴露Sizzle作为您可以使用的属性.


这是从嵌入中删除Sizzle的手动版本:

在jQuery(版本1.4.3链接)中,您将看到:

/*!
 * Sizzle CSS Selector Engine - v1.0
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){
//...
//lots of code!
//...

// EXPOSE
jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;
jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains;

})();
Run Code Online (Sandbox Code Playgroud)

替换该部分:

(function(){    
// EXPOSE
jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;
jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains;    
})();
Run Code Online (Sandbox Code Playgroud)

然后你需要做的就是在jQuery 之前包含Sizzle 并且它会正常工作.

这是一个显示它工作的小提琴,包括直接来自github的Sizzle,而不是嵌入在jQuery中.

  • 真的很棒的答案. (2认同)