我在页面中使用高级图表。这有点沉重。
当用户点击某个按钮时,它会动态加载高价图表,当用户点击close
按钮时,它会删除/隐藏图表。
我想知道哪一个会更好。
用户点击时隐藏图表?是否会减慢页面的其余部分(因为重要的javascript和处理程序一起存在?)或者,
remove()
它,这样可以使页面变亮(但在这里,当用户再次点击按钮时,我需要再次加载图表)或
使用detach()
,以便在重新加载highcharts时,它的工作速度更快
比remove()
(但不会使页面像jQuery一样重
处理程序一直存在?)
我从jQuery文档中了解到,
<。> .remove()方法从DOM中获取元素。使用.remove()时 你想要删除元素本身,以及内部的一切 它。除了元素本身,所有绑定事件和 与元素相关联的jQuery数据将被删除。
.detach()方法与.remove()相同,但.detach()除外 保持所有jQuery数据与删除的元素相关联。这个 当要删除的元素要重新插入时,方法很有用 以后的DOM。
匹配的元素将立即隐藏,无动画。 这大致相当于调用.css('display','none')
答案 0 :(得分:6)
如果您只想隐藏/显示某个对象,请使用jQuery .hide()
和.show()
。这是最简单的,只要你要保持对象,你也可以使用.hide()
和.show()
。除非对象消耗大量内存,否则它应该不是问题。
.remove()
(稍后保存然后将相同的对象重新插入DOM中)将对您没什么用处,因为它会破坏与该对象关联的一些数据,因此您可能无法轻松将其重新插入页面。
.remove()
你实际上让垃圾收集器破坏了前一个对象,然后你再次需要时从头开始重新创建它是最节省内存的操作,但除非它消耗大量内存或你有一个很多人(例如成千上万),这样做可能只是做更多的工作而没有任何有意义的好处。
.detach()
(虽然稍后保存然后将相同的对象重新插入DOM中)会起作用,但它比.hide()
和.show()
更有效,而且说实话,我宁愿怀疑你会发现两种选择之间存在差异。
答案 1 :(得分:5)
3将触发渲染和重绘,因此,如果您关心性能,请选择.hide(),因为它将“节省”一些dom操作(并且可能重绘2次)。不要忘记图表上的听众。
但是,我发现效果.addClass('hidden')
和.removeClass('hidden')
,使用css规则(.hidden {display: none}
)效果最佳。 (只要你没有隐藏滚动)。