認識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由西祠胡同創始人,孢子社區創始人,響馬歷時兩年多開發完成。 </ul>
- 支持多線程重入,協程的堆棧本質是線程,所以要支持協程必須要支持多堆棧重入;
- 不支持多線程并發,雖然 isolate 支持多堆棧現場,但是 isolate 內部卻為無鎖環境,因此不能接受多線程同時運行,必須在一個線程退出后,另一線程才可進入; </ul>

- 去除回調,去除層層的 }}}}}}}}}}}}}}}}}}}}}}}}};
- Javscript
- 跨平臺,支持Mac OSX, Linux, FreeBSD, Windows </ul>
-
同步編寫異步代碼
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()); })();</code></pre> <p>fibjs版本</p>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來的簡單明了。
</li>高性能,整體比Node.js快接近8倍
相比較Node.js,fibjs具有明顯的性能優勢,測試案例:
- web服務對比測試
- fibjs VS node.js With Mongodb </ul> </li>
-
前后統一語言
</li> </ul>
這個優點還是非常誘人的,前端和后端不需要跨語言開發,許多代碼庫可以共享,更有利于開發人員往全棧方向發展。fibjs發展史
- 2012年2月,項目啟動
- 2012年9月,開始在孢子社區生產環境試運行
- 2013年初,向外公開fibjs信息
- 2014年5月,項目推送Github,徹底開源
- 2014年10月,南京源創會,首次開講,引起業界轟動
- 還在繼續... </ul>
- 孢子社區
- 咕咚運動
- 舜飛科技
- 會鴿
- 以及其他,我還不知道的公司 </ul>
-
如果你是Mac OSX用戶,現在可以直接
</li>brew install fibjs -
如果你是有NPM環境的Linux或者Mac用戶,可以
npm install fibjs -g感謝筆者(也就是寫這篇文字的家伙,并且他還偷懶不支持windows)的貢獻
</li> -
如果以上兩點條件都不具備或者安裝不成功,還可以直接點擊下面鏈接下載筆者編譯好的可執行程序來體驗。
- OSX
- Linux x64
- Linux x86
- windows x64
- windows x86 </ul>
注意OSX和Linux用戶,直接下載的文件不具有執行權限,執行:
</li>``` chmod 777 fibjs ``` 就能夠正常運行了。 -
如果,以上三步都失敗了(夠悲催的),那就到fibjs主頁下載代碼,手動編譯。
</li> </ul>文檔翻譯計劃
因為fibjs在外國友人中得名氣越來越大,英文文檔的需求日益迫切,所以響馬開展了fibjs文檔的翻譯工作,文檔項目地址:https://github.com/xicilion/fibjs_docs,歡迎認領翻譯。
參考資料
應用案例
如何安裝fibjs
又一個輪子?
很多人會問,既然已經有了Node.js,為什么還要再造fibjs這個大輪子?難道只是為了造輪子而造輪子嗎?
其實,實際原因不是這樣。要說fibjs的誕生,不得不說說孢子社區的開發史。
在早期階段,孢子社區的后端是運用響馬開發的VBS運行環境開發的,后來考慮到前后端代碼復用,方便招聘開發人員等原因,決定后端轉向JS平臺。當時,不選擇Node.js的原因是認為異步開發模式不是一個適合大規模部署的方式,會給開發和維護帶來很大問題。
既然,Node.js不是一個我們認為的好的選擇,那就自己造輪子吧。最初的技術選型(詳情參見點我)考慮了,v8,JavaScriptCore 和 SpiderMonkey三個JS引擎。
最終選擇了 v8 作為基礎核心。原因是:
在選擇了V8后(不是Node.js用了V8,咱就要用V8,選擇什么都是有原因),再開發協程環境并和V8結合工作,再補上其他基礎模塊,就是fibjs了。
總的來說,造輪子最初目的是為了自身滿足需求。
fibjs名字由來?
fib是fiber的簡稱,fiber就是纖程的意思。JS就是Javascript語言。連起來就是用fiber技術構建起來的JS平臺,簡單而又直白。