JQuery grep(…)VS本机JavaScript过滤器(…)功能性能

前端之家收集整理的这篇文章主要介绍了JQuery grep(…)VS本机JavaScript过滤器(…)功能性能前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我测量了这两个功能的执行时间:

> jQuery grep功能
Native JavaScript filter功能

使用Chrome配置文件工具测量以下方法的执行情况:

// jQuery GREP function
function alternative1(words,wordToTest) {
  return $.grep(words,function(word) {
    return wordToTest.indexOf(word) != -1;                    
  });
}

// Native javascript FILTER function        
function alternative2(words,wordToTest) {
  return words.filter(function(word) {
    return wordToTest.indexOf(word) != -1;                    
  });
}

单词数组由一百万个随机生成的字符串构成.每种方法都运行20次.在我的惊喜jQuery grep功能更快.

执行时间(20次执行):

> jQuery grep功能26,31s
> Native JavaScript filter功能34,66s

您可以重复这个jsFidle的测量 – 这将需要一些时间来执行,以便耐心等待.

是否有任何解释为什么jQuery grep功能比本机JavaScript filter功能更快?

PS:这个问题的灵感来自于answer.

解决方法

通过比较页面上的.grep使用的jQuery函数
function (a,b,c) {
    var d = [],e;
    c = !! c;
    for (var f = 0,g = a.length; f < g; f++) e = !! b(a[f],f),c !== e && d.push(a[f]);
    return d
}

(here为非最小,谢谢Alexander)the algorithm指定为Array.prototype.filter.

它看起来像我一样的.filter强制它是对Object,检查回调IsCallable并设置它在它以及检查每个迭代中属性的存在,而.grep假设并跳过这些步骤,这意味着稍微少一些.

将这与Chrome中的JavaScript编译器的效能相结合,您可能会发现速度差异.

将其中的一些添加到$.grep中会使其看起来像

function (elems,callback,inv,thisArg) {
    var ret = [],retVal;
    inv = !!inv;
    for (var i = 0,length = elems.length; i < length; i++) {
        if (i in elems) { // check existance
            retVal = !!callback.call(thisArg,elems[i],i); // set callback this
            if (inv !== retVal) {
                ret.push(elems[i]);
            }
        }
    }
    return ret;
}

并且需要大约与.filter (modified Alexander’s jsperf)相同的时间.

原文链接:https://www.f2er.com/jquery/180166.html

猜你在找的jQuery相关文章