自己写一个Javascript框架,是大四下学期才决定做的事情。随着Ajax的兴起,网站对Javascript的需求越来越大,而Javascript本身有不少缺陷和不足,需要通过框架去完善。而当时也已经有不少这类框架,比如prototype、jQuery、YUI等。虽然直接用这些现成的框架是很省力的,但我并没有这么做,原因在于:其一,需要学习这些框架的用法;其二,一旦出问题,要找到原因是很难的,毕竟我不是这些框架的作者;其三,自己重新写一个框架,能学到的东西更多,且成本不高。
那时候我对Javascript还是一知半解,需要找一些代码参照。我很庆幸有朋友给我介绍了myJsFrame,它麻雀虽小,五脏俱全。jRaiser最原始的版本就是仿myJsFrame编写的,还加入了一些prototype的内置类扩展,如著名的 function.prototype.bind 。
后来,我看了《精通Javascript》一书,作者是jQuery之父John Resig,他在书中提到了由另一位大师级人物Dean Edwards写的Css Query。这个框架提供了一个支持CSS1-3的选择器引擎。我深入研究这个引擎,并参照它的实现原理改造自己写的引擎。Css Query用到了很多正则表达式,我对正则表达式的深入也由此开始。
jQuery越来越受欢迎,我也开始借鉴这个框架的代码。对我最有帮助的就是它的选择器引擎Sizzle。我决定对自己写的选择器引擎进行了第三次改造,使它能够支持CSS3,并给它起了个名字为SelDOM(use Selector to get DOM element)。 虽然我深信自己写的代码效率不低,但在参考了Sizzle的一些做法(如去重复元素、遍历子元素)之后,SelDOM的效率得到极大提升。jQuery还 有很多值得借鉴的地方,比如在添加事件的时候,无论在什么浏览器下,它就能把this指向元素,而我写的代码只是针对不同浏览器分别调用 attachEvent和addEventListener。
在参照了jQuery的代码进行改造以后,这个框架已经比较完善。我给它取名为Jess,是Javascript Essential Toolkit的简写。后来,我发现已经有一个比较有名的Java项目也叫Jess,所以又改了另一个名字#FormatStrongID_1#。这是一个有Gundam特色的名字,Gundam 00与外部组件0 Raiser合体后,性能提升数倍。在这里也希望jRaiser能使Javascript的开发效率提升数倍。
最后附上在Google Code的项目地址:http://code.google.com/p/jraiser/