jquery的事件系统和缓存系统&& seajs

1, jquery的事件系统和缓存系统

事件的起因, 不能解除匿名函数

绑定:

给dom元素打上一个以版本随机号的标识, 比如1, 然后在 $.cache 上建立1的缓存对象, 如 $.cache.1.events, data; 从而引入缓存系统, 好处是只是在dom上标识下, 数据全在 $.cache 上, 而删除的时候会根据标识来删除cache,

会生成 cache[id] = {

handle: 统一一个句柄,

events: 事件集,

data: 数据

}

事件空间,触发

由于有缓存对象的存在, jquery可使用 trigger触发事件, 过程是通过type找到 cache上的event对象, 然后执行看是否返回false, 如果不是则触发下元素的type事件, 这里有趣的是, 往往在实际过程中开发人员需要只触发句柄, 而不触发元素的行为, 那么 triggerHandler 就诞生了, 但要注意的是他只触发第0个元素, 且不会返回jquery对象

事件委托

冒泡和捕获, 普通的委托实现方式, jquery委托的实现方式, cache[id].events[type][0].selector = ‘‘;

事件属性

event兼容, 阻止冒泡, 阻止默认事件, 事件源(target || srcElement)

注意的问题

如果要移除一个元素, 不用先删除他的子元素任何(数据), jquery会递归的删除所有子元素的数据和事件

如果要大量操作dom, 可以先把元素 detach, 或者 remove, 操作完后再appendTo到页面, 这样可以提高效率, 因为频繁的操作dom树不可取, detach移除元素但不删除数据,事件, remove会删除一切数据,事件, 他们俩个都不会删除子

如果要清空数据使用empty, 会删除子+子的数据+事件

使用html方法时要谨慎, 如果已知非常正确的 HTML代码的时候, 可使用innerHTML来设置, 因为 html方法要各种正则, 各种判断, 最终再使用innerHTML设置

不要给dom上添加过大的数据, 使用 data 方法替换, 要不然会有内存泄漏

live,on,bind,delegate的区别

$("#ele").live("click", fn) ==> $(document).on("#ele", "click", fn) ==> $(document).on("click", "#ele", fn)

2, seajs

define(回调);

define(id, 回调);

define(id, 依赖, 回调);

在使用define后则给seajs缓存上添加一个对象, 有uri, id, 回调, 然后判断是否有依赖参数, 如果没有把回调方法toString一下, 并用正则查找require字抽取依赖, 然后生出如: {

uri: ‘‘,

id: ‘‘,

回调: ‘‘,

依赖: [],

状态: 0

}

在use使用的时候, 先解析路径, 并load这个文件, 然后执行这个文件的define, 并递归的加载依赖, 直到所有的依赖加载完成并执行回调且把返回值写入到这个模块的缓存里, 然后会对加载完成的依赖打上标识, 都加载完后执行use的回调

每次use的时候会先判断 seajs.cache 里是否有这个uri文件, 如果有, 则直接执行模块的缓存.

需要注意的:

由于打包问题, 建议不使用alias,paths,var等变量(目前我使用grunt打包未通过)

一定要明确seajs的base根目录是哪, 这个很重要, 也会有利于调试

在模块里引用别的模块时候路径都使用相对路径

路径规则

use("xl");//基于base引用, use时可用, require时不可用, 因为在seajs是通过的, 但grunt打包时不通过, 因为路径指针有问题

use("./xl");//基于当前目录引用

use("../xl");//返回上目录

use("/xl");//基于当前网址的根目录引用,不建议

模块的依赖在内部就要处理好, 外部调用的时候为直接使用, 包括css, 对外暴露常用接口: 显示,隐藏,初始化,销毁,重置等

时间: 2025-01-06 02:54:26

jquery的事件系统和缓存系统&& seajs的相关文章

jquery源码之缓存系统--$.data

