Javascript Laggy字符串搜索,如何改进?

Javascript Laggy字符串搜索,如何改进?,javascript,Javascript,我有一个函数,用于在具有特定类名的元素的内部文本中搜索特定字符串。当它找到一个匹配项时,它给该元素一个要显示的块的显示,如果不显示,则不显示任何要隐藏的块。当我用它来搜索时(我有大约3000个相同类的元素),它需要几秒钟(大约5s)才能完成。是否有一种更基于性能的方法来编写此代码,或者缩短一两秒钟 function searchClass(ClassName, Value){ var c = document.getElementsByClassName(ClassName);

我有一个函数,用于在具有特定类名的元素的内部文本中搜索特定字符串。当它找到一个匹配项时,它给该元素一个要显示的块的显示,如果不显示,则不显示任何要隐藏的块。当我用它来搜索时(我有大约3000个相同类的元素),它需要几秒钟(大约5s)才能完成。是否有一种更基于性能的方法来编写此代码,或者缩短一两秒钟

function searchClass(ClassName, Value){
    var c = document.getElementsByClassName(ClassName);
    var val = Value.toLowerCase().trim();
    for(var i=0;i<c.length;i++){
        if(c[i].innerText.toLowerCase().trim().indexOf(val) > -1){
            c[i].style.display = "block";
        }else{
            c[i].style.display = "none";
        }
    }
}
函数searchClass(类名、值){
var c=document.getElementsByClassName(ClassName);
var val=Value.toLowerCase().trim();
对于(变量i=0;i-1){
c[i].style.display=“block”;
}否则{
c[i].style.display=“无”;
}
}
}
还有一个键控事件会触发该功能


编辑:(解决方案)只需将innerText更改为textContent,并通过注释进行一些小的更改,我的搜索速度就会立即大大加快

当您不需要之前的值时,pre-increment比post-increment快,您也不需要,所以在for循环中切换到pre-increment(尽管我希望今天有竞争力的js引擎能够自动优化它,但gcc已经在-O1和更高版本上这么做了很久)


另外,除非您有很多脚本元素,否则textContent应该比innerText快得多,所以请切换到textContent。。。除此之外,我看不出有多少改进的余地

您可以将它们全部设置为在css中显示none,然后显示需要显示的内容(无需在js中设置display none),还可以缓存
c[i]
。如果您可以在type complete而不是keyup上触发此命令,可能会有很大帮助。如果必须,请使用加载微调器,这样用户在加载时不会认为什么都没有发生。触发函数的频率有多高?使用vanilla JS已经是优化性能的一个重要步骤。我看到的另一件事是,您可以将
c[I]
保存到局部变量,但这可能不会太多地提高性能。您能更好地解释一下您的意思吗?通过这种方式,我们可以避免不适合您的问题的答案。将字符串作为数组保存在内存中可能会更快,该数组已预处理为小写并经过修剪,搜索该字符串,然后使用结果更新DOM。我需要看到更多的代码(最好是一个完整的站点来演示这个问题)并运行测试来验证。