JavaScipt 源码解析 数据缓存
常见的内存泄露的几种情况:
循环引用 JavaScript闭包 DOM插入
一个DOM对象被一个JavaScript对象引用,同时又引用同一个或其他的JavaScript对象,这个DOM对象可能回引发内存泄露,这个DOM对象的引用将不会再脚本停止的时候被垃圾回收器回收,要想破坏引用,引用DOM元素的对象或DOM对象的引用需要被赋值为null。
多个对象循环引用
var a = new Object;
var b = new Object;
a.r = b;
b.r = a;
循环引用自己
var a = new object;
a.r = a;
循环引用很常见而且大部分情况下是无害的,但是参与循环引用的对象中有DOM对象或者Active对象时,循环引用将导致内存泄露
静态和实例方法的区别
jquery.data(ele)与$(ele).data()
这两个函数都是用来在元素上存放数据,也就是平时说的数据缓存,都返回jquery对象,简单的来说:
1.jquery.data()可以实现为dom元素或js对象添加缓存
2,$("ele").data()是对jquery.data()的扩展,其目的是可以方便的通过选择器为多个dom元素添加缓存数据
数据缓存,jquery现在支持两种:
1,dom元素,数据存储在jQuery.cache中。
2,普通js对象,数据存储在该对象中
先首先先要在内存中开辟一个区域,用来保存数据,jQuery用cache对象{},那么所有的数据就是针对cache的curd操作了。
1,如果是DOM元素,通过分配一个唯一的关联id把DOM元素和该DOM元素的数据缓存对象关联起来,关联id被附加到以Jquery.expando的值命名的属性上,数据存储在全局缓存对象jQuery.cache中,在读取,设置,移除数据时,将通过关联id从全局缓存对象jQuery.cache中找到关联的数据缓存对象,然后在数据对象上执行读取,设置,移除操作。
JavaScipt 源码解析 数据缓存的更多相关文章
- jQuery1.9.1源码分析--数据缓存Data模块
jQuery1.9.1源码分析--数据缓存Data模块 阅读目录 jQuery API中Data的基本使用方法介绍 jQuery.acceptData(elem)源码分析 jQuery.data(el ...
- Vue源码解析---数据的双向绑定
本文主要抽离Vue源码中数据双向绑定的核心代码,解析Vue是如何实现数据的双向绑定 核心思想是ES5的Object.defineProperty()和发布-订阅模式 整体结构 改造Vue实例中的dat ...
- jQuery 2.0.3 源码分析 数据缓存
历史背景: jQuery从1.2.3版本引入数据缓存系统,主要的原因就是早期的事件系统 Dean Edwards 的 ddEvent.js代码 带来的问题: 没有一个系统的缓存机制,它把事件的回调都放 ...
- jQuery源码解读 - 数据缓存系统:jQuery.data
jQuery在1.2后引入jQuery.data(数据缓存系统),主要的作用是让一组自定义的数据可以DOM元素相关联——浅显的说:就是让一个对象和一组数据一对一的关联. 一组和Element相关的数据 ...
- Android DiskLruCache 源码解析 硬盘缓存的绝佳方案
一.概述 依旧是整理东西,所以近期的博客涉及的东西可能会比较老一点,会分析一些经典的框架,我觉得可能也是每个优秀的开发者必须掌握的东西:那么对于Disk Cache,DiskLruCache可以算佼佼 ...
- JavaScipt 源码解析 回调函数
函数是第一类对象,这是javascript中的一个重要的概念,意味着函数可以像对象一样按照第一类管理被使用,所以在javascript中的函数: 能"存储"在变量中,能作为函数的实 ...
- myBatis源码解析-二级缓存的实现方式
1. 前言 前面近一个月去写自己的mybatis框架了,对mybatis源码分析止步不前,此文继续前面的文章.开始分析mybatis一,二级缓存的实现.附上自己的项目github地址:https:// ...
- 【菜鸟学习jquery源码】数据缓存与data()
前言 最近比较烦,深圳的工作还没着落,论文不想弄,烦.....今天看了下jquery的数据缓存的代码,参考着Aaron的源码分析,自己有点理解了,和大家分享下.以后也打算把自己的jquery的学习心得 ...
- Serilog 源码解析——数据的保存(上)
在上一篇中,我们主要研究了Serilog是如何解析字符串模板的,它只是单独对字符串模板的处理,对于日志记录时所附带的数据没有做任何的操作.在本篇中,我们着重研究日志数据的存储方式.(系列目录) 本篇所 ...
随机推荐
- css3渐变色彩
CSS3 Gradient 分为线性渐变(linear)和径向渐变(radial).由于不同的渲染引擎实现渐变的语法不同,这里我们只针对线性渐变的 W3C 标准语法来分析其用法,其余大家可以查阅相关资 ...
- biztalk重新发布
前提:在vs2013中,项目属性:重新部署设置为true,重新启动主机实例:设置为true,或者在最后重新部署完以后手动重启主机实例 下面是具体的步骤: 1. 项目修改完重新生成.. 2. 转到biz ...
- 解决qt程序的链接阶段出现 undefined reference 错误
错误的原因是我使用到了 QT Widgets 模块中的东西,但是makefile的链接的参数中没有 widgets.其实官网上提到了这个: http://doc.qt.io/qt-5/qtwidget ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数·简明中文手册 总览
<zw版·Halcon-delphi系列原创教程> Halcon分类函数·简明中文手册 总览 Halcon函数库非常庞大,光HALCONXLib_TLB.pas文件,源码就要7w多行,但核 ...
- python windows安装
一.下载并安装 下载地址http://www.python.org/download/ 安装 二.配置环境变量 配置python环境变量以便后面安装插件.D:\Program Files\Python ...
- SVN和Git的异同
其实Git和SVN还是挺像的,都有提交,合并等操作,看来这是源码管理工具的基本操作. 1. Git是分布式的,SVN是集中式的,好处是跟其他同事不会有太多的冲突,自己写的代码放在自己电脑上,一段时间后 ...
- vs extension
优先级高低
- android sdk manager 无法更新解决方法
因为在开始->运行->cmd 中敲入 ping dl-ssl.google.com -t 始终ping不通 ,关闭cmd后 首先需要下载一个代理服务器下载地址 http://pan.bai ...
- iOS禁用第三方键盘
- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)ext ...
- 互联网中级Javascript面试题
互联网中级Javascript面试题 1.实现一个函数clone,可以对JavaScript中的5种主要的数据类型(包括Number.String.Object.Array.Boolean)进行值复制 ...