ngot / blog Goto Github PK
View Code? Open in Web Editor NEWHenry Zhuang's personal blog
Home Page: https://blog.ngot.me
Henry Zhuang's personal blog
Home Page: https://blog.ngot.me
fibjs开源至今差不多半年了,越来越多的人知道fibjs。响马在前些日子的南京源创会上做的fibjs分享,更是让fibjs推广进入了一个高潮,就连外国友人都开始密切关注fibjs的动态。下面,我们就来探讨一下fibjs的一些问题。
很多人会问,既然已经有了Node.js,为什么还要再造fibjs这个大轮子?难道只是为了造轮子而造轮子吗?
其实,实际原因不是这样。要说fibjs的诞生,不得不说说孢子社区的开发史。
在早期阶段,孢子社区的后端是运用响马开发的VBS运行环境开发的,后来考虑到前后端代码复用,方便招聘开发人员等原因,决定后端转向JS平台。当时,不选择Node.js的原因是认为异步开发模式不是一个适合大规模部署的方式,会给开发和维护带来很大问题。
既然,Node.js不是一个我们认为的好的选择,那就自己造轮子吧。最初的技术选型(详情参见点我)考虑了,v8,JavaScriptCore 和 SpiderMonkey三个JS引擎。
最终选择了 v8 作为基础核心。原因是:
在选择了V8后(不是Node.js用了V8,咱就要用V8,选择什么都是有原因),再开发协程环境并和V8结合工作,再补上其他基础模块,就是fibjs了。
总的来说,造轮子最初目的是为了自身满足需求。
fib是fiber的简称,fiber就是纤程的意思。JS就是Javascript语言。连起来就是用fiber技术构建起来的JS平台,简单而又直白。
同步编写异步代码
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具有明显的性能优势,测试案例:
前后统一语言
这个优点还是非常诱人的,前端和后端不需要跨语言开发,许多代码库可以共享,更有利于开发人员往全栈方向发展。
如果你是Mac OSX用户,现在可以直接
brew install fibjs
如果你是有NPM环境的Linux或者Mac用户,可以
npm install fibjs -g
感谢笔者(也就是写这篇文字的家伙,并且他还偷懒不支持windows)的贡献
如果以上两点条件都不具备或者安装不成功,还可以直接点击下面链接下载笔者编译好的可执行程序来体验。
注意OSX和Linux用户,直接下载的文件不具有执行权限,执行:
```
chmod 777 fibjs
```
就能够正常运行了。
如果,以上三步都失败了(够悲催的),那就到fibjs主页下载代码,手动编译。
因为fibjs在外国友人中得名气越来越大,英文文档的需求日益迫切,所以响马开展了fibjs文档的翻译工作,文档项目地址:https://github.com/xicilion/fibjs_docs,欢迎认领翻译。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.