Submitted by gouki on 2008, December 22, 10:44 PM
能够用厚厚的PDF来解释jQuery的人不多,但确实是有一个。看到这篇文章也是一个意外,是从订阅的某个人的博客里找到的。他看到这篇文章也很意外,于是乎,我也就很意外的转载了一下。
原文地址:http://jljlpch.javaeye.com/blog/234218
作者:jljlpch
原文中的PDF下载地址:
我会做个镜象的。。。
原文如下:
jQuery是一个非常优秀的JS库,与Prototype,YUI,Mootools等众多的Js类库相比,它剑走偏锋,从web开发的实用角度 出发,抛除了其它Lib中一些中看但不实用的东西,为开发者提供了优美短小而精悍的类库。其使用简单,文档丰富,而且性能高效,能极大地提高web系统的 开发效率。因此可以说是web应用开发中最佳的Js辅助类库之一。大部分开发者正在抛弃Prototype,而选择Jquery做为他们进行web开发的 JS库。
如是开发人员仅仅只知道文档中的简单的使用方法,却不明白Jquery的运行原理和内部机制,在使用jquery时,肯定会碰到许多的问题。这些问 题有一部分是Jquery的Bug。大部分是自身的使用不当而造成的。而文档的简单的使用说明很难解决问题。在调试基于jQuery的web应用时,很多 时候都要跟踪进入jQuery对象分析其运行状态以了解出错的原因。
如果对于web的应用的页面运行性能和效率有所要求的话,那么我们更应该去明白其运行机理和核心源码。但是jQuery源码不像其它的类库那样,它 有点晦涩,难懂。这就是本源码分析的原因,让所有使用jQuery的读者,能快速上手jQuery的源码,并在开发中得心应用。
Jquery的网络资源丰富,但Baidu了很久,很难找到那种完全深入地分析Jquery源码的文稿。倒是Jquery的开发者,John Resi的《Pro Javascript Techniques》涉及到Jquery的源码的分析,但是其主指还是在于JavaScript的使用。那本书并不能使我们完全细致地了解Jquery 的源码。
写个这个源码分析的理由其实很简单,在工作中使用jquery经常出问题,不得不分析其源码,我把分析的源码放在blog。其标题是jquery core 源码分析。结果有一网友竟评论说打到标题党,可见还是有很多人像我这样想完全了解jquery的core代码。
从自己能看懂,到自己写出来。发现自己有一个质的提高。但是由于水平有限,分析过程的难免有错误。请大家多多指教。不过嘴下能留情就最好了。有什么问题可以到blog:jljlpch.javaeye.com去访问和评论。附件附有打包的源码。
分析源码,最难的地方不是你能理解,你能分析得出来。如果把所有的分析都写在源文件中,我想很多人看不了多少行就会中止的。很难有人有兴趣对得源码一行行地去分析。何把源码有机地组合起来,串成一条线是本教程的最为头疼的地方。
读书的最高境界是厚积薄发。分析源码也是一样。对于4,5千行的jquery源码,我们如何做到心中有数,知道什么功能在什么函数里内 呢? 什么函数用在什么地方呢?这样就得把所有的函数有机分类地重组起来,想着Jquery的主要目的和自己对于js方面的理解。我把整个Jquery薄发成三 个单词 query-->manipulate-->expand。
jquery一个很紧缩的lib,它的主要目的就是对dom元素进行操作。那么dom元素的从哪里?
到dom树中去找。这就是 query。$(),Jquery的构建就是一个query的过程。我们可以把这个query范围放大一点,它不光是从dom中查找的CSS selector,还有可能是从html的片断中去寻找的dom元素生成,更进一步就是直接的dom元素(集)。$()的构建就是从这里出发的。
query到元素集,这个query的过程还没有最终完成。因为这些结果集不一定满足我们的要求,那么就要筛选,要过滤。要进行数组方面的相关的操作。这就涉及到jquery对象的类数组的特征。我们就可以把这些类数组的相关的函数放在一起来分析。
当最终的需求的集合形成,我们要的完成我们真正要做的,对集合中的dom元素进行操作。
怎么操作?操作什么呢?不就是对dom元素的attribute,class, style,css,event等进行操作吗?
细化一下:
1、我们可以把attribute,class,style都看作是是属性的操作,还有expando的自定义的属性。这就涉及到jquery.data。
2、对dom元素的内容。什么是内容。innerHtml是。all childNodes也是,value也可以算。对于内容的操作就有追加,插入,前插,后插,内部前插和内部后插。那当然不能少了clone,remove这些操作。
3、 CSS是可以在dom元素中单独出来分成一块来做分析的。对于css的操作,不就是 height,width,innerHeight,innerWidth,out(height,widith)的操作,还有元素的位置 (position,offset),display or not。这就是对于CSS的操作。
4、Event也是元素的操作中的一部分。这一部分除了addEvent,fireEvent,removeEvent,和domready就没有别的啦。
5、Ajax是给元素从服务器中找内容填充的。真正用到最多不还是load吗,对于getScript,getJson之类全都是在jQuery.ajax的函数的基础而出来。
6、 Fx可以看做是CSS的操作。但是其又高于CSS。对于FX,最基本不就show,hide,slide(down,up),fade(in,out)这 几种用法。无论什么用法,都基于时间的长短映射到元素CSS的属性值的对对应比率的大小。采用setInterval间隔来运行就形成了动画。这就 animate()函数。所有效果的发源地。
想想整个jquery就是这么简单。当然如果没有去身体力行去自己分析,无论什么教程都是没有用的。
其实query-->manipulate是表层的东西。还有一个高层的就是expand。这涉及到一个lib的架构与设计。
这部分我们可以从源码的角度去解读对于js lib的架构。
除了扩展性(extend)之后,一个lib肯定是要花大力气去考虑它的性能。
考虑它的内存使用。
这是站在设计Jquery的角度去分析。
想了很久,但是这一部分还没有写入目前的源码分析中。
镜象PDF下载:
jquery1.2.6源码分析.rar
Tags: jquery, javaeye, 详解
Javascript | 评论:0
| 阅读:19148
Submitted by gouki on 2008, December 21, 9:04 PM
晚上小朋友在洗澡的时候,突然间,电没了。很紧张的冲出去一看,原来是我们家自己跳闸了。
想想也没有开什么:两个空调,一个小水泵,一台笔记本,一个暖风机,一台电脑,热水器,冰箱。也就突然跳掉了。。。
立马冲到物业,请他们过来检修一下,说是半个小时到,结果刚回到楼下,来检修的人已经到了。
到楼上才发现原来把闸刀推上就行了。但我最初以为是保险丝烧掉,也以为那个放电表的地方是不允许开的。呵呵
第一次,在上海感受到了没电的滋味,多少年了。。。。。
Tags: 停电, 跳闸
Misc | 评论:0
| 阅读:16425
Submitted by gouki on 2008, December 20, 10:47 PM
本来不想谈这个沉重的话题,其实说白了,如果你一个PHP的程序员连怎么配置环境都搞不定你还搞个P开发呀。得,咱不说你在linux下面搞定这些,难道你在windows下面你也搞不定?
现在的PHP二进制安装版本已经可以支持apache,iis5,iis6等一些WEB服务器了,为什么还是有一些人不会配置呢?真想不通呀。。。。。。
于是在这种大环境下,各种各样的AMP套件就层出不穷了。我也用过一些PHP套件,但我纯粹是为了偷懒,从最初到现在都是为了偷懒。
最早的使用就是appserv,版本更新很快。但我在用了某一个版本后就不会再更新了。谁会那么有空对开发用的服务器来经常更新?再后来就使用了apmxe(fleaphp的作者所写)用了之后就对其他的AMP套件没兴趣了。虽然我对QEE的太监很不满,但并不代表我对APMXE这款软件有什么BS之处,自从我用了这款软件后,我自己也对他的一些环境进行了配置,然后对该目录进行再打包,永远的让它存在于我的d:/usr/local目录下,主要还是因为这样的目录结构放到一些linux服务器上问题也不会太大。呵呵
在实际中,有很多朋友也在使用着phpnow,xampp等,开花石头自己也做了一款这样的套件,在他的官方网站:http://www.8y8u.com.cn/上有提示,easyDev.
今天,在cnbeta上,又看到一款e2php,还有一些论坛为了防止用户不会配置,也做了一些套件,比较有名的就是discuz了。
除此之外,s135的博客上,也有张宴自己做的一个套件,里面的东西也比较多。
一一列出网址,省得光说不练,被人骂
1、Appserv:http://www.appservnetwork.com/,记得网站的那个小头像特别有意思
2、Xampp:http://sourceforge.net/projects/xampp/
3、Apmxe:http://www.dualface.com/blog/?page_id=402,可惜里面现在带了fleaphp框架,不够纯净了
4、PHPNow:http://phpnow.org,好象很多人现在喜欢这个
5、e2PHP:http://www.cnbeta.com/articles/72902.htm,今天在CB上看到的
6、张宴版:http://www.s135.com/post/373.htm
7、石头版:http://www.8y8u.com.cn/
8、Discuz版:http://www.discuz.net/thread-223885-1-1.html
或许有遗漏,但以上这么多肯定够你用了吧。。。如果你认为还不够那我也没有什么办法了。当然我自己配置的目录,现在是php4,php5,mysql4,mysql5都全的,不过也不能同时启动的。无所谓了。想测试哪个的时候就运行一下快捷方式,俺都定义好的,哈哈哈哈
Tags: wamp, phpnow, easyphp, apmxe, appserv
Linux | 评论:2
| 阅读:33057
Submitted by gouki on 2008, December 20, 10:10 PM
极品时刻表是国内推的最早的一款列表时刻表的软件,而且更新极快,单文件。以前出远门全是靠它来计算我何时该到车站,该订哪列车。
最近他又有更新,再加上又快到春节了,估计下载量又会超标吧
更新内容如下:
* 升级为2008年12月21日全国列车最新运行图
* 更新部分数据
好象是说极品与铁道部有接触,否则,哪来这么快就能更新?不过网友也有特别的回复,当然不是说极品的,是说铁路:每次提速,在小站停的车就减少一些,经过n次提速和调整,我回家终于没有车坐了.
官方网址:http://www.jpskb.com
Tags: 时刻表, 列车, 极品时刻表
Software | 评论:0
| 阅读:17379
Submitted by gouki on 2008, December 20, 10:06 PM
MySQL 5.0从5.0.27以后,单数版本为社区版。双数版本号为企业版。如果您还不想从5.0升级到5.1的话,可以继续使用5.0的这个版本。主要还是以安全更新和bug fix居多。
官方change-log网址:http://dev.mysql.com/doc/refman/5.0/en/releasenotes-cs-5-0-75.html
简要说明:
Functionality added or changed:
-
Security Enhancement: To enable stricter control over the location from which user-defined functions can be loaded, the plugin_dir
system variable has been backported from MySQL 5.1. If the value is non-empty, user-defined function object files can be loaded only from the directory named by this variable. If the value is empty, the behavior that is used prior to the inclusion of plugin_dir
applies: The UDF object files must be located in a directory that is searched by your system's dynamic linker. (Bug#37428)
-
Previously, index hints did not work for FULLTEXT
searches. Now they work as follows:
For natural language mode searches, index hints are silently ignored. For example, IGNORE INDEX(i)
is ignored with no warning and the index is still used.
For boolean mode searches, index hints are honored. (Bug#38842)
Tags: mysql, database, community
DataBase | 评论:0
| 阅读:20619