我一直在追踪我们的一个javascript应用程序中的性能问题(在IE中,更糟糕的是)我能够跟踪它到jQueryUI按钮功能。我创建了一个显示问题的jsfiddle。问题是3部分:
首先,按钮的生成非常慢。该页面在IE8下在5秒内生成800个按钮,而当我禁用按钮功能时,它需要大约700毫秒。更糟糕的是,每个创建/删除周期都会变得越来越慢。相比之下,在Chrome中,使用按钮功能只需不到一秒钟(约600毫秒),没有它需要大约50毫秒。对于两个浏览器来说,这都是10倍的减速!
其次,删除/销毁所有这些按钮也很慢。我在容器上使用empty()
方法来清除所有按钮,并最终在按钮上调用destroy
。此操作在IE8下大约需要5秒,在Chrome中大约需要500秒。删除jquery按钮功能后,IE8需要200ms,Chrome浏览器需要30-40ms。这比自己生成按钮慢了20倍。
第三,似乎按钮功能会导致IE中出现大量内存泄漏。反复创建和删除按钮会导致内存使用率上升和下降,但再次删除按钮功能会修复此问题。
任何人都可以解释这种行为吗?这是jQueryUI中的性能问题应该报告还是我遇到了陷阱?任何解决方法?
注意:当我说我删除按钮功能时,并不是我从文档中删除<button>
元素,只是我删除了对jqueryUI的按钮功能的调用:< / p>
.button({
'text': true
})