thinkjs 2.0 是第一個全面支援使用 es6/7 特性開發的 node.js 架構,于 2015.10.30 正式釋出。使用 es6 裡的*/yield 或者 es7 裡的 async/await 可以很好的解決異步嵌套的問題,借助 babel 編譯,可以穩定運作在 node.js 各個主流版本中。同時 thinkjs 提供了自動編譯和自動更新的機制,免去了檔案修改後重新開機 node.js 服務的麻煩。
經過一個多月的緊張開發後,thinkjs 迎來了 2.1 版本。2.1 版本不管在功能還是在性能上都有大幅的改進和提升,具體如下:
支援 typescript
typescript 是一種由微軟開發的自由和開源的程式設計語言。它是 javascript 的一個超集,向這個語言添加了可選的靜态類型,在大型項目裡非常有用。
thinkjs 2.1 開始支援了建立 typescript 類型的項目,并且開發時會自動編譯、自動更新,無需手工編譯等複雜的操作。具體請見這裡。
性能提升 90%
2.1 版本利用 v8 的 trace(--trace-opt, --trace-inlining, --trace-gc) 分析做了很多深度的優化,同時使用 bluebird 庫替換原生和 babel 裡的 promise 庫,使性能有大幅的提高,具體性能相對于 2.0 版本提升高達 90%。
評價一個架構是否出色,一方面看支援的功能,另一方面也要看性能。雖然 thinkjs 更适合大型項目,功能和複雜度遠遠超過 express 和 koa,但性能上并不比 express 和 koa 遜色多少,具體的測試資料請見下圖。
注:以上資料使用分布式壓力測試系統測試。
從上圖中測試資料可以看到,雖然 thinkjs 比 express 和 koa 性能要差一些,但差别并不大。thinkjs 和 sails.js 都更符合大型項目,但 thinkjs 的性能要比 sails.js 高很多。
具體測試代碼請見:,可以下載下傳代碼在本機測試,如果使用 ab 測試工具,請注意該工具在 mac 系統下很不穩定,多次測試結果會相差很大。
更新 babel 到 6
2.0 編譯依賴的 babel 為 5,在 2.1 版本裡更新到 6,這樣和前端代碼編譯可以更好的結合了。
多級控制器
傳統的 mvc 中,controller 隻支援一級。雖然在 2.0 版本中添加了子產品的功能,但還是不能很好的滿足特别大型的項目。
2.1 版本支援多級控制器,也是就在 controller 裡可以建立子目錄,目錄層級深度完全可以根據項目需要來設定,這樣可以更好的滿足不足項目複雜度的開發需求。
支援 postgresql
繼支援 postgresql 後, thinkjs 現在支援 mysql,sqlite,mongodb 和 postgresql 4 種資料庫,後續還會支援更多的資料庫,開發者也可以進行擴充。
====================================分割線================================