当前位置: 首页 > news >正文

jQuery清空标签内容--防止内存泄露

  写jQuery代码是,经常会做清空一个标签内容的操作。那么你是怎么做的呢?比如

<div id="box">
    <p>星期一</p>
    <p>星期二</p>
    <p>星期三</p>
    <p>星期四</p>
    <p>星期五</p>
    <p>星期六</p>
    <p>星期天</p>
</div>

  我们要清除掉box中的所有元素。

  你可能会好不犹豫的写下代码:

$('#box').html('');

  首先必须承认,这么写能实现清空box的效果。

  但是,这么写不好。因为这么写有可能会引起内存泄露。

  何谓内存泄露?就是你的程序由于某种原因,占用了过多的内存空间,并且,在你不需要使用这些内存空间之后,仍然无法释放掉这些内存空间;当你由此占用的空间越来越多,达到一定程度后,就有可能引起程序崩溃;此所谓内存泄露。

  那问题来了,这个$obj.html('')方法为啥会引起内存泄露?(ps:这里的$obj表示一个jQuery对象)

  $obj.html('')只清空该对象的内部元素,但是不会清楚注册在内部元素上的事件。

  比如上例中,如果div#box里的p标签上还注册有事件,那么这些事件代码当然要占用内存。如果你使用$('#box').html('')来清空所有的p,那么box的内容确实被清空了,但是注册在这些p标签上的事件代码并没有被清理掉,这些事件代码仍然保留在内存里,并且无法得到释放。

  解决之道:使用empty()

$('#box').empty();

  empty()会清空一切,包括那些被清理掉的元素身上注册的事件,这样就防止发生内存泄露。

  ps:你可能会说,现在内存动不动都4G,8G,你要是因为这卡了,是你电脑太烂。你非要这么说,我也无话可说。不过话说回来了,有更好的,正确的,为啥不用呢?勿以善小而不为嘛

  

转载于:https://www.cnblogs.com/ldq678/p/9902684.html

相关文章:

  • 对“工厂方法”,突然茅塞顿开
  • 算法第三章上机实践报告
  • 2018-2019-1 20165320 《信息安全系统设计基础》第六周学习总结
  • ajax实现异步上传多图并且预览
  • Redis学习之管道机制
  • fiddler安装及抓包分析
  • TP5 对于数组使用分页的方法
  • 通过K8S Ingress Controller来实现应用的流量复制
  • 主流接口测试框架对比
  • 虚拟化网络技术
  • 跨域技术
  • 微信公众号开发-业务开发03
  • 浅析装饰器
  • this的用法详解
  • Oracle 18c新特性详解-多租户专题
  • 2018一半小结一波
  • 4. 路由到控制器 - Laravel从零开始教程
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • express.js的介绍及使用
  • Java 网络编程(2):UDP 的使用
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Python语法速览与机器学习开发环境搭建
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Terraform入门 - 3. 变更基础设施
  • 初识MongoDB分片
  • 从0到1:PostCSS 插件开发最佳实践
  • 回顾 Swift 多平台移植进度 #2
  • 基于组件的设计工作流与界面抽象
  • 前嗅ForeSpider中数据浏览界面介绍
  • 学习HTTP相关知识笔记
  • 用Canvas画一棵二叉树
  • 【干货分享】dos命令大全
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #Linux(make工具和makefile文件以及makefile语法)
  • (2)(2.10) LTM telemetry
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (六)vue-router+UI组件库
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (十一)c52学习之旅-动态数码管
  • (转)Oracle存储过程编写经验和优化措施
  • .gitignore
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET 回调、接口回调、 委托
  • .net 提取注释生成API文档 帮助文档
  • .Net中ListT 泛型转成DataTable、DataSet
  • .NET中使用Redis (二)
  • /dev下添加设备节点的方法步骤(通过device_create)
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @Query中countQuery的介绍
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [20150321]索引空块的问题.txt