我有一段代码,导致某种内存泄漏。经过数小时的测试后,我设法将其追踪到elem2.is(":visible");
。减慢javaScript。错误。 jQuery.is(“:visible”)
我如何跟踪它 - >我的代码在延迟1秒后自行循环。我将这个延迟设置为0,并保存了10次迭代所需的平均时间。我结束了一个整数列表,如下所示。
这里是我的“速度测试”没有任何memoryLeaks等:
"4128 , 3964 , 4054 , 3994 , 3946 , 4011 , 4117 , 4044 , 4036 , 3945 , 4031 , 3859 , 4015 , 4019"
我只包括第一位的查看结果。但你可以看到平均需要4000毫秒才能完成十次循环。当我包括elem2.is(":visible");
5128 , 4967 , 4975 , 5085 , 5127 , 5261 , 5550 , 5804 , 6160 , 6395 , 6617 , 7056 , 7658 , 8191 , 8492 , 9038 , 9364 , 10242 , 10893
正如你可以看到做循环增加“X”量成倍所花费的时间
下一页这里的值。
下面是代码:
function foo() {
var elem1 = $("#A"),
elem2 = $("#B");
if(elem1.length && elem2.length && elem2.is(":visible")) {
// Do stuff
}
}
有谁知道任何知道这个功能的问题?无论如何,以避免它放慢我的功能? (我最想知道为什么它也这样做)。
感谢
注意:我设法消除了这个错误。使用'elem2.css(“隐藏”)!==“无”来检查。仍然非常好奇为什么会出现这个错误。 – User2
注意:我应该提到这个错误只会发生,如果你喜欢'for(var i = 0; i <1000; i ++){foo();}'。 – User2
注意:最后我使用了'elem [0] .offsetHeight && elem [0] .offsetWidth'。如果其中任一个是'0',则elem被隐藏。做完这个改变后,无论我跑了多久,我的'SpeedTest'都能得到稳定/一致的结果。 – User2