當javascript 效能執行的越來越好時,開始有人把javascript這個client端運行的language動到server side了。如果server side 和client side 都能夠用同一種語言來撰寫該有多好?事實上,javascript是個很好的OO語言,只是他的物件導向概念迥異於Java之類的語言,然而ECMA定義了javascript的browser-based的語言標準,但是並沒有考慮到其他層面的標準。於是commonJS就因此而誕生了,commonJS定義了其他層面的API,讓javascript這個語言還可以拿來做server-side applications, command-line tools, Desktop GUI-based applications …等,而不是只能在browser上執行而已。但implementation就百家爭鳴了,你可以在Getting CommonJS找到很多實做。
nodeJS是我最早接觸的server side JS,會玩他是因為他太火了,因為Ajaxian也不斷的有關於他的新消息,plurk的技術長Amix也曾經來到台灣介紹過它,用在server push 的技術中(Comet with node.js and V8),而且也在plurk上實際應用(Plurk: Instant conversations using Comet),令人相當振奮,這才是有web 產業應有的精神,研究、應用、實做、測試、上線。令人折服。
隨著網站越做越複雜,大部分的網站,不管後端是用哪種語言,前端幾乎都是用javascript,但是平心而論,前後端都用同一個語言,到底有什麼好處?目前的動態語言都非常的強大了,幹麼要在多學一個新的東西,了解他的架構、API等等~我想了很久,唔~大概有好幾個小時吧,參考了許多blog,以下是我整理出來的結論:
- 整合前後端的需求 : 事實上,javascript天生就是拿來做DOM rendering的,試想一種情況:我希望使用AJAX來做頁面的呈現,但卻也要能用server-side language來呈現網頁結果(SEO考量),這等於要為同樣的功能撰寫兩次。server端要寫一次,client-side又要做AJAX特效,前後端若能使用同一種語言,那將可以整合這樣的需求。再想另一種情況,要做到多國語言化,如果純粹在server端做多國語言化,是可以解決一些需求,但隨著若要在client端也做到多國語言,就像剛剛那種情況一樣要重複做兩次工。因此統一server-side side 和client-side的需求將可以整合前後端的需求。
- 動態語言:js跟其他動態語言特性一樣,甚至更勝一籌,比方說匿名函式的特性,prototype 擴充的特性等等。
- Not only Browser: 不再侷限只能在瀏覽器上執行,你可以在server上面運行javascript囉。(這是我個人很興奮的事情)。
RingoJS
最近注意到RingoJS,真是讓我驚艷!用Java來implement, 甚至可以在google App Engine來實做,而且非常容易安裝(Getting Started - Ringo)。光看他的介紹,就足夠吸引我投入了。這應該會是我最近努力在玩的東西。I love it. 下集待續…..