查看原文
其他

访谈 | ThinkJS作者李成银:择善而从之,笃行致远

图灵社区 2020-10-29

李成银
奇虎360前端技术专家,
作者,开发了Chrome扩展版的Fiddler,以支持模板语法处理的Fl,等等。目前参与开发的一个项目是燕尾服,借助多进程和Ast/Token大幅提高现在前端工作流的编译性能,项目地址为:https://github.com/stcjs/stc。




非常有幸邀请到李成银老师,进行一期图灵专访。


关于 ThinkJS


什么原因促使你开发了ThinkJS框架?


提到ThinkJS,可能有些人会想到,ThinkJS 是不是和国内的PHP框架ThinkPHP有一些关系呢。没错,刚开始ThinkJS就是借鉴ThinkPHP来开发的。到2013年下半年的时候,Node.js框架主要还是Express,但用Callback处理异步的方式让人非常头疼。一种比较好的方案就是用Promise,所以我慢慢就有了借鉴ThinkPHP,使用Promise机制开发一个Node.js框架的想法。


随着项目复杂度的提升,ThinkJS、Promise也暴露出一些弊端,例如不能很好的跳过一些中间环节和数据传递。我想到借助Babel编译提前使用ES2015规范和React的新特性。对于异步处理方式,我也有了更好的方式——Generator Function或者Async Function。


2015年3月,我们完成了ThinkJS全新版本的设计,目标定位为能够在项目里直接使用Es2015+特性开发,框架自动编译及更新,大大方便Node.js项目的开发;同时优化1.0版本当中不合理的架构和设计,脱离对ThinkPHP的依赖。2015年10月30日我们终于成功发布了2.0版本,而这天也是Babel发布6.0的日子!


据说 ThinkJS不止局限于你们开发团队的内部,外部越来越多的人员也开始使用。当初开发ThinkJS框架的时候,有没有预想到它会如此成功?


ThinkJS其实还算不上成功,到目前为止GitHub上的star数也才1700,社区也不是太活跃。不过,现在确实有越来越多的公司在使用ThinkJS开发项目,有PV超过千万的项目,也有一些秒杀的项目。


最近上线的ThinkJS 2.2在功能和性能上有哪些改进?


2.2版本主要支持将错误定位到源文件和支持断点调试的功能。因为开发的时候使用了ES6+的语法,然后使用Babel编译,如果程序报错,输出的错误信息会是编译后的代码,这给调试带来很大的麻烦,同时断点调试只能调试编译后的代码,这对开发又是非常不利的。所以2.2版本致力于将报错定位到源代码,并且基于源文件进行断点调试。


性能方面的改进是从2.1版本就开始的。虽然ThinkJS面向企业级应用,封装了很多基础的功能,但性能上却并不亚于express/koa这些轻便级的框架。而对于同样面向企业级的Sails.js框架,ThinkJS的性能是它的4倍。所以说ThinkJS的性能是非常卓越的。具体的性能测试数据可以见https://thinkjs.org/zh-cn/doc/index.html#toc-9c0


当然在真实的项目中,框架损耗的性能占比非常小,不用太过关注,只要框架本身没有内存泄露等问题都是可以接受的。


我们知道ThinkJS相对于其他的Node.js框架来说,更适合企业级的大型项目。目前,奇虎360公司的哪些项目正在使用ThinkJS框架?


目前,360内部的很多项目都是使用ThinkJS开发的,如线上项目“爆米兔” https://www.baomitu.com/ 以及其他一些商业级的项目,如 http://shangyi.360.cn/


ThinkJS的成功带给你怎样的体验?或者说,该框架的成功开发对你的生活带来哪些变化?


虽然ThinkJS现在还不算太成功,未来的路也还很长,不过在开发ThinkJS过程中确实有很多的感受。


  1. 作为开源项目,除了开发本身的框架代码外,还要写丰富的测试用例。ThinkJS现在的测试用例有1700多个,单元测试的代码比框架本身的代码要多得多,每次改动都要确保测试无误。对于一些接口变动也不能随意,需要考虑向后兼容等各种情况。同时,还要写各种使用文档,项目示例,等等。

  2. 需要花很多的时间处理QQ群/社区里提的各种问题。经常有人问安装问题、环境问题、简单的使用问题,刚开始的时候,我要亲自逐一进行回答,不过现在社区慢慢成形了,简单的问题会有成员帮忙回答,节省了我很多时间。

  3. 相对于国内开发者索取为主,国外开发者更愿意积极贡献。awesome-* 项目发pr,让其添加ThinkJS,也会主动修改文档中的一些拼写错误,然后发pr。更好玩的是,有个老外觉得ThinkJS的官网不太好看,就亲自设计了一个新的https://github.com/75team/www.thinkjs.org/pull/60。虽然我们最终没有采纳老外设计的这个网站,但他的贡献精神真的非常赞。这也让我们有了优化官网的想法。


