公開我的開源項(xiàng)目newland.js
newland.js是一個(gè)node.js MVC框架,這個(gè)MVC架構(gòu)只是針對(duì)它的后端部分而已。當(dāng)然有人立即會(huì)提出懷疑,世界已經(jīng)有這么MVC框架,你的亮點(diǎn)在哪?。炕卮鹜ǔS袃煞N:重復(fù)造輪子的意義,與新框架的特性。
是的,重造輪子,世界無時(shí)無刻地造輪子,造輪子的人為了編造了許許多“藉口”,我覺得最美妙的藉口是最近多《GTF: Great Teacher Friedman 》讀的東西,我覺得光是他說的那一點(diǎn)就能讓許多人閉嘴了——
當(dāng)然,重新發(fā)明東西并不會(huì)給我?guī)碚撐陌l(fā)表,但是它卻給我?guī)砹烁匾臇|西,這就是獨(dú)立的思考能力。一旦一個(gè)東西被你“想”出來,而不是從別人那里 “學(xué)”過來,那么你就知道這個(gè)想法是如何產(chǎn)生的。這比起直接學(xué)會(huì)這個(gè)想法要有用很多,因?yàn)槟阒肋@里面所有的細(xì)節(jié)和犯過的錯(cuò)誤。而最重要的,其實(shí)是由此得 到的直覺。如果直接去看別人的書或者論文,你就很難得到這種直覺,因?yàn)橐话闳藢懻撐亩紩?huì)把直覺埋藏在一堆符號(hào)公式之下,讓你看不到背后的真實(shí)想法。如果得到了直覺,下一次遇到類似的問題,你就有可能很快的利用已有的直覺來解決新的問題。
而這一切都已經(jīng)發(fā)生在我身上。比如,在聽說 ANF 之后,我沒有看 Amr Sabry 的論文,只把原來的 CPSer 程序改了一點(diǎn)點(diǎn),就得到了 ANF 變換,整個(gè)過程只花了十幾分鐘。而在 R. Kent Dybvig 的編譯器課程上,我利用 CPS 變換里面的直覺,改造和合并了 Dybvig 提供的編譯器框架的好幾個(gè) pass,使得它們變得比原來短小好幾倍,而且生成很不錯(cuò)的代碼。
現(xiàn)在我仍然是這樣,喜歡故意重新發(fā)明一些東西,探索不止一個(gè)領(lǐng)域。這讓我獲得了直覺,不再受別人思想的限制,節(jié)省了看論文的時(shí)間,而且多了一些樂趣。一個(gè)問題,當(dāng)我相信自己能想得出來,一般都能解決。雖然我經(jīng)常不把我埋頭做出來的東西放在心上,把它們叫做“重新發(fā)明”(reinvention),但是出乎意料的是,最近我發(fā)現(xiàn)這里面其實(shí)很是隱藏了一些真正的發(fā)明。我準(zhǔn)備慢慢把其中一些想法發(fā)掘整理出來,發(fā)表成論文,或者做成產(chǎn)品。
我想我是違反“發(fā)明公會(huì)”的行規(guī)了,把這天大的秘密泄漏給大家,讓本來許多甘愿當(dāng)一輩子碼農(nóng)的人奮身而已賭一把,朝食物鏈的頂層爬去了!
有關(guān)食物鏈的論斷,是昨晚我在群里一個(gè)有三年經(jīng)驗(yàn)的SOHO談話時(shí)想到。他說,wordpress已占全球網(wǎng)站10%,許多人都靠wordpress的二次開發(fā)過活。有的人能月賺5000$,當(dāng)然這是有穩(wěn)定客戶的情況下,印度阿三是強(qiáng)大的競爭對(duì)手。想一想wordpress的團(tuán)隊(duì)才多少人???二十來個(gè),作為食物鏈的頂端他們肯定比國內(nèi)的什么wordpress jam活得好!靠服務(wù)支持與流量帶來的廣告收入,世界范圍的榮譽(yù),被人需要的滿足感……這是世上少有幾種圓滿生活方式了!再想rails團(tuán)隊(duì),jQuery團(tuán)隊(duì),spring團(tuán)隊(duì), hibernate 團(tuán)隊(duì)……老外這么熱衷搞開源,理由不一清二楚嗎?!
再回歸框架的本身,這是一個(gè)node.js框架。近年來,HTML5與chrome V8的優(yōu)異表現(xiàn),讓javascript繼ajax之后再次走進(jìn)舞臺(tái)的中心。node.js只是后隨的一個(gè)大浪罷了。但這大浪由于ruby界,C++界等大牛的加入,變成海嘯了??匆幌耮ithub中各語言的活躍情況吧:
由于早些年javascript沒有賦以處理二進(jìn)制的能力,帶來的致命影響是數(shù)據(jù)持久化與數(shù)據(jù)庫的連接干不了,導(dǎo)致javascript淪為玩具語言。要知道一個(gè)網(wǎng)站最重要的是用戶數(shù)據(jù),不能保存用戶數(shù)據(jù)就會(huì)被邊緣化。其次像讀取模板文件的內(nèi)容,合并多個(gè)文件,寫入日志等活兒對(duì)網(wǎng)站來說也是至關(guān)重要的!PHP的興起,是因?yàn)樗屵@些工作變得更輕松更簡單。node.js提供了對(duì)二進(jìn)制的支持,正是javascript第二次爆發(fā)的原因。node.js模塊迅速增長讓專業(yè)的人做專業(yè)的事,
長久以來,前端與后端的地位就像中國的官僚系統(tǒng)一樣可笑,外行指揮內(nèi)行。從JAVA的struts時(shí)代開始,視圖層的交互都是層層封裝在標(biāo)簽庫內(nèi),讓人無需寫javascript就能實(shí)現(xiàn)各種效果。然后,不是每個(gè)人都像google的員工聰明能干,那些WEB框架也不都像GWT那樣出色絕倫!于是有PHP的紀(jì)元。PHP有什么優(yōu)勢(shì)?《XXX,21天從入門到精通》!我想這樣的書名真的只能適用于PHP!入門簡單,而且存在大量這樣的培訓(xùn)中心,而且PHPer的招聘條件肯定把HTML,XML,CSS,JS等羅列進(jìn)去!因此PHPer真是最廉價(jià)與實(shí)惠的工種。切圖仔只能干一樣,而且熟練工流動(dòng)快!JSer基本是騙人的,都是jQueryer,調(diào)BUG能力為零,寫出的代碼維護(hù)性也為零……因此找靠譜的切圖與JSer,基本上與PM一樣難,當(dāng)然,PM的良品率更低。但說這些有什么用呢?讓專業(yè)的人做專業(yè)的事!PHP能打敗JAVA在WEB的地位,是因?yàn)樗訉I(yè)。rails讓PHP為之戰(zhàn)戰(zhàn)兢兢,是因?yàn)閞ails更專業(yè),它起碼有個(gè)叫Prototype.js的子項(xiàng)目啊,Prototype.js建立了javascript的第一個(gè)王朝,直到j(luò)Query在四年前打敗了它。PHPer的人口眾多,天才也眾多,抄啊抄啊,抄了rails的數(shù)據(jù)庫遷移,智能手腳架,COC,再武裝上jQuery,終于把rubyer的起義軍鎮(zhèn)住了!但node.js的起義軍怎么鎮(zhèn)壓呢?PHPer很少跑去rails陣營,但node.js的陣營每天都有人“叛逃”過去!rails團(tuán)隊(duì)成員兼jquery團(tuán)隊(duì)成員的 Yehuda Katz 搞了Ember.js,他的理念是構(gòu)建“超級(jí)Web應(yīng)用”所需的一切,因此向node.js進(jìn)軍勢(shì)在必行,雅虎在用nodejs構(gòu)建它的雞尾酒,jQuery是基于node.js進(jìn)行構(gòu)建測試壓縮打包,大名鼎鼎的EXT團(tuán)隊(duì)擁有node.js最出名的WEB框架express.js,mongodb的接口是javascript式,提供node.js的連接庫……node.js是時(shí)代的驕子,從來沒有這么多人為一種語言搖旗吶喊,即使它的真相曾是被人罵得最多的語言,但我們知道,最該罵的是javascript之父,只花十天時(shí)間來構(gòu)思它,還有導(dǎo)致第一次瀏覽器大戰(zhàn)的網(wǎng)景與微軟,讓JS長期滯后不前,兼容性問題成為當(dāng)時(shí)程序員的噩夢(mèng)!
但美好的事物終會(huì)回歸,就像大陸與臺(tái)灣。大陸是PHP,臺(tái)灣為nodejs。讓專業(yè)的人做專業(yè)的事,這是市場的需求,生產(chǎn)力的呼喚!基于node.js的web框架必然比PHP框架更把了解HTML,CSS與JS。前端的人才儲(chǔ)備必然流向node.js。requirejs讓JS開始走向工業(yè)化的模塊化開發(fā),國內(nèi)的seajs也在做相同的事情,模塊化是構(gòu)建大應(yīng)用的關(guān)鍵,標(biāo)識(shí)著JSer完成有能力開發(fā)像struct這樣巨弩級(jí)的web框架!前端模板的興起,nodejs各種數(shù)據(jù)庫連接庫,session模擬的實(shí)現(xiàn),再加之knockout這樣的MVVM模式被認(rèn)同普及,web框架的難題一一被打破。而我的新框架newland.js只是時(shí)代洪流的一員。
誠然,newland.js現(xiàn)在是非常非常弱小的,正如我在它的readme中寫的一樣,它只是我到達(dá)后端大陸時(shí)被撞碎的海盜船的殘?。『蠖说氖澜缡侨绱藦V闊古老神秘,以致于前端的世界好像一個(gè)伊比利亞半島。但后端的世界絕對(duì)不是美洲新大陸,更精確的比喻是百年后,人類冒冒失失跑進(jìn)擁有神級(jí)技術(shù)的外星人的領(lǐng)地。后端的世界沉睡著像JAVA三大框架的古老帝國,活躍數(shù)千PHP的新興國家與rails這樣的圣劍騎士團(tuán)!海岸上還遍布著其他登陸者,他們建立起geddyjs, railsjs, towerjs, meteorjs,expressjs等居民點(diǎn)!這就是WEB世界的現(xiàn)狀!PHP國家每年都跑到前端大陸劫掠數(shù)以萬計(jì)的碼農(nóng)為它們做苦力,而只有jQuery,EXT等團(tuán)隊(duì)能與它們對(duì)等談判!不過他們有點(diǎn)像非洲的酉長,把培訓(xùn)好的jQueryer奴隸賣給PHPer去了!jQuery號(hào)稱是能最快制造這樣的優(yōu)質(zhì)奴隸!EXT心有不甘,因此有了express.js,夢(mèng)想有一天光靠自己就能把控一個(gè)項(xiàng)目!而newlandjs就是mass Framework的express.js。
mass Framework由于長期的宣傳不足,及國人普遍不懂開源的好處,因此發(fā)展緩慢。但即便這樣,它也國內(nèi)少數(shù)能與jquery抗衡的框架,它的架構(gòu)與實(shí)現(xiàn)都是相當(dāng)優(yōu)異了,匯集了我各個(gè)群的精英的設(shè)計(jì)成果。我不希望newlandjs走mass Framework的老路,總是處于缺員怠工狀態(tài),于是抓緊發(fā)動(dòng)群里的人加入進(jìn)來。當(dāng)然,我也希望園子里的人,或來自其他圈子的朋友加入進(jìn)來。中國是不缺開源項(xiàng)目,只是缺乏活躍的開源項(xiàng)目罷了。善于內(nèi)斗分散了我們的戰(zhàn)斗力,導(dǎo)致我們被老外全部打敗,至今還在用老外的東西干活……
newlandjs有著宏偉的目標(biāo)——開拓javascript新天地,實(shí)現(xiàn)真正的大前端!之所以這么說,是因?yàn)橥蠬TML5與node.js所賜,websocket將成為未來前后端交互的主要渠道,一改HTTP無狀態(tài)的困境。加之HTML5的改地址不刷新頁面的History 新API(見github上的pjax項(xiàng)目與新浪微博的運(yùn)用),MVVM帶來的最小化刷新技術(shù),HTML5的cache manifes, Local Storage……這一切令人驚異的技術(shù)都迫需一個(gè)跨前后端的框架來統(tǒng)合!knockoutjs可以完全不腳踢開jQuery,輕易處理各種DOM操作,而且寫出的代碼被jQuery更易維護(hù)!這正是前端MVC(或其變種)興起的原因。但knockoutjs還是有弱點(diǎn)的,它最初要綁定數(shù)據(jù)的需要是怎么生成的呢?還不是要依賴后端通過幾個(gè)子模板拼裝起來的嗎?這些子模板的拼裝方式與渲染輸出能不能再改進(jìn)一點(diǎn),像facebook的bigpipe一樣智能呢?!還有模塊與模板的前后端共用。less在前后端實(shí)現(xiàn)CSS的DRY,解放CSSer的生產(chǎn)力!就算我不做newland.js,外國還會(huì)有人做這事的。這是未來的趨勢(shì)。
總之,讓專業(yè)的人做專業(yè)的事!這是newlandjs帶給大家的良好景望!
原文鏈接:http://www.cnblogs.com/rubylouvre/archive/2012/08/12/2634310.html
【編輯推薦】