jQuery内存泄露解决办法


Posted in Javascript onDecember 13, 2016

本文大家分享了jQuery内存泄露解决办法,供大家参考,具体内容如下

思路:为JQuery扩展删除jquery元素对象的方法,大大减轻内存泄露的压力

;(function($){
 if(!$.lui.widget) $.lui.widget = {};
 //$.lui.newGuid()生成随机32位id

 //如果采用此方式多次生成jquery对象的话,html代码字符串会在内存中多次重复,占用额外的内容,也会有泄露。而$("<span></span>").attr('id',_id)写法无此问题。

 $.lui.widget.__clean$ = $("<span id='" + $.lui.newGuid()+ "'></span>");
 /**
 * 释放jquery对象,无返回值。此方法用以解决jquery的内存泄露问题
 */
 $.fn.del = function( selector, keepData ) {
 if ( !selector || $.filter( selector, [ this ] ).length ) {
  // 释放dom对象
  var item = $(this);
  var clearItem = $.lui.widget.__clean$;
  item.appendTo(clearItem);
  $('*',clearItem).each(function(i, e) {
  (events = $.data(this, 'events')) && $.each(events, function(i, e1) {
   $(e).unbind(i + '.*');
  });
  $.event.remove(this);
  $.removeData(this);
  });
  clearItem[0].innerHTML = '';
  item = null;
 }
 };

 /**
 * 计算字符串在某元素上不折行时的长度
 * @param {jQuery} $Element jquery元素
 * @param {String} str 字符串
 * @returns  {Number}  字符串长度(px)
 */
 $.lui.widget.clacStrLength = function($Element,str){
   var _id = $.lui.newGuid();
   var $tmpSpan = $("<span></span>").attr('id',_id).css({
    'position':'absolute',
    'top':'-1000px'
   }).appendTo('body');
   var _width = $tmpSpan.css({
    'font-family':$Element.css('font-family'),
    'font-size':$Element.css('font-size'),
    'letter-spacing':$Element.css('letter-spacing'),
    'word-spacing':$Element.css('word-spacing'),
    'text-indent':$Element.css('text-indent')
   }).text(str).innerWidth();
   $tmpSpan.del();
   $tmpSpan = null;
   return _width;
 };

 /**
 * 在某元素上按像素截取字符串 (采用浏览器默认处理空白方式,不适用于复杂场景,仅用于不换行情况下按像素截取字符串)
 * @param $Element jquery元素(该元素的字体设置必须已经确定)
 * @param str 字符串
 * @param limit  像素值
 * @returns 按像素截取后的字符串
 */
 $.lui.widget.substrByPx = function($Element,str,limit){
 if($Element === undefined || !$Element instanceof $) return '';
 if(str === undefined || typeof str != 'string') return '';
 if(limit === undefined) return str;
 if(!str || limit <=0 ) return '';
 var _str = new String(str);

 var _id = $.lui.newGuid();
 var $tmpSpan = $("<span></span>").attr('id',_id).css({
  'position':'absolute',
  'top':'-1000px'
 }).appendTo('body');
 var _width = $tmpSpan.css({
  'font-family':$Element.css('font-family'),
  'font-size':$Element.css('font-size'),
  'letter-spacing':$Element.css('letter-spacing'),
  'word-spacing':$Element.css('word-spacing'),
  'text-indent':$Element.css('text-indent')
 }).text(str).innerWidth();
 while( _width >limit){
  _str = _str.substring(0, _str.length-1);
  _width = $tmp.text(_str).innerWidth();
 }
 $tmpSpan.del();
 $tmpSpan = null;
 return _str;
 }; 
})(jQuery);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
求得div 下 img的src地址的js代码
Feb 28 Javascript
Extjs学习笔记之三 extjs form更多的表单项
Jan 07 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
Mar 07 Javascript
js自动下载文件到本地的实现代码
Apr 28 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
Oct 17 Javascript
JQuery基础语法小结
Feb 27 Javascript
JS简单实现动画弹出层效果
May 05 Javascript
JavaScript禁止用户多次提交的两种方法
Jul 24 Javascript
JQ选择器_选择同类元素的第N个子元素的实现方法
Sep 08 Javascript
使用bootstrap插件实现模态框效果
May 10 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
Jan 18 Javascript
使用rollup打包JS的方法步骤
Dec 05 Javascript
Angular 常用指令实例总结整理
Dec 13 #Javascript
jQuery UI制作选项卡(tabs)
Dec 13 #Javascript
详解Bootstrap各式各样的按钮(推荐)
Dec 13 #Javascript
javascript动画系列之模拟滚动条
Dec 13 #Javascript
js闭包用法实例详解
Dec 13 #Javascript
深入学习Bootstrap表单
Dec 13 #Javascript
ThinkJS中如何使用MongoDB的CURD操作
Dec 13 #Javascript
You might like
mysql 字段类型说明
2007/04/27 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
javascript入门·对象属性方法大总结
2007/10/01 Javascript
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
js读取注册表的键值示例
2013/09/25 Javascript
node.js使用nodemailer发送邮件实例
2014/03/10 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
Javascript类型转换的规则实例解析
2016/02/23 Javascript
详解vuejs几种不同组件(页面)间传值的方式
2017/06/01 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
详解ES6 CLASS在微信小程序中的应用实例
2020/04/24 Javascript
python读写ini文件示例(python读写文件)
2014/03/25 Python
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
Python环境搭建之OpenCV的步骤方法
2017/10/20 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
python 解压pkl文件的方法
2018/10/25 Python
Pandas之Fillna填充缺失数据的方法
2019/06/25 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
django项目中新增app的2种实现方法
2020/04/01 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
国际书籍零售商:Wordery
2017/11/01 全球购物
高一新生军训感言
2014/03/02 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
广场舞大赛策划方案
2014/05/31 职场文书
经理任命书模板
2014/06/06 职场文书
上班离岗检讨书
2014/09/10 职场文书
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书