Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以修改此jQuery以加快运行速度?_Jquery_Performance_Internet Explorer - Fatal编程技术网

是否可以修改此jQuery以加快运行速度?

是否可以修改此jQuery以加快运行速度?,jquery,performance,internet-explorer,Jquery,Performance,Internet Explorer,下面的jQuery每个函数都会导致IE8显示“停止运行脚本?”消息。此页面上的脚本会导致浏览器运行缓慢..” $('.expand-collapse icon')。每个(函数(){ var dupId=$(this.parent('td').attr('duplicate-id'); var len=$(“.results table tr”) .filter(“:not(:first)”) .filter(“:has(.hidden row[duplicate id='”+dupId+“'])

下面的jQuery
每个
函数都会导致IE8显示“停止运行脚本?”消息。此页面上的脚本会导致浏览器运行缓慢..”

$('.expand-collapse icon')。每个(函数(){
var dupId=$(this.parent('td').attr('duplicate-id');
var len=$(“.results table tr”)
.filter(“:not(:first)”)
.filter(“:has(.hidden row[duplicate id='”+dupId+“'])”)。长度;

如果(len有一件事可以肯定,那就是在函数的开头去掉多个$(this)-“cache”这个语句值。例如:

var $this = $(this);
现在,您的脚本在jQuery中为每次迭代包装同一对象3次-混乱

我想到的另一件事-一般来说,。每种方法都很慢,,比简单地遍历$的结果要慢得多(“.some selector example”)。编辑:我找到了这篇文章,虽然它现在很旧(从2009年开始),但大多数(如果不是全部的话)建议您继续使用这些技巧中的一个。请特别仔细查看显示每个方法性能的图表,并将其与相同数据集合上的常规循环进行比较

最后一件事可能是脚本中最严重的性能问题-len=$(“.results table tr”).filter(“:not(:first)”)select。您可以做的是至少保留select部分的结果(将此变量保留在您正在迭代的函数之外):

然后,在您在“使用过滤器进行操作”中迭代的函数中,您可以执行以下操作:

var len = cached_trs.filter(":has(.hidden-row[duplicate-id='" + dupId + "'])").length

您使用了太多相同的jQuery选择器

您可以通过在一个变量中存储多次使用的变量来进行优化

$('.expand-collapse-icon').each(function() {

    var $this = $(this);
    var $parent = $this.parent('td');
    var dupId = $parent.attr('duplicate-id');

    var len = $(".results-table tr")
        .filter(":not(:first)")
        .filter(":has(.hidden-row[duplicate-id='" + dupId + "'])").length;

    if (len <= 0) {
        $this.hide();
        $parent.css('padding-left', '15px');
    }

});
$('.expand-collapse icon')。每个(函数(){
var$this=$(this);
var$parent=$this.parent('td');
var dupId=$parent.attr('duplicate-id');
var len=$(“.results table tr”)
.filter(“:not(:first)”)
.filter(“:has(.hidden row[duplicate id='”+dupId+“'])”)。长度;

if(len试试这个。在这里,我缓存了大多数重复的元素获取,避免了按
类过滤行。hiddne row
只搜索一次,然后在循环中按属性过滤,这是一个重大的改进,因为属性fetches与其他元素相比速度较慢。请使用
:gt(0)
而不是“:not”(:first)“这也只是循环之外的一次

var $this, $parent, dupId, len ;

//This line will get all the rows from .resutls-table 
//filtered by ":not(:first):has(.hidden-row)"
//That way you dont have to search for trs and filter it everytime in the loop
var $resultsTr = $(".results-table tr.hidden-row:gt(0)");

$('.expand-collapse-icon').each(function() {
    $this = $(this);
    $parent = $this.parent('td');
    dupId = $parent.attr('duplicate-id');

    len = $resultsTr
        .filter("[duplicate-id='" + dupId + "'])").length;

    if (len <= 0) {
        $this.hide();
        $parent.css('padding-left', '15px');
    }
});
var$this,$parent,dupId,len;
//此行将获取.resutls表中的所有行
//过滤者:不(:第一):有(.hidden row)
//这样,您就不必每次在循环中搜索trs并对其进行过滤
var$resultsTr=$(“.results表tr.hidden-row:gt(0)”);
$('.expand-collapse icon')。每个(函数(){
$this=$(this);
$parent=$this.parent('td');
dupId=$parent.attr('duplicate-id');
len=$resultsTr
.filter(“[duplicate id='”+dupId+“'])”)。长度;

如果(len@mblase75-你在代码中看到了吗?
$parent
在两个不同的地方使用,所以缓存它是有意义的。作为一个小优化,类
.results表
可能应该是一个ID,因为从他的描述听起来,页面中似乎只有一个这样的表。@mblase75,我没有指定,但可以有b。)e不止一个表。这段代码什么时候运行?在文档准备就绪时?您能发布一些html作为示例吗?
$('.expand-collapse-icon').each(function() {

    var $this = $(this);
    var $parent = $this.parent('td');
    var dupId = $parent.attr('duplicate-id');

    var len = $(".results-table tr")
        .filter(":not(:first)")
        .filter(":has(.hidden-row[duplicate-id='" + dupId + "'])").length;

    if (len <= 0) {
        $this.hide();
        $parent.css('padding-left', '15px');
    }

});
var $this, $parent, dupId, len ;

//This line will get all the rows from .resutls-table 
//filtered by ":not(:first):has(.hidden-row)"
//That way you dont have to search for trs and filter it everytime in the loop
var $resultsTr = $(".results-table tr.hidden-row:gt(0)");

$('.expand-collapse-icon').each(function() {
    $this = $(this);
    $parent = $this.parent('td');
    dupId = $parent.attr('duplicate-id');

    len = $resultsTr
        .filter("[duplicate-id='" + dupId + "'])").length;

    if (len <= 0) {
        $this.hide();
        $parent.css('padding-left', '15px');
    }
});