76 bytes for faster jQuery
转载自http://james.padolsey.com/javascript/76-bytes-for-faster-jquery/
作者JAMES PADOLSEY
在我们平时使用JQuery,调用了一个回调函数,我们会根据迭代中this对象的不同来确定上下文,然后在用$(this)构建$对象来使用jQuery对象里的方法。像这样
html
<a><span>link1</span></a>
<a><div>link2</div></a>
js
$("a").click(function(){
console.log($(this).text());
})
每次迭代,都创建一个新的对象,这些jQuery对象似乎是很多余的,尤其是当迭代次数很多的时候。
下面来看一个优化的写法,共用一个jQuery对象。
// 只创建一个jQuery对象
var $obj = $([1]); $("a").click(function(){ // 给出需要操作的this
$obj[0] = this; // 共用先前的jQuery对象中的方法
console.log( $obj.text());
})
这是一种flyweight的概念,共享数据,无论我们有多少次迭代,我们都只创建了一个jQuery对象并使用其.text()。
现在这只是概念,为了更好的运用到实际当中,JAMES PADOLSEY给出了良好的函数
jQuery.single = (function(o){ var collection = jQuery([1]); // Fill with 1 item, to make sure length === 1 return function(element) { // Give collection the element:
collection[0] = element; // Return the collection:
return collection; }; }());
使用
jQuery('a').click(function(){ console.log($.single(this).text()); });
常常的,在一些编码当中,我们不需要创建jQ对象,但我们要使用jQuery.fn里的函数,且要可以链式使用。这时我就可以使用JAMES PADOLSEY的$.single了。
76 bytes for faster jQuery的更多相关文章
- sqoop错误集锦2
1.使用sqoop技术将mysql的数据导入到Hive出现的错误如下所示: 第一次使用命令如下所示: 1 [hadoop@slaver1 sqoop-1.4.5-cdh5.3.6]$ bin/sqoo ...
- net core分块上传文件
net core分块上传文件 写完asp.net多文件上传(http://www.cnblogs.com/bestckk/p/5987383.html)后,感觉这种上传还是有很多缺陷,于是...( ...
- 使用weave管理docker网络
weave简介 Weave creates a virtual network that connects Docker containers deployed across multiple hos ...
- TTL 生存时间介绍 (转)
TTL: (Time To Live)生存时间,是IP协议包中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃.有很多原因使包在一定时间内不能被传递到目的地.例如,不正确的路由表可能导致包 ...
- rsync.conf详解
1.在服务端编辑配置文件 [root@game_intf ~]# more /etc/rsyncd.conf port=8730 log file=/var/log/rsync.log pid fil ...
- bbed的使用--查看数据文件信息 & sid信息
1.得到文件的块大小和数据块个数 在Linux和Unix上,oracle提供了一个小工具dbfsize用于查看文件块大小 (可以参看[ID:360032.1]How to detect and fix ...
- FW:使用weave管理docker网络
Posted on 2014-11-12 22:20 feisky 阅读(1761) 评论(0) 编辑 收藏 weave简介 Weave creates a virtual network that ...
- Rsync详解
Rsync详解 1.什么是RsyncRsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的“Rsync算法”来使本 ...
- Docker-网络基础配置
从外部访问容器 指定容器端口随机映射主机端口 [root@wls12c /]$ docker run -p -d --name web tomcat /bin/bash -c /root/apache ...
随机推荐
- kaggle之人脸特征识别
Facial_Keypoints_Detection github code facial-keypoints-detection, 这是一个人脸识别任务,任务是识别人脸图片中的眼睛.鼻子.嘴的位置. ...
- HTTP协议5之代理--转
代理服务器 Web代理(proxy)服务器是网络的中间实体. 代理位于Web客户端和Web服务器之间,扮演“中间人”的角色. HTTP的代理服务器即是Web服务器又是Web客户端. Fiddler就是 ...
- html5 拖放---(二)转
draggable是一个枚举属性,用于指定一个标签是否可以被拖拽.有以下四种取值: true 表示此元素可拖拽 false 表示此元素不可拖拽 auto 除img和带href的标签a标签表示可拖拽外, ...
- studio中集成.so文件的两种方式
.so文件作为NDK的开发包,如果不进行依赖使用将会报错所以,需要.so的一定要配置 注:如果没有引用so文件,可能会在程序执行的时候加载类库失败,有类似如下的DEBUG提示: java.lan ...
- 并行开发学习随笔1——plinq并行
这两天在看园友的文章 <8天玩转并行开发——第三天 plinq的使用> 对里面的第一个实例亲手实践了一下,发现了一点有意思的事情. 测试环境:.net 4.5 64位(如果是32位的,测试 ...
- vs2010中出现:程序管理器匹配不正确错误
http://bbs.csdn.net/topics/360074795 这是一篇csdn上的讨论帖,第15楼给出了正解
- mysql存储过程实践总结
一:参数类型 1.IN 只能读取参数并在函数内部更改有效,不能持久化到外部变量 2.OUT 不能读取参数,可以在函数内部修改并保存到外部变量 3.INOUT 既能读取又能持久化 二:基本格式 mys ...
- win 下python2.7 pymssql连接ms sqlserver 2000
python DB-API 连接mysql 要用到库pymssql 下载请到https://pypi.python.org/pypi/pymssql/2.0.1我这里下载的是ms windows in ...
- python socket 编程之二:tcp三次握手
建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:第二次握手:服务器收到syn包,必须确认客户的SYN(ack ...
- LeetCode_Jump Game II
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...