Javascript jQuery$.fly插件的用途是什么?

Javascript jQuery$.fly插件的用途是什么?,javascript,jquery,performance,jquery-plugins,Javascript,Jquery,Performance,Jquery Plugins,我偶然发现了性能基准,在看了测试代码之后,我不知道它有什么用?我在互联网上搜索过,没有找到任何关于插件本身的有用信息 在数组上循环/迭代是否比在中使用$(this)更有效 使用jQuery对象迭代 使用jQuery.fly()迭代 在Firefox4.0.1中几乎快了2倍 Chrome 12的速度几乎快了3倍 .飞 (函数($){ var fly=$(), push=Array.prototype.push; $.fly=函数(elem){ var len=飞行长度, 我 如果($.is

我偶然发现了性能基准,在看了测试代码之后,我不知道它有什么用?我在互联网上搜索过,没有找到任何关于插件本身的有用信息

在数组上循环/迭代是否比在
中使用
$(this)
更有效

  • 使用jQuery对象迭代

  • 使用jQuery.fly()迭代

  • 在Firefox4.0.1中几乎快了2倍
  • Chrome 12的速度几乎快了3倍
.飞
(函数($){
var fly=$(),
push=Array.prototype.push;
$.fly=函数(elem){
var len=飞行长度,
我
如果($.isArray(elem)){
fly.length=0;
i=推动应用(飞行,元素);
}否则{
if(elem instanceof$){
返回元素;
}
如果(元素类型==“字符串”){
抛出“使用jQuery()”;
}
fly[0]=elem;
fly.length=i=1;
}
//删除孤立引用

while(i免责声明:您会得到一个全局
fly
实例,该实例在每次调用
$时都会更改状态。fly
。如果将其存储在变量中,它将被破坏。这是一种微观优化,除非进行了适当的基准测试,否则不应使用

优化:任何可以证明使用
$是合理的情况。fly
因为使用
$
是一个瓶颈,所以正确的解决方案是不使用jQuery并在“香草JavaScript”中进行DOM操作

其思想是调用
jQuery
代价很高。为了避免这种情况,可以调用
$()
一次,然后将DOM节点注入其中

这基本上有一个jQuery的全局实例,并交换了其中的DOM节点

飞锤是一种通过与其他类似对象共享尽可能多的数据来最小化内存使用的对象

这是通过只有一个jQuery对象来实现的

    var len = fly.length,
        i;
    // if elem is array push all dom nodes into fly.
    if ($.isArray(elem)) {
        // empties fly
        fly.length  = 0;
        i           = push.apply(fly, elem);
    } else {
        // if already $ then return it
        if (elem instanceof $) {
            return elem;
        }
        // dont use selectors
        if (typeof elem == "string") {
            throw "use jQuery()";
        }
        // set dom node.
        fly[0]     = elem;
        fly.length = i = 1;
    }
    // remove any elements further in the array. 
    while (i<len) {
        delete fly[i++];
    }

    return fly;
var len=fly.length,
我
//如果elem是数组,则将所有dom节点推到fly中。
如果($.isArray(elem)){
//清空苍蝇
fly.length=0;
i=推动应用(飞行,元素);
}否则{
//如果已经$1,则将其退还
if(elem instanceof$){
返回元素;
}
//不要使用选择器
如果(元素类型==“字符串”){
抛出“使用jQuery()”;
}
//设置dom节点。
fly[0]=elem;
fly.length=i=1;
}
//删除数组中的任何元素。

虽然(我不确定每次扔掉现有节点时,它的可重用性有多高。@TomalakGeret'kal不要保留对
fly
对象的引用。它会崩溃的!我会在顶部声明使用它是愚蠢的。+1来自我!不过,当我使用此功能时,仅仅构造
$
是如此缓慢很相似。回答很好!很奇怪,简单地调用
jQuery()
会产生如此巨大的开销,因此简单地缓存
jQuery
会删除此开销,然后您需要再次注意删除“最后一项”?将此优化合并到jQuery core中会有什么影响?@GaryGreen它不会产生巨大的开销。我们说的是相对速度提高4倍。这意味着jQuery便宜,缓存jQuery便宜4倍。问题是你需要确切地知道你在做什么,因为这不会设置
选择器还有其他有用的方法。到处使用这些方法可能会导致许多错误。请参阅以下jQuery开发人员的评论:
a.each(function() {
    $.fly(this);
});
(function($) {

    var fly  = $(),
        push = Array.prototype.push;

    $.fly = function(elem) {
        var len = fly.length,
            i;
        if ($.isArray(elem)) {
            fly.length  = 0;
            i           = push.apply(fly, elem);
        } else {
            if (elem instanceof $) {
                return elem;
            }
            if (typeof elem == "string") {
                throw "use jQuery()";
            }
            fly[0]     = elem;
            fly.length = i = 1;
        }
        // remove orphaned references
        while (i<len) {
            delete fly[i++];
        }

        return fly;
    };

})(jQuery);
    var len = fly.length,
        i;
    // if elem is array push all dom nodes into fly.
    if ($.isArray(elem)) {
        // empties fly
        fly.length  = 0;
        i           = push.apply(fly, elem);
    } else {
        // if already $ then return it
        if (elem instanceof $) {
            return elem;
        }
        // dont use selectors
        if (typeof elem == "string") {
            throw "use jQuery()";
        }
        // set dom node.
        fly[0]     = elem;
        fly.length = i = 1;
    }
    // remove any elements further in the array. 
    while (i<len) {
        delete fly[i++];
    }

    return fly;