一种移除页面的dom节点的方法和装置制造方法

文档序号:6493945阅读:159来源:国知局
一种移除页面的dom节点的方法和装置制造方法
【专利摘要】本申请公开了一种移除页面的DOM节点的方法和装置。该方法包括:接收移除页面的DOM节点的命令;当在页面卸载事件发生之前接收到移除页面的DOM节点的命令时,先将与该DOM节点绑定的事件移除,然后再将该DOM节点移除。应用本发明能够解决包括IE浏览器在内的某些浏览器内存占用过高的问题。
【专利说明】一种移除页面的DOM节点的方法和装置
【技术领域】
[0001]本申请涉及计算机【技术领域】,尤其涉及一种移除页面的DOM节点的方法和装置。【背景技术】
[0002]包括IE浏览器在内的某些浏览器在内存管理方面存在着一定的缺陷,导致了浏览器的内存占用过闻。针对IE浏览器内存占用过闻的问题,目如存在着如下的解决方案:
[0003]通过建立事件索引表的方式,跟踪页面上绑定的每一个事件,并监听页面的卸载事件,在监听到页面的卸载事件时,遍历事件索引表,将遍历到的所有事件移除,从而释放这些绑定事件占用的内存。
[0004]其中,目前建立事件索引表的方法包括:当页面在DOM节点绑定一个事件时,为该事件分配一个ID,该ID为事件索引表的一个键,并指向该事件的属性索引表,该事件的属性索引表的内容包括:绑定该事件的D OM节点信息、该事件的类型、以及该事件的处理方法,其中绑定该事件的DOM节点信息具体为指向该DOM节点的引用。
[0005]在IE浏览器监听到页面的卸载事件之前,如果产生将DOM节点移除的事件,例如页面开发人员需要将该页面中的DOM节点移除、或者用户浏览页面时的某些操作触发了移除DOM节点的事件,则IE浏览器在接收到移除DOM节点的命令后,直接执行移除DOM节点的操作。
[0006]然而,由于被移除的DOM节点可能绑定了事件,该DOM节点绑定的事件还存在对该DOM节点信息的引用,因此IE浏览器不会真正删除所述被移除的DOM节点,而是将该被移除的DOM节点的信息暂存在预设的内存中。
[0007]可见,包括IE浏览器在内的某些浏览器在监听到页面的卸载事件之前,如果接收到移除页面的DOM节点的命令,则IE浏览器无法真正删除被移除的DOM节点,因此无法释放被移除的DOM节点占用的内存空间,导致了 IE浏览器的内存占用过高。

【发明内容】

[0008]有鉴于此,本申请提供了一种移除页面的DOM节点的方法和装置,能够解决包括IE浏览器在内的某些浏览器内存占用过高的问题。
[0009]一种移除页面的DOM节点的方法,该方法包括:
[0010]接收移除页面的DOM节点的命令;
[0011]当在页面卸载事件发生之前接收到移除页面的DOM节点的命令时,先将与该DOM节点绑定的事件移除,然后再将该DOM节点移除。
[0012]一种移除页面的DOM节点的装置,该装置包括接收模块和移除模块;
[0013]所述接收模块,用于接收移除页面的DOM节点的命令;
[0014]所述移除模块,用于当所述接收模块在页面卸载事件发生之前接收到移除页面的DOM节点的命令时,先将与该DOM节点绑定的事件移除,然后再将该DOM节点移除。
[0015]可见,当在页面卸载事件发生之前接收到移除页面的DOM节点的命令时,本发明先将与该DOM节点绑定的事件移除,然后再将该DOM节点移除,与现有技术中在接收到移除DOM节点的命令时直接移除DOM节点相比,由于先移除了与该DOM节点绑定的事件,相当于解除了绑定事件对DOM节点的引用,因此可以在移除DOM节点时可以真正地删除被移除的DOM节点,而非将被移除的DOM节点暂存在预设的内存中,因此本发明能够节省浏览器的内存,解决包括IE浏览器在内的某些浏览器内存占用过高的问题。
【专利附图】

