公開(kāi)我的開(kāi)源項(xiàng)目newland.js
newland.js是一個(gè)node.js MVC框架,這個(gè)MVC架構(gòu)只是針對(duì)它的后端部分而已。當(dāng)然有人立即會(huì)提出懷疑,世界已經(jīng)有這么MVC框架,你的亮點(diǎn)在哪啊?回答通常有兩種:重復(fù)造輪子的意義,與新框架的特性。
是的,重造輪子,世界無(wú)時(shí)無(wú)刻地造輪子,造輪子的人為了編造了許許多“藉口”,我覺(jué)得最美妙的藉口是最近多《GTF: Great Teacher Friedman 》讀的東西,我覺(jué)得光是他說(shuō)的那一點(diǎn)就能讓許多人閉嘴了——
當(dāng)然,重新發(fā)明東西并不會(huì)給我?guī)?lái)論文發(fā)表,但是它卻給我?guī)?lái)了更重要的東西,這就是獨(dú)立的思考能力。一旦一個(gè)東西被你“想”出來(lái),而不是從別人那里 “學(xué)”過(guò)來(lái),那么你就知道這個(gè)想法是如何產(chǎn)生的。這比起直接學(xué)會(huì)這個(gè)想法要有用很多,因?yàn)槟阒肋@里面所有的細(xì)節(jié)和犯過(guò)的錯(cuò)誤。而最重要的,其實(shí)是由此得 到的直覺(jué)。如果直接去看別人的書(shū)或者論文,你就很難得到這種直覺(jué),因?yàn)橐话闳藢?xiě)論文都會(huì)把直覺(jué)埋藏在一堆符號(hào)公式之下,讓你看不到背后的真實(shí)想法。如果得到了直覺(jué),下一次遇到類(lèi)似的問(wèn)題,你就有可能很快的利用已有的直覺(jué)來(lái)解決新的問(wèn)題。
而這一切都已經(jīng)發(fā)生在我身上。比如,在聽(tīng)說(shuō) ANF 之后,我沒(méi)有看 Amr Sabry 的論文,只把原來(lái)的 CPSer 程序改了一點(diǎn)點(diǎn),就得到了 ANF 變換,整個(gè)過(guò)程只花了十幾分鐘。而在 R. Kent Dybvig 的編譯器課程上,我利用 CPS 變換里面的直覺(jué),改造和合并了 Dybvig 提供的編譯器框架的好幾個(gè) pass,使得它們變得比原來(lái)短小好幾倍,而且生成很不錯(cuò)的代碼。
現(xiàn)在我仍然是這樣,喜歡故意重新發(fā)明一些東西,探索不止一個(gè)領(lǐng)域。這讓我獲得了直覺(jué),不再受別人思想的限制,節(jié)省了看論文的時(shí)間,而且多了一些樂(lè)趣。一個(gè)問(wèn)題,當(dāng)我相信自己能想得出來(lái),一般都能解決。雖然我經(jīng)常不把我埋頭做出來(lái)的東西放在心上,把它們叫做“重新發(fā)明”(reinvention),但是出乎意料的是,最近我發(fā)現(xiàn)這里面其實(shí)很是隱藏了一些真正的發(fā)明。我準(zhǔn)備慢慢把其中一些想法發(fā)掘整理出來(lái),發(fā)表成論文,或者做成產(chǎn)品。
我想我是違反“發(fā)明公會(huì)”的行規(guī)了,把這天大的秘密泄漏給大家,讓本來(lái)許多甘愿當(dāng)一輩子碼農(nóng)的人奮身而已賭一把,朝食物鏈的頂層爬去了!
有關(guān)食物鏈的論斷,是昨晚我在群里一個(gè)有三年經(jīng)驗(yàn)的SOHO談話(huà)時(shí)想到。他說(shuō),wordpress已占全球網(wǎng)站10%,許多人都靠wordpress的二次開(kāi)發(fā)過(guò)活。有的人能月賺5000$,當(dāng)然這是有穩(wěn)定客戶(hù)的情況下,印度阿三是強(qiáng)大的競(jìng)爭(zhēng)對(duì)手。想一想wordpress的團(tuán)隊(duì)才多少人啊?二十來(lái)個(gè),作為食物鏈的頂端他們肯定比國(guó)內(nèi)的什么wordpress jam活得好!靠服務(wù)支持與流量帶來(lái)的廣告收入,世界范圍的榮譽(yù),被人需要的滿(mǎn)足感……這是世上少有幾種圓滿(mǎn)生活方式了!再想rails團(tuán)隊(duì),jQuery團(tuán)隊(duì),spring團(tuán)隊(duì), hibernate 團(tuán)隊(duì)……老外這么熱衷搞開(kāi)源,理由不一清二楚嗎?!
再回歸框架的本身,這是一個(gè)node.js框架。近年來(lái),HTML5與chrome V8的優(yōu)異表現(xiàn),讓javascript繼ajax之后再次走進(jìn)舞臺(tái)的中心。node.js只是后隨的一個(gè)大浪罷了。但這大浪由于ruby界,C++界等大牛的加入,變成海嘯了。看一下github中各語(yǔ)言的活躍情況吧:

