jQuery源码分析----数据缓存系统

本文介绍了在使用jQuery时如何利用其内置的数据缓存系统来高效地管理DOM节点上的自定义数据,避免了直接操作DOM带来的性能问题,并探讨了$.data与$(ele).data()两种方法的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为DOM节点添加太多的自定义属性的危害:

  1. 循环引用时的内存泄漏
  2. 直接暴露数据不安全
  3. 多自定义属性对浏览器来说无意义
  4. 取数据的时候要对HTML节点进行操作

jQuery缓存系统解决了这个问题。(从事件系统分化出来的)

静态方法: $.data(ele)
实例方法:$(ele).data()

$(ele).data()是对$.data(ele)的扩展,

$.data(ele)可为DOM元素或者js对象添加数据

$(ele).data()是为DOM节点添加数据,会覆盖key相同的值,

jQuery缓存系统核心

数据放在内存中,通过映射关系与绑定的DOM关联。

1.实例方法:
$(ele).data()

数据存储在jQuery.cache中,为DOM元素分配属性expando,值唯一,和缓存对象 jQuery.cache关联起来,则cache[id]就会读到所有的这个节点的缓存,

cache结构如下:

var cache={
    "id1":{
        'name1':'value1',
        'name2':'value2',
    },
    "id2":{
        'name1':'value1',
        'name2':'value2',
    },
}

每个id对应一组缓存数据。所以属性名相同时会覆盖

2.静态方法:
jQuery.data(ele,[key],[value]);

每个ele都有自己的{key,value}对象,新建的对象即使key相同也不会覆盖

var body1 = $("body")
var body2 = $("body")

$.data(body1, "bar", '一');
$.data(body2, "bar", '二');

show(  $.data(body1, "bar") )
show(  $.data(body2, "bar") )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值