登录
注册
node.js 学习社区
fibjs博文第一篇来了,《认识fibjs》

田琳

2014-12-12 17:52

认识fibjs

fibjs开源至今差不多半年了,越来越多的人知道fibjs。响马在前些日子的南京源创会上做的fibjs分享,更是让fibjs推广进入了一个高潮,就连外国友人都开始密切关注fibjs的动态。下面,我们就来探讨一下fibjs的一些问题。

fibjs是什么?

fibjs不是前端开发框架,不同于Jquery,Angular等运行在浏览器的JS框架,fibjs运行在服务端。

fibjs不是Node.js的一个包,和NPM里面的fiber扩展包也没有关系。

fibjs是基于协程和V8,运用C++语言开发的JS运行平台,和Node.js一样,都是服务端JS环境。

fibjs由孢子社区创始人,响马历时两年多开发完成。

又一个轮子?

很多人会问,既然已经有了Node.js,为什么还要再造fibjs这个大轮子?难道只是为了造轮子而造轮子吗?

其实,实际原因不是这样。要说fibjs的诞生,不得不说说孢子社区的开发史。

在早期阶段,孢子社区的后端是运用响马开发的VBS运行环境开发的,后来考虑到前后端代码复用,方便招聘开发人员等原因,决定后端转向JS平台。当时,不选择Node.js的原因是认为异步开发模式不是一个适合大规模部署的方式,会给开发和维护带来很大问题。

既然,Node.js不是一个我们认为的好的选择,那就自己造轮子吧。最初的技术选型(详情参见点我)考虑了,v8,JavaScriptCore 和 SpiderMonkey三个JS引擎。

最终选择了 v8 作为基础核心。原因是:

支持多线程重入,协程的堆栈本质是线程,所以要支持协程必须要支持多堆栈重入;

不支持多线程并发,虽然 isolate 支持多堆栈现场,但是 isolate 内部却为无锁环境,因此不能接受多线程同时运行,必须在一个线程退出后,另一线程才可进入;

在选择了V8后(不是Node.js用了V8,咱就要用V8,选择什么都是有原因),再开发协程环境并和V8结合工作,再补上其他基础模块,就是fibjs了。

总的来说,造轮子最初目的是为了自身满足需求。

fibjs名字由来?

fib是fiber的简称,fiber就是纤程的意思。JS就是Javascript语言。连起来就是用fiber技术构建起来的JS平台,简单而又直白。

fibjs logo含义

fibjs

去除回调,去除层层的大括号

Javscript

跨平台,支持Mac OSX, Linux, FreeBSD, Windows

fibjs特点

同步编写异步代码

node.js的回调写法,肯定很多人见识过,层层回调简直就是项目的灾难。虽然,可以通过Asyc,Promise,Generator等手段,在形式上简化回调写法,但是本质上没有变,始终无法靠直觉写出简洁优美的代码。还是少废话,直接看代码。

我们来看一个文件异步读取的例子:

Node.js CallBack版本

    var fs = require("fs");
    fs.readFile('file', function(err, data) {
        if (err) throw err;
        console.log(data.toString());
    });
    

采用CO库改进的Node.js版本

    var fs = require("fs");
    var co = require("./co");
    function read(file) {
        return function(fn) {
            fs.readFile(file, function(err, data) {
                if (err) return fn(err);
                fn(null, data);
            });
        }
    }
    co(function *() {
        var a = yield read('file');
        console.log(a.toString());
    })();
        

fibjs版本

    var fs = require("fs");
    try {
        var file = fs.readFile('file');
        console.log(file);
    } catch (e) {
        console.log(e.number);
    }

从上面的代码对比,可以看出,fibjs的同步写法非常简洁,而且可以利用try catch来捕获异常,而node.js必须依赖回调来处理异步,就算采用了Generator,在代码简洁和错误处理上Node.js还是没有fibjs来的简单明了。

高性能,整体比Node.js快接近8倍

相比较Node.js,fibjs具有明显的性能优势,测试案例:

web服务对比测试

fibjs VS node.js With Mongodb

前后统一语言 这个优点还是非常诱人的,前端和后端不需要跨语言开发,许多代码库可以共享,更有利于开发人员往全栈方向发展。

fibjs发展史

2012年2月,项目启动

2012年9月,开始在孢子社区生产环境试运行

2013年初,向外公开fibjs信息

2014年5月,项目推送Github,彻底开源

2014年10月,南京源创会,首次开讲,引起业界轰动

还在继续…

应用案例

孢子社区

咕咚运动

舜飞科技

会鸽

以及其他,我还不知道的公司

如何安装fibjs

如果你是Mac OSX用户,现在可以直接

    brew install fibjs

感谢@艾斯昆帮忙提交到Homebrew

如果你是有NPM环境的Linux或者Mac用户,可以

    npm install fibjs -g

感谢笔者(也就是写这篇文字的家伙,并且他还偷懒不支持windows)的贡献

如果以上两点条件都不具备或者安装不成功,还可以直接点击下面链接下载笔者编译好的可执行程序来体验。

OSX

Linux x64

Linux x86

windows x64

windows x86

注意OSX和Linux用户,直接下载的文件不具有执行权限,执行:

    chmod 777 fibjs

就能够正常运行了。

如果,以上三步都失败了(够悲催的),那就到fibjs主页下载代码,手动编译。

原文引自:http://cnodejs.org/topic/5455c8309e0a00c814b7dda6

回复 · 1

发表回复

你可以在回复中 @ 其他人