jQuery内置了一个缓存系统,它做的事情可就多了,动画模块,事件模块等非常有用的模块都是依赖它实现的. 其实说到底,就是在jQuery的命名空间下开辟了一个cache的对象. 将数据以一定得规则存放的cache对象中. 首先我们来看看内部实现: jQuery.extend({ cache: {}, deletedIds: [], // Remove at next major release (1.9/2.0) uuid: 0, // Unique for each copy of jQuer

jQuery源码解读 - 数据缓存系统:jQuery.data

jQuery在1.2后引入jQuery.data(数据缓存系统),主要的作用是让一组自定义的数据可以DOM元素相关联——浅显的说:就是让一个对象和一组数据一对一的关联. 一组和Element相关的数据如何关联着这个Element一直是web前端的大姨妈,而最初的jQuery事件系统照搬Dean Edwards的addEvent.js:将回调挂载在EventTarget上,这样下来,循环引用是不可忽视的问题.而在web前端中,数据和DOM的关系太过基情和紧张,于是jQuery在1.2中,正式缔造了

jQuery源代码解析(1)—— jq基础、data缓存系统

闲话 jquery 的源代码已经到了1.12.0版本号.据官网说1版本号和2版本号若无意外将不再更新,3版本号将做一个架构上大的调整.但预计能兼容IE6-8的.或许这已经是最后的样子了. 我学习jq的时间非常短,应该在1月.那时的版本号还是1.11.3,通过看妙味课堂的公开课视频和文档里的全部api的注解学习. 源代码则是近期些日子直接生啃.跳过了sizzle和文档处理的部分(待业狗压力大.工作以后再看).关注data.ready.event.queue.Defferred(jq的promise

jQuery.data的是jQuery的数据缓存系统

jQuery.Data源码 jQuery.data的是jQuery的数据缓存系统.它的主要作用就是为普通对象或者DOM元素添加数据. 1 内部存储原理 这个原理很简单,原本要添加在DOM元素本身的数据,现在被集中的存储在cache集合中.它们之间靠一个从1开始的数字键来联系着.这样DOM元素就不会像以前那么笨重了,更不会出现以前那种循环引用而引起的内存泄漏.现在DOM只需要保存好这个数字键值即可.这个属性值被保存在DOM元素的一个属性里,该属性名是由jQuery.expando生成的. 2 Da

第十七课:数据缓存系统

这一章主要讲的是jQuery的缓存系统的历史发展,以及他自己的框架的缓存系统的实现.都是源码解析. 我就挑几个重点讲下: (1)jQuery的缓存机制的原理 jQuery的缓存机制实现的原理是在元素中添加自定义属性,然后把这个自定义属性赋值为uid,而这个uid就在jQuery的cache对象中的一个属性(唯一的),这个唯一的属性其实是一个对象,这个对象里面存储的就是你给这个元素添加的数据. 举个例子: <input id="chaojidan" name="chaoj

Apache Ignite——新一代数据库缓存系统

Apache Ignite是一个通用的数据库缓存系统,它不仅支持所有的底层数据库系统,比如RDBMS.NoSQL和HDFS,还支持Write-Through和Read-Through.Write-Behind Caching等可选功能. Apache Ignite是一个聚焦分布式内存计算的开源项目,它在内存中储存数据,并分布在多个节点上以提供快速数据访问.此外,可选地将数据同步到缓存层同样是一大优势.最后,可以支持任何底层数据库存储同样让 Ignite成为数据库缓存的首先.

写出一个缓存系统的伪代码001

/** * 写出一个缓存系统的伪代码 * @author ysloong * */ public class CacheDemo { private Map<String, Object> map = new HashMap<String, Object>(); public static void main(String[] args) { // TODO Auto-generated method stub } public synchronized Object getDat

高性能的分布式内存对象缓存系统Memcached

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. 外文名 memcached 所    属 缓存系统 编写语言 不限 通信手段 memcached协议 目录 1功能 2特征 ? 协议 ? 事件处

django cache 缓存系统

django 缓存系统 https://docs.djangoproject.com/en/dev/topics/cache/#the-low-level-cache-api http://www.ziqiangxuetang.com/django/django-cache.html 可以缓存能被pickle的对象 安装 pip install hiredis django-redis-cache setting中配置 #KEY_PREFIX  设置缓存键值的前缀 CACHES = { 'mys