jQuery detach()v / s remove()v / s hide()

我在我的页面中使用高级图表。 这有点沉重。

当用户单击按钮时,它会动态加载高图,当用户单击close按钮时,它会删除/隐藏图表。

我想知道哪一个会更好。

  1. 用户点击时隐藏图表? 它会减慢页面的其余部分(因为重量级的javascript和处理程序一起存在吗?)或者,

  2. remove()它,以便它使页面更轻(但在这里,当用户再次点击按钮时,我需要再次加载图表)或者,

  3. 使用detach() ,这样在重新加载highcharts时,它比remove()工作得更快(但是由于jQuery处理程序一直存在,它会不会使页面变重?)

我从jQuery文档中了解到,

。去掉()

.remove()方法从DOM中获取元素。 如果要删除元素本身以及其中的所有内容,请使用.remove()。 除了元素本身之外,还删除了与元素关联的所有绑定事件和jQuery数据。

。分离()

.detach()方法与.remove()相同,除了.detach()保留与删除的元素关联的所有jQuery数据。 当删除的元素稍后要重新插入DOM时,此方法很有用。

。隐藏()

匹配的元素将立即隐藏,没有动画。 这大致相当于调用.css(’display’,’none’)

如果您只是想隐藏/显示一个对象,那么使用jQuery .show().show() 。 这是最简单的,只要你要保持对象无论如何,你也可以使用.show().show() 。 除非对象消耗大量内存,否则它应该不是问题。

.remove() (虽然稍后保存然后将相同的对象重新插入DOM中)对你来说没什么用处,因为它会破坏与对象相关的一些数据,所以你可能无法轻易地将它重新插入到页。

.remove()你实际上让垃圾收集器破坏了前一个对象,然后你再次需要时从头开始重新创建它是最节省内存的操作,但除非它消耗大量内存或者你有很多内存(例如成千上万),这样做可能只是更多的工作而没有任何有意义的好处。

.detach() (虽然稍后保存然后将相同的对象重新插入DOM中)会起作用,但它比.show().show()更有效,而且说.show() ,我相信你会发现差别两种选择之间。

3将触发渲染和重绘,因此,如果你关注性能,那就去.hide(),因为它会“节省”一些dom操作(并且可能会重绘2次)。 不要忘记图表上的听众。

但是,我发现forperformance .addClass('hidden').removeClass('hidden')与css规则( .hidden {display: none} )效果最好。 (只要你没有隐藏滚动)。