两年前,在被php的$符号和字符串处理折磨得半夜骂娘之后,我义无反顾地决定:珍爱生命,远离php。

之后一直在寻找一门“完美的语言”,先后接触了Lisp、python、java、Ruby。Lisp几乎在语法和思想上达到了完美,但却由于过于小众和开发环境的不完善,导致基本找不到工作,也只能作为业余时间的写一些有趣的东西了。python的强制缩进,说实话相当于告诉程序员:嘿,你个SB!到底会不会排版?我一直坚定的认为,充分相信程序员给于程序员最大的自由,而不是害怕程序员犯错误替程序员做出决定的语言更加Geek,难道不是么?java的语法像老奶奶的裹脚布,又臭又长,各种库臃肿庞大,我可不想到哪儿都背着一个沉重的工具箱,我希望的是一把瑞士军刀,或者一件能制作工具的工具。Ruby各方面比较平衡,看起来还比较适合。

就在我做好准备投入Ruby的怀抱时,由于项目需要写了一些javascript代码,才对这个一直被我忽略的语言有了充分的认识和了解。如果说写js有什么体会,那就是“自由”!你只需要专注于功能本身的实现,不用花大量时间和精力去跟语言本身的特征打交道。举个反例,我的入门语言是C++,当时做MFC开发的感觉就是自己简直是一个弱智,巨大的挫折感每天都在打垮自己的意志,因为大量的时间被耗费在了解和突破语言的限制、担心内存泄露和程序出错上面,战战兢兢如履薄冰,甚至半夜惊醒。后来写js之后发现,之前在c++里写的大量代码,居然是在实现另一们语言本身的“高级”特征!

当Node.js带着精简优雅的设计和优越的性能扑面而来时,我感觉自己像坠入了爱河。关于Node.js的优缺点,可以看我在君鉴上的文章专辑:Node.js技术研究。在这个文章大大地将node夸赞了一番,极尽谄媚马屁之能事。

接下来就是长时间高强度的了解Node.js了。在基本阅读了手册之后,我开始写了一些代码,比如按照教程写了静态文件服务器,和websocket聊天程序。之后开始寻找一个开发框架,当然第一个映入眼帘的就是大名鼎鼎的Express。简单尝试之后,惊叹于Express的url路由真的十分强大!但是也学是因为自己长时间习惯于php开发,总觉得Express“不像”是一个框架,因为Express还需要自己组织程序的模块化,需要自己进行视图和处理程序的分离,等等。

于是,我决定不借助任何框架从零开始重写君鉴,并在重写的过程中开发一个MVC模式的框架。我认为这是一个大工程,将要耗费我大量的时间。

事实上,得益于语言本身的“高级”,重写并没有花掉我太多的时间。一路畅快的完成开发后,一个粗略的框架基本完成了。由于之前写php时一直使用codeigniter,我把这个新开发的框架命名为 Codekart ,kart的意思是卡丁车,Codekart 是小巧精简、高性能、功能完善的框架,使用Codekart开发web程序就像驾驶卡丁车一样畅快而且“好玩儿”。Codekart已经帮你出色的完成了下面的工作:

  • 高性能 MVC 开发框架
  • 具备客户端缓存支持的静态文件服务器
  • view页面、binary二进制文件处理、api请求等 url 路由
  • view页面继承支持、配置生成化及模板数据解析
  • js、css、html 的模块化按需加载,并合并压缩
  • Tool常用工具箱,例如模板解析和流程控制工具等等
  • 精简而强大的前端 js 常用方法库

框架的设计思想和目录结构一部分借鉴了codeigniter,将app与framework分开,在此基础上再将静态所有静态文件归类到static目录,大致如下:


├─ app ┐ //工程文件目录,程序开发工作在此进行

├─ framework ┐ //框架文件目录

├─ static ┐ //静态文件目录

详细文件夹结构,在这里:Codekart目录结构

由于篇幅所限,这里不能一一介绍。下面就选取框架比较突出的功能:web页面模块化配置。

例如: 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反馈!