由于早些年javascript沒(méi)有賦以處理二進(jìn)制的能力,帶來(lái)的致命影響是數(shù)據(jù)持久化與數(shù)據(jù)庫(kù)的連接干不了,導(dǎo)致javascript淪為玩具語(yǔ)言。要知道一個(gè)網(wǎng)站最重要的是用戶(hù)數(shù)據(jù),不能保存用戶(hù)數(shù)據(jù)就會(huì)被邊緣化。其次像讀取模板文件的內(nèi)容,合并多個(gè)文件,寫(xiě)入日志等活兒對(duì)網(wǎng)站來(lái)說(shuō)也是至關(guān)重要的!PHP的興起,是因?yàn)樗屵@些工作變得更輕松更簡(jiǎn)單。node.js提供了對(duì)二進(jìn)制的支持,正是javascript第二次爆發(fā)的原因。node.js模塊迅速增長(zhǎng)讓專(zhuān)業(yè)的人做專(zhuān)業(yè)的事,
長(zhǎng)久以來(lái),前端與后端的地位就像中國(guó)的官僚系統(tǒng)一樣可笑,外行指揮內(nèi)行。從JAVA的struts時(shí)代開(kāi)始,視圖層的交互都是層層封裝在標(biāo)簽庫(kù)內(nèi),讓人無(wú)需寫(xiě)javascript就能實(shí)現(xiàn)各種效果。然后,不是每個(gè)人都像google的員工聰明能干,那些WEB框架也不都像GWT那樣出色絕倫!于是有PHP的紀(jì)元。PHP有什么優(yōu)勢(shì)?《XXX,21天從入門(mén)到精通》!我想這樣的書(shū)名真的只能適用于PHP!入門(mén)簡(jiǎn)單,而且存在大量這樣的培訓(xùn)中心,而且PHPer的招聘條件肯定把HTML,XML,CSS,JS等羅列進(jìn)去!因此PHPer真是最廉價(jià)與實(shí)惠的工種。切圖仔只能干一樣,而且熟練工流動(dòng)快!JSer基本是騙人的,都是jQueryer,調(diào)BUG能力為零,寫(xiě)出的代碼維護(hù)性也為零……因此找靠譜的切圖與JSer,基本上與PM一樣難,當(dāng)然,PM的良品率更低。但說(shuō)這些有什么用呢?讓專(zhuān)業(yè)的人做專(zhuān)業(yè)的事!PHP能打敗JAVA在WEB的地位,是因?yàn)樗訉?zhuān)業(yè)。rails讓PHP為之戰(zhàn)戰(zhàn)兢兢,是因?yàn)閞ails更專(zhuān)業(yè),它起碼有個(gè)叫Prototype.js的子項(xiàng)目啊,Prototype.js建立了javascript的第一個(gè)王朝,直到j(luò)Query在四年前打敗了它。PHPer的人口眾多,天才也眾多,抄啊抄啊,抄了rails的數(shù)據(jù)庫(kù)遷移,智能手腳架,COC,再武裝上jQuery,終于把rubyer的起義軍鎮(zhèn)住了!但node.js的起義軍怎么鎮(zhèn)壓呢?PHPer很少跑去rails陣營(yíng),但node.js的陣營(yíng)每天都有人“叛逃”過(guò)去!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)建測(cè)試壓縮打包,大名鼎鼎的EXT團(tuán)隊(duì)擁有node.js最出名的WEB框架express.js,mongodb的接口是javascript式,提供node.js的連接庫(kù)……node.js是時(shí)代的驕子,從來(lái)沒(méi)有這么多人為一種語(yǔ)言搖旗吶喊,即使它的真相曾是被人罵得最多的語(yǔ)言,但我們知道,最該罵的是javascript之父,只花十天時(shí)間來(lái)構(gòu)思它,還有導(dǎo)致第一次瀏覽器大戰(zhàn)的網(wǎng)景與微軟,讓JS長(zhǎng)期滯后不前,兼容性問(wèn)題成為當(dāng)時(shí)程序員的噩夢(mèng)!
但美好的事物終會(huì)回歸,就像大陸與臺(tái)灣。大陸是PHP,臺(tái)灣為nodejs。讓專(zhuān)業(yè)的人做專(zhuān)業(yè)的事,這是市場(chǎng)的需求,生產(chǎn)力的呼喚!基于node.js的web框架必然比PHP框架更把了解HTML,CSS與JS。前端的人才儲(chǔ)備必然流向node.js。requirejs讓JS開(kāi)始走向工業(yè)化的模塊化開(kāi)發(fā),國(guó)內(nèi)的seajs也在做相同的事情,模塊化是構(gòu)建大應(yīng)用的關(guān)鍵,標(biāo)識(shí)著JSer完成有能力開(kāi)發(fā)像struct這樣巨弩級(jí)的web框架!前端模板的興起,nodejs各種數(shù)據(jù)庫(kù)連接庫(kù),session模擬的實(shí)現(xiàn),再加之knockout這樣的MVVM模式被認(rèn)同普及,web框架的難題一一被打破。而我的新框架newland.js只是時(shí)代洪流的一員。
誠(chéng)然,newland.js現(xiàn)在是非常非常弱小的,正如我在它的readme中寫(xiě)的一樣,它只是我到達(dá)后端大陸時(shí)被撞碎的海盜船的殘骸!后端的世界是如此廣闊古老神秘,以致于前端的世界好像一個(gè)伊比利亞半島。但后端的世界絕對(duì)不是美洲新大陸,更精確的比喻是百年后,人類(lèi)冒冒失失跑進(jìn)擁有神級(jí)技術(shù)的外星人的領(lǐng)地。后端的世界沉睡著像JAVA三大框架的古老帝國(guó),活躍數(shù)千PHP的新興國(guó)家與rails這樣的圣劍騎士團(tuán)!海岸上還遍布著其他登陸者,他們建立起geddyjs, railsjs, towerjs, meteorjs,expressjs等居民點(diǎn)!這就是WEB世界的現(xiàn)狀!PHP國(guó)家每年都跑到前端大陸劫掠數(shù)以萬(wàn)計(jì)的碼農(nóng)為它們做苦力,而只有jQuery,EXT等團(tuán)隊(duì)能與它們對(duì)等談判!不過(guò)他們有點(diǎn)像非洲的酉長(zhǎng),把培訓(xùn)好的jQueryer奴隸賣(mài)給PHPer去了!jQuery號(hào)稱(chēng)是能最快制造這樣的優(yōu)質(zhì)奴隸!EXT心有不甘,因此有了express.js,夢(mèng)想有一天光靠自己就能把控一個(gè)項(xiàng)目!而newlandjs就是mass Framework的express.js。
mass Framework由于長(zhǎng)期的宣傳不足,及國(guó)人普遍不懂開(kāi)源的好處,因此發(fā)展緩慢。但即便這樣,它也國(guó)內(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)來(lái)。當(dāng)然,我也希望園子里的人,或來(lái)自其他圈子的朋友加入進(jìn)來(lái)。中國(guó)是不缺開(kāi)源項(xiàng)目,只是缺乏活躍的開(kāi)源項(xiàng)目罷了。善于內(nèi)斗分散了我們的戰(zhàn)斗力,導(dǎo)致我們被老外全部打敗,至今還在用老外的東西干活……
newlandjs有著宏偉的目標(biāo)——開(kāi)拓javascript新天地,實(shí)現(xiàn)真正的大前端!之所以這么說(shuō),是因?yàn)橥蠬TML5與node.js所賜,websocket將成為未來(lái)前后端交互的主要渠道,一改HTTP無(wú)狀態(tài)的困境。加之HTML5的改地址不刷新頁(yè)面的History 新API(見(jiàn)github上的pjax項(xiàng)目與新浪微博的運(yùn)用),MVVM帶來(lái)的最小化刷新技術(shù),HTML5的cache manifes, Local Storage……這一切令人驚異的技術(shù)都迫需一個(gè)跨前后端的框架來(lái)統(tǒng)合!knockoutjs可以完全不腳踢開(kāi)jQuery,輕易處理各種DOM操作,而且寫(xiě)出的代碼被jQuery更易維護(hù)!這正是前端MVC(或其變種)興起的原因。但knockoutjs還是有弱點(diǎn)的,它最初要綁定數(shù)據(jù)的需要是怎么生成的呢?還不是要依賴(lài)后端通過(guò)幾個(gè)子模板拼裝起來(lái)的嗎?這些子模板的拼裝方式與渲染輸出能不能再改進(jìn)一點(diǎn),像facebook的bigpipe一樣智能呢?!還有模塊與模板的前后端共用。less在前后端實(shí)現(xiàn)CSS的DRY,解放CSSer的生產(chǎn)力!就算我不做newland.js,外國(guó)還會(huì)有人做這事的。這是未來(lái)的趨勢(shì)。
總之,讓專(zhuān)業(yè)的人做專(zhuān)業(yè)的事!這是newlandjs帶給大家的良好景望!
原文鏈接:http://www.cnblogs.com/rubylouvre/archive/2012/08/12/2634310.html
【編輯推薦】



























