Code Monkey home page Code Monkey logo

blog's Introduction

my git config setup

blog's People

Contributors

ngot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

blog's Issues

认识fibjs

认识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具有明显的性能优势,测试案例:

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

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用户,直接下载的文件不具有执行权限,执行:

    ```
        chmod 777 fibjs
    ```
    就能够正常运行了。
    
  • 如果,以上三步都失败了(够悲催的),那就到fibjs主页下载代码,手动编译。

文档翻译计划

因为fibjs在外国友人中得名气越来越大,英文文档的需求日益迫切,所以响马开展了fibjs文档的翻译工作,文档项目地址:https://github.com/xicilion/fibjs_docs,欢迎认领翻译。

参考资料

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.