[Node.js框架] 为什么要开发 Codekart 框架

两年前,在被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目录,大致如下:

1
2
3
4
5
6
7
├─ app ┐ //工程文件目录,程序开发工作在此进行
├─ framework ┐  //框架文件目录
├─ static ┐  //静态文件目录

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

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

例如: framework/view/html.js 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//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反馈!

Codekart 框架的更多相关文章

  1. [Node.js框架] 为什么要开发 Codekart 框架

    两年前,在被php的$符号和字符串处理折磨得半夜骂娘之后,我义无反顾地决定:珍爱生命,远离php. 之后一直在寻找一门“完美的语言”,先后接触了Lisp.python.java.Ruby.Lisp几乎 ...

  2. 避免重复造轮子的UI自动化测试框架开发

    一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. 旺财速啃H5框架之Bootstrap(五)

    在上一篇<<旺财速啃H5框架之Bootstrap(四)>>做了基本的框架,<<旺财速啃H5框架之Bootstrap(二)>>篇里也大体认识了bootst ...

  5. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  6. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  7. 制作类似ThinkPHP框架中的PATHINFO模式功能

    一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...

  8. 旺财速啃H5框架之Bootstrap(四)

    上一篇<<旺财速啃H5框架之Bootstrap(三)>>已经把导航做了,接下来搭建内容框架.... 对于不规整的网页,要做成自适应就有点玩大了.... 例如下面这种版式的页面. ...

  9. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

随机推荐

  1. 我的MYSQL学习心得(三)

    原文:我的MYSQL学习心得(三) 我的MYSQL学习心得(三) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL ...

  2. Android(Lollipop/5.0) Material Design(六) 使用图像

    Material Design列 Android(Lollipop/5.0)Material Design(一) 简单介绍 Android(Lollipop/5.0)Material Design(二 ...

  3. C#记录日志、获取枚举值 等通用函数列表

    )             {                 ] >=  && ipvals[] <=                  && ipval ...

  4. python_基础学习_02_拆分文件(spilt)

    做爬虫经常会有这样的引用场景 ,原始网页存储格式为  url+\t+ html php 有个explode的 拆分文本行方法,比较方便直接接收列值 list($url,$html)=explode(& ...

  5. Visio Premium 2010钥匙+激活破解方法

    Visio Premium 2010钥匙+激活破解方法: 安装时能够使用的关键: GR24B-GC2XY-KRXRG-2TRJJ-4X7DC VWQ6G-37WBG-J7DJP-CY66Y-V278X ...

  6. 两种计算和输出n内5要么9除尽互惠

    #include<stdio.h> int main() { int i=0,n=0; float fSum=0; scanf("%d", &n); for ( ...

  7. 【BZOJ3450】【Tyvj1952】Easy 可能DP

    联系: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  8. 经典Loading 动漫赏析

    0. 传统的菊花Loading动画 假设作为程序猿的你还在用菊花作为Loading动画,是时候换个口味了.来看下5种不错的Loading动画. 几种颜色组成的动画,给用户一个美感. 1.android ...

  9. 解决Crystal Report XI R2不能在64操作系统正常工作的问题-web程序

    原文:[原创]解决Crystal Report XI R2不能在64操作系统正常工作的问题-web程序 我更换了新的电脑,操作系统也从原来32位的windows 2003 R2升级到windows 2 ...

  10. UITableView刷新局部

    //局部section刷新 NSIndexSet *nd = [[NSIndexSet alloc] initWithIndex:1]; //刷新第二个section [self.tableView ...