【附图说明】
[0016]图1是本发明提供的移除页面的DOM节点的方法流程图。
[0017]图2是本发明提供的移除页面的DOM节点的装置结构图。
【具体实施方式】
[0018]图1是本发明提供的移除页面的DOM节点的方法流程图。
[0019]如图1所示,该方法包括:
[0020]步骤101,接收移除页面的DOM节点的命令。
[0021]本步骤中,可以在页面卸载事件发生之前接收移除页面的DOM节点的命令。
[0022]步骤102,根据在页面卸载事件发生之前接收到的移除页面的DOM节点的命令,将与该DOM节点绑定的事件移除。
[0023]步骤103,将所述DOM节点移除。
[0024]其中,步骤102和步骤103的顺序不可调,也就是说,当在页面卸载事件之前接收到移除页面的DOM节点的命令时,需要先将与该DOM节点绑定的事件移除,然后再将该DOM节点移除。
[0025]当DOM节点具有子节点时,将该DiM节点绑定的事件移除具体可以包括:遍历该DOM节点直接绑定的事件,将与该DOM节点直接绑定的所有事件移除;并且,遍历该DOM节点的各层子节点绑定的事件,将与该DOM节点的各层子节点绑定的所有事件移除。
[0026]具体地,本发明可以为页面上每个绑定的事件分配一个唯一的标识(ID),通过这个ID为每个事件维护一份事件属性表,事件属性表的内容包括:绑定事件的DOM节点、绑定的事件类型、响应事件的处理方法。
[0027]对于绑定事件的DOM节点,为其维护一份事件ID序列,每个ID对应该DOM节点上绑定的一个事件。
[0028]当移除与DOM节点绑定的事件时,可以通过遍历该DOM节点对应的事件ID列表,将该事件ID列表中的所有事件移除。
[0029]因此,将与DOM节点直接绑定的所有事件移除具体可以包括:遍历该DOM节点对应的事件ID序列,将该事件ID序列中的所有事件移除;将DOM节点的各层子节点绑定的事件移除具体可以包括:遍历该DOM节点的各层子节点,遍历每个子节点对应的事件ID序列,将每个子节点对应的事件ID序列中的所有事件移除。在移除事件时,具体可以根据该事件的ID查询事件属性表,根据所述事件属性表删除该事件,并解除事件属性表对该事件绑定的DOM节点的引用。
[0030]在将与DOM节点及其各层子节点绑定的事件移除以后,将DOM节点插入充当节点回收站的临时节点,并将所述临时节点的innerHTML属性设置为空,从而实现将该DOM节点彻底删除。
[0031]其中,DOM节点的innerHTML属性用于描述该DOM节点的内容,当innerHTML属性被设置为空时,则该DOM节点的子节点都会被删除,因此,通过将需要移除的DOM节点插入充当节点回收站的临时节点,并且临时节点的innerHTML属性又被设置为空,因此可以实现真正地删除DOM节点。
[0032]为了进一步解决浏览器关闭后的内存泄露问题,本发明还提出,可以解除被移除的DOM节点与事件或其他DOM节点的双向引用关系,避免由于DOM节点之间、或者DOM节点与事件之间存在双向引用关系,而导致在浏览器关闭后浏览器占用的内存仍然不能释放的内存泄露问题。
[0033]本发明还提供了一种移除页面的DOM节点的装置。
[0034]图2是本发明提供的移除页面的DOM节点的装置结构图。
[0035]如图2所示,该装置包括接收模块201和移除模块202。
[0036]接收模块201,用于接收移除页面的DOM节点的命令。
[0037]移除模块202,用于当接收模块201在页面卸载事件发生之前接收到移除页面的DOM节点的命令时,先将与该DOM节点绑定的事件移除,然后再将该DOM节点移除。
[0038]其中,移除模块202具体可以包括第一移除模块和第二移除模块。
[0039]所述第一移除模块,用于遍历该DOM节点直接绑定的事件,将与该DOM节点直接绑定的所有事件移除。
[0040]所述第二移除模块,用于遍历该DOM节点的各层子节点绑定的事件,将与该DOM节点的各层子节点绑定的所有事件移除。
[0041]所述第一移除模块,具体可以用于遍历该DOM节点对应的事件标识ID序列,将该事件ID序列中的所有事件移除。
[0042]所述第二移除模块,具体可以用于遍历该DOM节点的各层子节点,遍历每个子节点对应的事件ID序列,将每个子节点对应的事件ID序列中的所有事件移除。
[0043]其中,每个绑定了事件的DOM节点对应一个事件标识ID序列,该事件ID序列中存储了对应的DOM节点直接绑定的事件信息。
[0044]移除模块201,具体可以用于对于每个需要移除的事件,通过查询该事件的事件属性表,根据所述事件属性表删除所述事件,并解除所述事件属性表对需要移除的DOM节点的引用。
[0045]其中,所述事件属性表是通过为页面上每个绑定的事件分配一个唯一的ID而建立的,其中存储了每个事件绑定的DOM节点信息、事件类型信息、以及响应所述事件的处理方法息O
[0046]移除模块201,具体可以用于将移除的DOM节点插入充当节点回收站的临时节点,并将该临时节点的innerHTML属性设置为空,所述innerHTML属性用于描述所述临时节点的内容。
[0047]该装置还可以包括双向引用关系解除模块。
[0048]所述双向引用关系解除模块,用于解除被移除的DOM节点与事件或其他DOM节点的双向引用关系。
[0049]下面举一个具体的例子对本发明进行示例性说明。[0050]假设页面上存在一个父节点,记为P节点,该P节点上面直接绑定了两个事件,分别为事件EVENT_P_01和事件EVENT_P_02 ;P节点具有一个子节点,记为C节点,C节点上绑定了一个事件,记为事件EVENT_C_01,则当接收到将P节点从页面上移除的命令以后,本发明需要执行以下步骤:
[0051]步骤1,将P节点以上绑定的所有事件移除。
[0052]步骤I具体包括步骤11和步骤12:
[0053]步骤11,检查P节点对应的事件ID序列,将P节点绑定的事件EVENT_P_01和事件EVENT_P_02 移除。
[0054]步骤12,然后检查P节点的子节点C对应的事件ID序列,将C节点绑定的事件EVENT_C_01 移除。
[0055]步骤2,移除P节点,即将P节点插入充当节点回收站的临时节点,该临时节点的innerHTML属性设置为空,从而完成P节点的移除。
[0056]可见,通过本发明,可以有效地降低页面打开期间的内存占用以及可能存在的页面关闭以后的内存泄露问题,使得IE浏览器以及与IE浏览器存在同样问题的其他浏览器下的付客户端应用页面的性能能够得到有效提升。
[0057]并且,通过本发明,还可以避免开发人员手动跟踪DOM节点上绑定的每一个事件,能够提闻开发效率。
[0058]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种移除页面的DOM节点的方法,其特征在于,该方法包括: 接收移除页面的DOM节点的命令; 当在页面卸载事件发生之前接收到移除页面的DOM节点的命令时,先将与该DOM节点绑定的事件移除,然后再将该DOM节点移除。
2.根据权利要求1所述的方法,其特征在于,所述将与该DOM节点绑定的事件移除包括: 遍历该DOM节点直接绑定的事件,将与该DOM节点直接绑定的所有事件移除; 遍历该DOM节点的各层子节点绑定的事件,将与该DOM节点的各层子节点绑定的所有事件移除。
3.根据权利要求2所述的方法,其特征在于, 所述遍历该DOM节点直接绑定的事件,将与该DOM节点直接绑定的所有事件移除包括: 遍历该DOM节点对应的事件标识ID序列,将该事件ID序列中的所有事件移除; 所述遍历该DOM节点的各 层子节点绑定的事件包括: 遍历该DOM节点的各层子节点,遍历每个子节点对应的事件ID序列,将每个子节点对应的事件ID序列中的所有事件移除; 其中,每个绑定了事件的DOM节点对应一个事件标识ID序列,该事件ID序列中存储了对应的DOM节点直接绑定的事件信息。
4.根据权利要求1或2或3所述的方法,其特征在于,对于每一个需要移除的事件,通过查询该事件的事件属性表,根据所述事件属性表删除所述事件,并解除事件属性表对所述事件绑定的DOM节点的引用; 其中,所述事件属性表是通过为页面上每个绑定的事件分配一个唯一的ID而建立的,其中存储了每个事件绑定的DOM节点信息、事件类型信息、以及响应所述事件的处理方法信息。
5.根据权利要求1所述的方法,其特征在于,所述将该DOM节点移除包括: 将该DOM节点插入充当节点回收站的临时节点,并将该临时节点的innerHTML属性设置为空,所述innerHTML属性用于描述所述临时节点的内容。
6.根据权利要求1所述的方法,其特征在于,该方法还包括: 解除被移除的DOM节点与事件或其他DOM节点的双向引用关系。
7.一种移除页面的DOM节点的装置,其特征在于,该装置包括接收模块和移除模块; 所述接收模块,用于接收移除页面的DOM节点的命令; 所述移除模块,用于当所述接收模块在页面卸载事件发生之前接收到移除页面的DOM节点的命令时,先将与该DOM节点绑定的事件移除,然后再将该DOM节点移除。
8.根据权利要求7所述的装置,其特征在于,所述移除模块包括第一移除模块和第二移除1吴块; 所述第一移除模块,用于遍历该DOM节点直接绑定的事件,将与该DOM节点直接绑定的所有事件移除; 所述第二移除模块,用于遍历该DOM节点的各层子节点绑定的事件,将与该DOM节点的各层子节点绑定的所有事件移除。
9.根据权利要求8所述的装置,其特征在于, 所述第一移除模块,用于遍历该DOM节点对应的事件标识ID序列,将该事件ID序列中的所有事件移除; 所述第二移除模块,用于遍历该DOM节点的各层子节点,遍历每个子节点对应的事件ID序列,将每个子节点对应的事件ID序列中的所有事件移除; 其中,每个绑定了事件的DOM节点对应一个事件标识ID序列,该事件ID序列中存储了对应的DOM节点直接绑定的事件信息。
10.根据权利要求7或8或9所述的装置,其特征在于, 所述移除模块,用于对于每一个需要移除的事件,通过查询该事件的事件属性表,根据所述事件属性表删除所述事件,并解除所述事件属性表对需要移除的DOM节点的引用;其中,所述事件属性表是通过为页面上每个绑定的事件分配一个唯一的ID而建立的,其中存储了每个事件绑定的DOM节点信息、事件类型信息、以及响应所述事件的处理方法信息。
11.根据权利要求7所述的装置,其特征在于, 所述移除模块,用于将移除的DOM节点插入充当节点回收站的临时节点,并将该临时节点的innerHTML属性设置为空,所述innerHTML属性用于描述所述临时节点的内容。
12.根据权利要求7所述的装置,其特征在于,该装置还包括双向引用关系解除模块; 所述双向引用关系解除模块,用于解除被移除的DOM节点与事件或其他DOM节点的双向引用关系。
【文档编号】G06F17/30GK103902581SQ201210579298
【公开日】2014年7月2日 申请日期:2012年12月28日 优先权日:2012年12月28日
【发明者】陈映平, 郭学亨, 李晶, 吴浩, 刘恒兵, 龙丁奋 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1