兩年前,在被php的$符號和字符串處理折磨得半夜罵娘以後,我義無反顧地決定:珍愛生命,遠離php。javascript
以後一直在尋找一門「完美的語言」,前後接觸了Lisp、python、java、Ruby。Lisp幾乎在語法和思想上達到了完美,但卻因爲過於小衆和開發環境的不完善,致使基本找不到工做,也只能做爲業餘時間的寫一些有趣的東西了。python的強制縮進,說實話至關於告訴程序員:嘿,你個SB!到底會不會排版?我一直堅決的認爲,充分相信程序員給於程序員最大的自由,而不是懼怕程序員犯錯誤替程序員作出決定的語言更加Geek,難道不是麼?java的語法像老奶奶的裹腳布,又臭又長,各類庫臃腫龐大,我可不想到哪兒都揹着一個沉重的工具箱,我但願的是一把瑞士軍刀,或者一件能製做工具的工具。Ruby各方面比較平衡,看起來還比較適合。php
就在我作好準備投入Ruby的懷抱時,因爲項目須要寫了一些javascript代碼,纔對這個一直被我忽略的語言有了充分的認識和了解。若是說寫js有什麼體會,那就是「自由」!你只須要專一於功能自己的實現,不用花大量時間和精力去跟語言自己的特徵打交道。舉個反例,個人入門語言是C++,當時作MFC開發的感受就是本身簡直是一個弱智,巨大的挫折感天天都在打垮本身的意志,由於大量的時間被耗費在瞭解和突破語言的限制、擔憂內存泄露和程序出錯上面,戰戰兢兢如履薄冰,甚至半夜驚醒。後來寫js以後發現,以前在c++裏寫的大量代碼,竟然是在實現另外一們語言自己的「高級」特徵!css
當Node.js帶着精簡優雅的設計和優越的性能撲面而來時,我感受本身像墜入了愛河。關於Node.js的優缺點,能夠看我在君鑑上的文章專輯:Node.js技術研究。在這個文章大大地將node誇讚了一番,極盡諂媚馬屁之能事。html
接下來就是長時間高強度的瞭解Node.js了。在基本閱讀了手冊以後,我開始寫了一些代碼,好比按照教程寫了靜態文件服務器,和websocket聊天程序。以後開始尋找一個開發框架,固然第一個映入眼簾的就是大名鼎鼎的Express。簡單嘗試以後,驚歎於Express的url路由真的十分強大!可是也學是由於本身長時間習慣於php開發,總以爲Express「不像」是一個框架,由於Express還須要本身組織程序的模塊化,須要本身進行視圖和處理程序的分離,等等。前端
因而,我決定不借助任何框架從零開始重寫君鑑,並在重寫的過程當中開發一個MVC模式的框架。我認爲這是一個大工程,將要耗費我大量的時間。java
事實上,得益於語言自己的「高級」,重寫並無花掉我太多的時間。一路暢快的完成開發後,一個粗略的框架基本完成了。因爲以前寫php時一直使用codeigniter,我把這個新開發的框架命名爲 Codekart ,kart的意思是卡丁車,Codekart 是小巧精簡、高性能、功能完善的框架,使用Codekart開發web程序就像駕駛卡丁車同樣暢快並且「好玩兒」。Codekart已經幫你出色的完成了下面的工做:node
框架的設計思想和目錄結構一部分借鑑了codeigniter,將app與framework分開,在此基礎上再將靜態全部靜態文件歸類到static目錄,大體以下:python
│ ├─ app ┐ //工程文件目錄,程序開發工做在此進行 │ ├─ framework ┐ //框架文件目錄 │ ├─ static ┐ //靜態文件目錄 │
詳細文件夾結構,在這裏:Codekart目錄結構。jquery
因爲篇幅所限,這裏不能一一介紹。下面就選取框架比較突出的功能:web頁面模塊化配置。c++
例如: framework/view/html.js 內容以下:
//web頁面頂級頁面定義 exports.stuff = { tpl:{html:'html'}, //頁面的tpl模板文件列表 tpl_pre:[], //待用的tpl文件列表 會被加入js文件裏面待用 保存在app/view/tpl文件夾 格式{note_list:'abc/abc'} less:'html', //頁面的css模板文件列表 csslib:[], //css庫文件,在static/csslib目錄下 js:[ 'functions', 'json', 'cookie', 'jq-extend', 'tmpl', 'pro' ], //頁面的js模板文件列表 jslib: 'jquery-2.0.3.min' //js庫文件列表,在static/jslib目錄下 }; var website = require_config('website'); /** * tpl模板數據獲取函數 * @param callback 返回模板數據 */ exports.data = function(callback){ var that = this , req = this.request; //原生的request請求對象 callback({ title: website.name, time: req.time, website: website },{ website: website }); };
exports.stuff 對象及爲web頁面的配置,exports.data函數爲頁面模板數據的獲取函數。你也能夠方便的進行頁面的繼承。更多內容能夠訪問 Codekart文檔手冊。
目前爲止,Node.js仍然是一個年輕的但卻充滿活力的服務器解決方案。國內的使用者包括阿里巴巴、一些大數據處理和一些遊戲公司使用,但它的適用環境卻遠不止作遊戲後端和大數據接口。用Node可讓網站更加「實時」,性能更加突出,能夠處理海量的數據請求,Codekart的開發初衷是爲了在享受高性能的同時,讓網站開發更加快速和便捷。
你能夠在以下地方下載或瞭解Codekart:
Github: https://github.com/myworld4059/Codekart
主頁: http://codekart.jojoin.com/
使用手冊: http://docs.codekart.jojoin.com
歡迎提出建議或者BUG反饋!