ThinkJS未来的规划是怎么样的?


ThinkJS内置了很多功能,这加大了框架本身的代码量,也增加了学习的成本。我们计划在未来的版本中精简核心,将一些功能剥离出来,以插件的方式存在。同时,加强框架周边的建设,为企业级项目开发更好地保驾护航。


关于团队


360前端团队“奇舞团”是怎样的一个工作团队?团队合作带给你怎样的生活体验和专业提升?


“奇舞团”是360最大的前端团队,支持公司的很多业务。开放的团队鼓励每个人利用业余时间开发各种工具、平台,提高团队的开发效率。


团队非常注重技术培养,每周都有技术分享会,覆盖新技术学习和使用、项目经验和总结、算法优化等各个方面。不光奇舞团的同学可以参加,公司其他部门的前端同学也可以参加。我们还会邀请外面的一些团队来公司交流分享,让每一位同学都能快速成长。


对外方面,奇舞团每周都会发布《奇舞周刊》,方便团队以外的同学持续学习前端知识。


“众成翻译”是360前端推出的一款在线翻译平台。该平台是否适用于出版行业的引进版图书翻译工作?如果适合,这对外版书的翻译工作会产生哪些积极作用?


“众成翻译”1.0是“奇舞团”在2016年5月10日发布的,这个项目由老师负责,使用最新的ThinkJS 2.0开发。发布两个月来,已经翻译文章200多篇,字数超过了50万字。“众成翻译”当前的主要功能是推荐和翻译技术文章,核心是为译者提供便捷的翻译辅助,提高翻译效率和质量。目前项目正在围绕译者翻译体验的提升和优质内容的展示做功能优化。比如正在开发的翻译问答功能,就是为译者在翻译过程中向翻译高手求助牵线搭桥的。从社区形态来看,这个功能上线后将可能成为国内第一个以技术翻译为主的问答社区,成为有助于广大翻译爱好者快速学习、锻炼和成长的一个翻译知识共享社区。由于“众成翻译”目前只支持文章的翻译,所以在上面翻译图书会有些局限,必须手工把内容拆分然后再合成。“众成翻译”未来有可能考虑协作翻译和引进版图书翻译的功能,为专业的翻译、出版机构和译者提供一个可选的第三方工作平台。希望到时候能够依托已有的译者队伍,为更专业的翻译工作提供有力的支持。


关于前端设计


一个好的前端工作者,应具备哪些特质。


我认为一个好的前端工程师,最基本的就是要做事靠谱。而做事靠谱,不光需要技术能力,还需要沟通能力、责任心和执行力等各个方面的软素质。具体工作中,技术能力可能只占了40%,软素质方面的能力却高达60%。工作中,你很经常看到技术能力一般但能把事情做好的同学,也会见到技术能力很强,但把事情做砸的同学!


你认为,未来新的ES标准将在哪些特征上做进一步的改进。


JavaScript这几年在语法糖和API上有了很大的改进,尤其是ES2015标准之后,每年都会发布一个新版本。这得意于前端行业的迅猛发展,前端技术已经不再局限于浏览器端,它发展到了Wed服务端、手机端,甚至用JavaScript做一些硬件接口的开发和游戏的开发。


至于未来如何改进不太好说,不过我比较看好下面几点:


1. 语法改进:借鉴其他语言当中一些比较好的特性,让开发大型项目更加便利,如class相关。


2. 异步处理:虽然async/await还没正式发布,不过状态已经是stage-3,明年可以如期发布,这样JavaScript在异步处理上将有质的改变。另外Asynchronous Iterators提案,可以在iterators里直接处理异步的情况。


3. 大数据处理:随着大数据处理越来越热门,很多项目都要在前端进行大数据处理和展现。SIMD.JS提案可以大大提升JavaScript在大数据处理方面的性能。


再次感谢您参与本次的访谈!




对话知名作译者,品味精彩技术人生


微信公众号:ituring_interview


长按二维码识别关注我们!


你听得见他们,他们也听得见你!



参加访谈问题有奖征集,图灵赠送电子书

阅读原文了解查看 图灵社区 更多详情



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存