[Node.js框架] 爲何要開發 Codekart 框架

兩年前,在被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

  • 高性能 MVC 開發框架
  • 具有客戶端緩存支持的靜態文件服務器
  • view頁面、binary二進制文件處理、api請求等 url 路由
  • view頁面繼承支持、配置生成化及模板數據解析
  • js、css、html 的模塊化按需加載,併合並壓縮
  • Tool經常使用工具箱,例如模板解析和流程控制工具等等
  • 精簡而強大的前端 js 經常使用方法庫

框架的設計思想和目錄結構一部分借鑑了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反饋!

相關文章
相關標籤/搜索