V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
welefen
V2EX  ›  Node.js

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

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

    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   ·   实用小工具   ·   2625 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 11:28 · PVG 19:28 · LAX 03:28 · JFK 06:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.