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 相关文章推荐
use jscript List Installed Software
Jun 11 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
Feb 07 Javascript
javascript date格式化示例
Sep 25 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
Jun 24 Javascript
简单谈谈node.js 版本控制 nvm和 n
Oct 15 Javascript
使用grunt合并压缩js和css文件的方法
Mar 02 Javascript
MUI  Scroll插件的使用详解
Apr 13 Javascript
Vue2.0表单校验组件vee-validate的使用详解
May 02 Javascript
js自定义瀑布流布局插件
May 16 Javascript
JS实现的加减乘除四则运算计算器示例
Aug 09 Javascript
详解A标签中href=&quot;&quot;的几种用法
Aug 20 Javascript
js计算最大公约数和最小公倍数代码实例
Sep 11 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
VOLVO车载收音机
2021/03/02 无线电
深入掌握include_once与require_once的区别
2013/06/17 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
javascript[js]获取url参数的代码
2007/10/17 Javascript
javascript 短路法代码精简
2009/08/20 Javascript
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
JavaScript中的方法调用详细介绍
2014/12/30 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
[50:50]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第一场 12.20
2020/12/23 DOTA
Python学习资料
2007/02/08 Python
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
python 中的divmod数字处理函数浅析
2017/10/17 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
荷兰牛仔裤网上商店:Jeans Centre
2018/04/03 全球购物
英国在线电子和小工具商店:TecoBuy
2018/10/06 全球购物
如何打印出当前源文件的文件名以及源文件的当前行号
2015/04/05 面试题
网络安全方面的面试题
2015/11/04 面试题
实习自我鉴定模板
2013/09/28 职场文书
会计系个人求职信范文分享
2013/12/20 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
2014医学院领导干部四风对照检查材料思想汇报
2014/09/16 职场文书
初中运动会前导词
2015/07/20 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python