从jQuery中剥离出$.ajax函数

2010年12月10日 20:41

作为开源社区的PHP框架的内置Ajax模块,我们需要一个功能超强大的Ajax函数,作为一个通用函数。Ajax模块是我负责的,这种函数如果真要我写,恐怕以我的能力是很难做到完美的,毕竟Ajax涉及的知识点非常散,还有大量HTTP协议的知识,我并不全懂,还有各种浏览器兼容问题的存在,防不胜防。就算花一个月去做,恐怕也只能做出个可能存在大量隐蔽BUG的作品。于是,我决定直接从开源产品中找,也就是jQuery的$.ajax函数。

我是个信奉极简约的人,不喜欢为了一个$.ajax就把整个jQuery文件全部包含进来,太大了,70多KB的文件,换成56K/bps的猫,全速也至少10秒(一般我不考虑什么gzip压缩,因为不想把它作为偷懒的理由,虽然号称压缩后只有24K),我不能接受这种速度,所以我就决定从中提取,把jQuery中的$.ajax和一些附属的函数剥离出来,单独形成一个ajax函数。

花了半天时间,非常顺利,jQuery源码并不难懂,至少一定比Linux Kernel源码好懂。不过首个版本没有提取所有功能。比方说Cache功能还没有,因为不了解Ajax的Cache究竟是个什么机制,全局Ajax事件没有,因为感觉意义不大,如果要,就必须剥离$.trigger,这个函数不是很小,剥离就可能导致最终文件变大,有点得不偿失。

可能存在Bug,请注意,当需要解析JSON时,本类中没有自带JSON解析函数,请务必提供JSON.parse()函数用于解码。

继续阅读

Yum库配置简单方法

2010年12月04日 07:20

好久没写博客了,正如我之前所说,在考试。大学考试就是一堆理论考来考去,我不是一个善于高谈阔论的人,也不是一个擅长考试的人,考的很糟糕,可以说,学习越深入,我就越不擅长考试了。

最近用上了企鹅输入法fcitx 4.0,很棒的输入法,我自从使用Linux以来还没见过这么漂亮的Linux软件呢,只是他的词库不敢恭维,偶尔还会崩溃,但总比ibus强多了。
 
发现Linux上的Office最好的还是OpenOffice 3.2.1版本,虽然比起自带的OpenOffice 3.2只有0.0.1的提升,但是质量真的好很多,不太会死掉了,美观性也大幅增加。LibreOffice项目我当然是支持的,期待的,只是目前还在beta版本,稳定性和OpenOffice 3.2几乎没有差别,所以还没用。
 
Ubuntu Tweak是个很实用的Gnome配置软件,最近才发现。
 
Ubuntu的Gnome-panel版本太低,稳定性很糟糕,一直想升级,可惜不会。Gnome-panel几乎是Gnome桌面的操作系统中最不稳定的组件之一了,无论是在Ubuntu上,还是在Fedora上,都不稳定,GUI,作为一个系统的门面,这样不稳定真的很不好。
 
我们学校搞开源社区了,很高兴,开源的意义我从今年才开始深入认识,这么快也可以为之作贡献了。我们的首要任务是做个我们社区的门户网站,用PHP,在做这个网站之前,我们先做一个PHP框架,这个框架相当于社区的第一个产品,根据Deltamaster的分配,我的任务是Ajax模块,缓存模块和代码优化。
 
我年初帮助Deltamaster做过项目,但结果是以惨败告终的,非但没有做出贡献,反而还在添乱。事后我反思了很久,主要是急功冒进,对任务的认识不够深刻,对语言的思想掌握不够。后者现在已经没什么问题了,前者还在学习。一个程序员,操之过急地编码根本没有意义,画出几张UML图,统筹兼顾,和上面进一步明确任务和接口比这重要的多。
 
RHCE考试推迟到明年一月了,很好,这样时间充裕多了。
 
还有很多话想说,但是不能说了,本文的主题不得不开始了。
 
Yum库的配置网上很多,但在我看来,基本没说清楚,这就是撰文的目的。
 
配置Yum很简单,第一步,用户必须告诉Yum这个库的存在,因此必须在/etc/yum.repos.d中要么创建一个后缀名为repo的文件,要么在已有的repo文件上增加新Yum库的地址,具体写法完全可参考系统自带的文件的写法,以下是我实验库的文件内容:
 
[testyum]                                                   #yum库名字,必须唯一
name=Fedora Test Yum                           #yum库全名,不多解释
baseurl=file:///home/bachue/Downloads   #必须是一个文件夹的地址,可以是FTP,HTTP,当然也可以象我一样为本机地址
enabled=1                                                 #是否启用该库,为1为启用
metadata_expire=7d                                 #源数据过期时间,不多解释
gpgcheck=0                                              #是否检验gpg的key,我是实验库,不需要检验。

更多语法还是请参考已有的repo文件。

完事后,作为用户其实就没啥事了。而Yum库本身还是需要一定的配置,否则不能正常工作。

为什么要配置呢?不配置Yum怎么知道他的库里有哪些包呢?包的详细信息呢?怎么做分组呢?怎么知道包与包之间的依赖关系呢?正是因为不知道,所以要有个配置文件,其实准确的说是源文件,来告诉别人这个Yum库的若干国情。

Yum库的软件,作为实验我挑选了google-chrome-stable和linuxqq的rpm包,这两个软件都是闭源的,所以一定不会出现在官方的Yum库里。

Yum的配置文件有五个,必须放在Yum库的repodata文件夹下,其中有四个(他们是filelists.xml.gz  other.xml.gz  primary.xml.gz  repomd.xml)可以由一句命令createrepo(可能需要安装同名rpm包)自动生成,但最后一个文件比较难对付,第一,他不可能手写,打开就知道,多国语言,想必不可能有人懂这么多语言。第二,可以有命令来生成,和生成前四个文件的命令还是同一个,但他有个古怪的要求,必须有一个其他库的这个文件作为模板,才可以生成,说真的,玩这么多年电脑从没见过这种要求,如果你的电脑上或光盘里已经有Yum库(DVD版本的安装光盘几乎都有),并且有名字中带comps的那个xml配置文件(可能已经被gzip压缩),就可以用他,如果没有,用find命令全系统搜索,关键字是*comps*xml*,我的fedora就有这样一个文件。如果这样都没有找到,那么只能从其他电脑上找了,网上我Google过,没有发现人家把这个文件挂上来。

假设已经找到(不会找不到吧,DVD里真有),生成配置文件的整个命令如下:createrepo -g [该模板文件地址,注意后缀名是xml] [Yum库地址],在我的电脑上,这条命令是这样的,createrepo -g /var/cache/yum/i386/14/fedora/2d112e279cf18476b72e5b30f60c1aa55e0297e7a05f4d9891879ee83d298e11-comps-f14.xml /home/bachue/Downloads/。这条命令将自动在库文件下创建repodata文件夹,并创建好五个配置文件。这样,配置就算完成了。

如果要去试试这个库能否正常工作,一定不要忘了,Yum是有缓存的,如果不久前刚刚扫描过这个Yum库,就不会再去扫描一遍,但你其实已经改过他的配置,或是有新软件入库了,而Yum却不知道,以至于你的操作看上去就像没有生效,这样可能会让你以为Yum没有正常工作。我就出过这样的糗事。清除缓存的命令是yum clean all,一定不要忘了。

讲解完毕,是否很简单呢?

在没学RHCE以前,感觉deb包很强,毕竟不容易出现依赖性问题,学了RHCE,感觉rpm才是真的好,功能实在太强大了。