ThinkJS 2.1:支持 TypeScript,性能提升 90% - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
welefen
V2EX    Node.js

ThinkJS 2.1:支持 TypeScript,性能提升 90%

  •  1
     
  •   welefen 2016-01-14 19:06:15 +08:00 5416 次点击
    这是一个创建于 3611 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 性能测试

    :以上数据使用分布式压力测试系统测试。

    从上图中测试数据可以看到,虽然 ThinkJS 比 Express 和 Koa 性能要差一些,但差别并不大。 ThinkJS 和 Sails.js 都更符合大型项目,但 ThinkJS 的性能要比 Sails.js 高很多。

    具体测试代码请见:https://github.com/thinkjs-team/thinkjs-performance-test,可以下载代码在本机测试,如果使用 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 种数据库,后续还会支持更多的数据库,开发者也可以进行扩展。

    更多特性请见 https://thinkjs.org/changelog.html

    相关资源

    14 条回复    2016-01-15 16:02:26 +08:00
    secondwtq
        1
    secondwtq  
       2016-01-14 21:06:22 +08:00
    滋瓷 TypeScript 的库不多啊。

    不过为啥那个链接 404 了...
    kassadin
        2
    kassadin  
       2016-01-14 22:13:36 +08:00
    手动支持下。
    qgy18
        3
    qgy18  
       2016-01-14 23:05:02 +08:00
    今天第一时间把博客程序升级到了 ThinkJS 2.1 ,本打算从 es6 转成 typescript ,结果发现 typescript 编译器没有对 CommonJS 模块做兼容,导致没有 export default 的模块,如果用 import 就会报错,而 babel 编译就没问题。另外当前的 typescript 编译器对 async + super 的编译也有问题。只好作罢~

    ThinkJS 很好用,推荐大家都来试试。别人说得再好都没用,自己试过才知道。

    ^_^ 最后广告下我基于 ThinkJS 开发的个人博客: https://imququ.com
    kingme
        4
    kingme  
       2016-01-14 23:17:35 +08:00
    @qgy18 博客速度爆炸啊,这么快。服务器在哪儿
    kenshinhu
        5
    kenshinhu  
       2016-01-14 23:22:41 +08:00
    一直用用 livescript 的飘过
    qgy18
        6
    qgy18  
       2016-01-14 23:39:12 +08:00
    @kingme 国内访问在阿里云青岛,国外访问在 Linode Tokyo 。
    123s
        7
    123s  
       2016-01-14 23:54:24 +08:00 via iPhone
    我觉得 ts 不用支持,毕竟用户不多。重点还是放在快速开发上,便利等。
    sodatea
        8
    sodatea  
       2016-01-15 00:06:29 +08:00   1
    @qgy18 TypeScript 用 1.8 版本打开 --allowSyntheticDefaultImports 选项就可以正常使用 CommonJS 模块了
    zonghua
        9
    zonghua  
       2016-01-15 00:14:27 +08:00
    支持 ququ 。但是不喜欢写 Javascript ,因为没有自动补[呵呵]。
    qgy18
        10
    qgy18  
       2016-01-15 00:28:58 +08:00 via iPhone   1
    @zonghua typescript 的自动补全已经做得很好了, ThinkJS 2.1 为此还写了几千行的 .d 文件。
    qgy18
        11
    qgy18  
       2016-01-15 00:29:48 +08:00 via iPhone
    @sodatea 赞!明天试试。
    arden
        12
    arden  
       2016-01-15 14:00:14 +08:00
    typescript 还有这么多问题?
    kisnows
        13
    kisnows  
       2016-01-15 14:43:50 +08:00
    支持一下,
    最近也在打算转 typescript 了
    welefen
        14
    welefen  
    OP
       2016-01-15 16:02:26 +08:00
    @secondwtq 链接应该都是正常的啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     933 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:53 PVG 05:53 LAX 13:53 JFK 16:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86