отделить JQuery, шипение? - PullRequest
       7

отделить JQuery, шипение?

19 голосов
/ 17 октября 2010

Есть ли у кого-нибудь опыт / способность проникновения в суть: разъединение jquery / sizzle?

это для общего интереса, но вот сценарий, который вызвал мой вопрос:

.. У меня уже есть jquery в проекте. хотел попробовать http://ecsstender.org/,, для которого требуется двигатель селектора Sizzle. Я действительно не хочу включать вторую копию Sizzle - она ​​уже является частью jquery ..

  • предпочел бы сделать что-то вроде этого: http://forum.jquery.com/topic/further-decoupling-sizzle-and-jquery
  • например. создайте JQuery-сборку, которая зависит от внешней, а не встроенной версии Sizzle, так что эту же библиотеку Sizzle можно использовать в jquery, eccstender или других скриптах.

Кажется, хорошая идея. Хотя я думаю, что это может повлиять на производительность, и я хотел бы увидеть сравнение производительности с производственным выпуском jQuery.

Кто-нибудь знает, было ли это сделано? (github fork?) Или есть веская причина против такого подхода? .

Ответы [ 2 ]

30 голосов
/ 17 октября 2010

Нет необходимости включать Sizzle в сборку jQuery.Его можно удалить ... код jQuery все ссылки Sizzle., вы можете просто взять / скомпилировать jQuery самостоятельно (включая Sizzle заранее) и открыть его для любой другой библиотеки (на самом деле не включив ее вскомпилированная версия, как дополнение к компилятору замыкания).


Вот вариант оставить его встроенным, но выставить Sizzle для использования извне:

Есливы знаете, что будет использоваться jQuery (зависимость), просто добавьте это после jQuery:

​window.Sizzle = jQuery.find;

Это снова откроет 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;

})();

Замените этот раздел на только :

(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;    
})();

Тогда все, что вам нужно сделать, это включить Sizzle до jQuery, и он будет работать нормально.

Вот скрипка, показывающая, как она работает , включая Sizzle непосредственно из github, не встроено в jQuery.

2 голосов
/ 19 октября 2010

Если вы хотите использовать модуль селектора eCSStender CSS3 с Sizzle, входящим в комплект jQuery, вы можете сделать это:подделка, использующая массив), но пока рано, и мой мозг еще не работает.

...