无论如何减少这段代码的内存占用?
Anyway to reduce memory footprint of this code?
我这里有一大段代码
//function that hides unwanted page elements based on a what is entered in a search bar
function pageSearch() {
//when the function is called it retrieves what is entered in the search bar
//*****************variables*****************\
var userInput = document.getElementById("boxOfSearching").value;
var fields = [];
//an array of all article tags
fields = document.getElementById("bulletin-course-listings").getElementsByTagName("li");
var holder = "";
var counter = 0;
var childArray = [];
//*****************processing and output*****************\
//while loop to sort through array elements
while (counter < fields.length)
{
childArray = fields[counter].getElementsByTagName("strong");
holder = childArray[0].innerHTML.toLowerCase();
if (holder.indexOf(userInput) == -1)
{
fields[counter].setAttribute("style", "display:none");
}
else
{
fields[counter].setAttribute("style", "");
}
counter++;
}
}
现在,当我在 ID 为 boxofsearching 的文本框中键入内容(在 keyup 上调用此函数)时,应该发生(并且确实发生了)。它搜索元素列表并获取标签中的内容。然后它将它与用户输入的内容进行比较,如果不包含它则删除该元素。
但是,我在包含数百个元素的列表中使用它。当我键入时会发生什么,我的浏览器被锁定,内存使用和 CPU 使用高峰持续几秒钟,然后结束。有更有效的方法吗?
您是打算删除实际的 DOM 元素,还是只是通过 CSS 隐藏它们?如果您实际上并没有从 DOM 中删除它们,您可以检索一次 元素数组 ,如下所示:
var fields = array()
document.onload = function() {
fields = document.getElementById("bulletin-course-listings").getElementsByTagName("li");
}
function pageSearch() { ... }
那你可以去掉函数中fields
的定义。这应该会稍微提高性能。
嗯,你的字段应该是一个全局变量,最好是一个简单的 JS 对象而不是元素列表,比如
fields = [{"obj1"}, {"obj2"}];
每次 keyup 的 getElementsByTagName
可能会减慢它的速度。
我这里有一大段代码
//function that hides unwanted page elements based on a what is entered in a search bar
function pageSearch() {
//when the function is called it retrieves what is entered in the search bar
//*****************variables*****************\
var userInput = document.getElementById("boxOfSearching").value;
var fields = [];
//an array of all article tags
fields = document.getElementById("bulletin-course-listings").getElementsByTagName("li");
var holder = "";
var counter = 0;
var childArray = [];
//*****************processing and output*****************\
//while loop to sort through array elements
while (counter < fields.length)
{
childArray = fields[counter].getElementsByTagName("strong");
holder = childArray[0].innerHTML.toLowerCase();
if (holder.indexOf(userInput) == -1)
{
fields[counter].setAttribute("style", "display:none");
}
else
{
fields[counter].setAttribute("style", "");
}
counter++;
}
}
现在,当我在 ID 为 boxofsearching 的文本框中键入内容(在 keyup 上调用此函数)时,应该发生(并且确实发生了)。它搜索元素列表并获取标签中的内容。然后它将它与用户输入的内容进行比较,如果不包含它则删除该元素。
但是,我在包含数百个元素的列表中使用它。当我键入时会发生什么,我的浏览器被锁定,内存使用和 CPU 使用高峰持续几秒钟,然后结束。有更有效的方法吗?
您是打算删除实际的 DOM 元素,还是只是通过 CSS 隐藏它们?如果您实际上并没有从 DOM 中删除它们,您可以检索一次 元素数组 ,如下所示:
var fields = array()
document.onload = function() {
fields = document.getElementById("bulletin-course-listings").getElementsByTagName("li");
}
function pageSearch() { ... }
那你可以去掉函数中fields
的定义。这应该会稍微提高性能。
嗯,你的字段应该是一个全局变量,最好是一个简单的 JS 对象而不是元素列表,比如
fields = [{"obj1"}, {"obj2"}];
每次 keyup 的 getElementsByTagName
可能会减慢它的速度。