[Node.js框架] 为什么要开发 Codekart 框架的更多相关文章

  1. 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想

    总体介绍 <Node.js+MongoDB+AngularJS Web开发>,于2015年6月出版,是一本翻译过来的书,原书名为<Node.js,MongoDB and Angula ...

  2. Node.js 命令行程序开发资料

    Node.js 命令行程序开发教程http://www.ruanyifeng.com/blog/2015/05/command-line-with-node.html用Node.js创建命令行工具ht ...

  3. 【Node.js】二、基于Express框架 + 连接MongoDB + 写后端接口

    在上节,我们讲了如何搭建express环境,现在我们说说如何通过node.js写服务接口给前端调用 1. 首先通过MongoDB建好数据库与表格 例如,我的数据库名字为db_demo,数据库表格为go ...

  4. 如何快速搭建一个 Node.JS 项目并进入开发?

    了解:如何快速搭建一个项目并进入开发? 在此不概述 Node.JS 的历史以及发展过程. 因为之前接触过通过 Java 开发语言,所以明确地知道一个服务器所需的文件,以及一个服务器所需要的操作. 那么 ...

  5. node.js + webstorm :配置开发环境

    一.配置开发环境: 1.先安装node (1).访问http://nodejs.org打开安装包,正常安装,点击next即可. 为了测试是否安装成功,打开命令提示符,输入node,则进入node.js ...

  6. 【Node.js】2.开发Node.js选择哪个IDE 开发工具呢

    安装完Node.js之后,就要为它选择一个有利的IDE用于开发. 相比较了多个IDE之后,定位在webstrom和sublime上. 有一个简单的比较: webstorm功能很丰富,前端开发工具的集大 ...

  7. node.js适合游戏后台开发吗?

    网站服务器和游戏服务器是怎么样联系到一起的? 百牛信息技术bainiu.ltd整理发布于博客园 1. 游戏分很多种,咱们先来看看MMORPG. 再怎么简单的RPG服务器都免不了处理多人交互的情形,上百 ...

  8. node.js简单数据接口开发

    随着网络时代的快速发展,前端开发不仅仅是做出漂亮的页面就可以了,还要会一点后端语言,那么后端语言有Java,php,node.js最常见,那我们应该学哪一种呢,为了让我们自己更好的学习,我推荐选择no ...

  9. Memlab,一款分析 JavaScript 堆并查找浏览器和 Node.js 中内存泄漏的开源框架

    Memlab 是一款 E2E 测试和分析框架,用于发现 JavaScript 内存泄漏和优化机会. Memlab 是 JavaScript 的内存测试框架.它支持定义一个测试场景(使用 Puppete ...

随机推荐

  1. 吐槽一下Activiti用户手册和一本书

    业余没事的时候,读点Java轮廓,无意中发现Activiti.我们打算跑了几个例子来看看它是如何. 我们一直从事低层次.我们在上面的照顾偶尔有精确地的程度不是什么. 这个过程是如此悲惨开始.第一Act ...

  2. nodejs 模拟form表单上传文件

    使用nodejs来模拟form表单进行文件上传,可以同时上传多个文件. 以前项目里有这个方法,最近在客户那里出问题了,同事说,这个方法从来就没管用过,SO,用了一天时间把这个方法给搞出来了(觉得花费的 ...

  3. C#依据word模版动态生成文档

    新生开学,各院系辅导员代领校园卡.需要打印一份领取卡的协议,协议模版固定,但各院系卡的数量不同.需要从excel表格中抽取数据往word文件中填,同事咨询是否可以用word中的邮件合并功能,心想有这功 ...

  4. SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)

    原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候 ...

  5. 站长VS微商 你选择哪个?

    近期,站长圈里盛行起了一阵面膜风.我刷空间和微信朋友圈的时候,常常看到一些朋友在卖面膜,不光女童鞋在卖,男屌丝站长也在卖. 不光普通人在卖.行业圈的自媒体明星大佬也在卖. 我们暂且称卖面膜的童鞋为微商 ...

  6. python 3.4.0 简单的print &#39;hello world&#39;,出错--SyntaxError: invalid syntax

    问题描写叙述: win7下安装的python 3.4.0版本号, 在命令行里写入简单的输出语句: print 'hello world' 然后enter,结果返回结果为: SyntaxError: i ...

  7. C++它 typedef void *HANDLE

    阅读时编写代码的代码,经常看到一个代码: typedef void *HANDLE ,这是它背后的故事?怎么理解呢? 不明白的时候.这是非常美妙的感觉,后来我才知道这,这是typedef定义,就在vo ...

  8. UNIX网络编程卷1 server编程范式0 迭代server

    本文senlie原版的.转载请保留此地址:http://blog.csdn.net/zhengsenlie 1.迭代 TCP server总是在全然处理某个客户的请求后才转向下一个客户. 2.从进程控 ...

  9. Qt Quick 组件和动态创建的对象具体的解释

    在<Qt Quick 事件处理之信号与槽>一文中介绍自己定义信号时,举了一个简单的样例.定义了一个颜色选择组件,当用户在组建内点击鼠标时,该组件会发出一个携带颜色值的信号,当时我使用 Co ...

  10. 为 Oracle Database 开发 WCF Data Services 和 OData 应用程序

    为 Oracle Database 开发 WCF Data Services 和 OData 应用程序 本教程包含以下部分:   目的   所需时间   概述   先决条件   创建新的网站项目   ...