自己寫一個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/