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 相关文章推荐
JS DOM 操作实现代码
Aug 01 Javascript
IE 当eval遇上function的处理
Aug 09 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
Nov 21 Javascript
jQuery中;function($,undefined) 前面的分号的用处
Dec 17 Javascript
JS 全屏和退出全屏详解及实例代码
Nov 07 Javascript
jQuery实现联动下拉列表查询框
Jan 04 Javascript
JavaScript制作简易计算器(不用eval)
Feb 05 Javascript
jQuery简单获取DIV和A标签元素位置的方法
Feb 07 Javascript
vue中eventbus被多次触发以及踩过的坑
Dec 02 Javascript
JavaScript 中的12种循环遍历方法【总结】
May 31 Javascript
Vue+Vuex实现自动登录的知识点详解
Mar 04 Javascript
谈谈JavaScript令人迷惑的==与+
Aug 31 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
多重?l件?合查?(一)
2006/10/09 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
js展开闭合效果演示代码
2013/07/24 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
用JavaScript获取页面文档内容的实现代码
2016/06/10 Javascript
微信小程序 扎金花简单实例
2017/02/21 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
vue生命周期实例小结
2018/08/15 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
微信小程序实现发送验证码按钮效果
2018/12/20 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
python Django批量导入数据
2016/03/25 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
python方向键控制上下左右代码
2018/01/20 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
通过celery异步处理一个查询任务的完整代码
2019/11/19 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
企业统计员岗位职责
2013/12/13 职场文书
业务副厂长岗位职责
2014/01/03 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
保护环境标语
2014/06/09 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript