由于本文篇幅较长,会分割成几个部分来讲解, 包括,前言&概述,多语言,缓存,部署,补充&总结 等 本文将不限于 sails.js 范围,会远远超出语言层面,上升并涉及到应用架构层面 有用之处则取之,无用之处则舍之,存疑之处则论之,有误之处则请指正之
前言
自14年入职 DJI 大疆创新 以来,官网的开发一直是Ruby,前后端结合紧密,后来虽然经过一轮前后端分离,但是,我们这些前端,也不得不兼职部分rubu开发。一开始都是拒绝的,后来还是干了,原因如下,1、箭在弦上不得不发,2、必须先要熟悉业务,3、感受一下ruby这门易用的语言。以前看过,松本行弘的《代码的未来》,其对编程语言的独特理解,确实令我想去实际的感受一下。搞笑的是,有两个前端哥们最后居然变成了ruby工程师,赤裸裸的背叛。
当然,这也非长久之计,前端的主要能力毕竟不是写ruby,一刚入职的华为的哥们,一听MD前端还要写ruby,搭了一天环境后,第二天,就提离职了。同学们都说,是因为我中午没请他吃饭,呵呵。
这中间的故事很长,不再细说…终于,15年的某天,我们决定要实现前后端彻底的分离了,后台不在使用ruby,一位百度来的前辈要使用php为基础,使用TMS系统生成静态页面,我是表示反对的,一旦这样搞,前端不是又要兼职搞点php,我还不如继续使用ruby呢。后面,经过,一段时间的实践和讨论,大部分还是觉得应当使用 nodeJS 来搞这个事情。降低,学习已及维护成本。
使用nodeJS,也不是说使用就可以使用, 如果,纯粹是前端来用这个东西,整个思维都是要进行极大调整,它更加偏向后端思维的。
1、项目本身是否符合node的特性? node的基本特性是支持高并发,高IO,适用于,非密集运算项目。DJI官网,主要以展示为主,较少涉及数据存储,不涉及复杂计算。一旦,发布新品,我们面对的是数倍于平时的流量,同时,在高并发状态下,其主要瓶颈集中于静态文件及缓存读写。从这些特点来看,与node本身所具有的能力特性是十分匹配的。
2、是否具备相当的后端开发经验和能力?
DJI官网团队,当时,进行项目开发的6-7个人全部是前端,直到现在,仍然以前端为主。具备,后端开发经验的基本只有我,大学前3年基本把光阴耗在了.net的三层架构上。后来,写得有点烦了,再看发展态势,最终毕业选择了前端。当然,这种经验对这个项目来说无疑是有很大作用的。自然,后台,底层数据调用封装就是我的工作了。
3、是否具备服务器的运维经验? 这个经验,有但是并不丰富,大学创业的时候,维护过自己的服务器。但是,这方面有ruby同事和运维的同事来补足,15年后半年,自己觉得长进最大的就是运维水平了。
概述
— 、备选框架 node 框架非常多,我们进过初步筛选后,选定了以下几个框架,进一步对比 Express, Koa,Locomotive,Hapi, Strongloop,Sails
这些框架的详细资料很容易搜到,这里为便于对比,只作简单介绍: 1、Express 是TJ的作品,一个灵活轻巧的框架,易于学习,生态丰富,使用广泛。在几年前,他几乎是node的首选框架。目前,作者本人已不再维护,交由strongloop公司维护,同时,随着其它强大框架的不断涌现,我们有了更丰富的选择。
2 、Sails,它是一个基于大名鼎鼎的Ruby中的Rails思想,建立起来的MVC框架,集成了express,soketIO,等流行框架,拥有完备的web应用结构,包括数据库,接口,路由,模板,安全,以及很好的实时交互特性(本项目中较少用到)。多数人,第一眼都会觉得,它是个牛逼的实时框架,但是,其实它的核心是一个强大而完备的WEB框架。
3、KOA,最大的特点是cool。本身极其轻小,支持同步风格的代码编写,有效的解决了,JS编程,尤其是node中长期存在的回调嵌套问题,深受广大劳动人民的喜爱。(在我们最新的项目中会使用到,后续会有文章介绍)
4、Strongloop公司也有自己的一套node框架,号称为企业级API框架,如果,是以数据服务为核心的应用可以考虑使用,从开发,部署,监控,它都拥有一套完善的服务体系,但是,应用尚不十分广泛,而且,这种一体化的东西,看上去开发简单,但其中的限制自然少不了的。
5、Locomotive, 是一个小巧但是强大的MVC框架,它基于express,支持restful。但有个致命的缺点,不论自身的,还是外部的能够找到的文档都非常少,解决问题,基本靠阅读源码。
6、Hapi,的基本理念是“配置优于编码”,不太喜欢这种编码风格,但是,这些约定,便于代码风格的统一,尤其适合多人合作的大型且复杂的项目。
在对比和试用了这些框架后,最终选择了sails,有几个原因,1,它是一个架构完善且功能强大的MVC框架,基本能涵盖我们项目中需要的东西。 2,github的人气很高,自身的文档还算可以,也有不少问答。express作为其Web的核心部分,遇到相关问题也好解决。3,历史原因,团队成员对Ruby Rails的编程风格比较熟悉,认可。
二 框架的选择 1、符合项目的实际需求 现有架构所面对的最大问题是什么? 自己以及团队是否有足够的能力驾驭,有没有人使用过? 产品的性质如何(内部使用,展示为主,或者存储为主)? 需要或者可能面对的用户量级?
2、生态完善程度 在git上的排名如何,star多少?fork多少? 是否在持续的更新? 有多少公司在企业级的使用和实践,所选框架? 文档是否完备,问答论坛有多少相关问答? 能不能,通过阅读源码来解决,特定问题?
3、易用性,学习成本 与自己和团队现有的技术能力和结构,有合适的匹配度,降低学习成本 框架的架构清晰,封装得当 开发时,代码看上去,写起来都觉得自然而丝滑
4,完备程度与可扩展性 框架除了特点突出,是否对常见的功能模块有集成,或者预留接口? 如果需要,对框架进行必要改造的成本如何? 能否,比较容易的集成团队已有的功能及业务模块?
本章节,主要叙述一下前因,以及一些基本原则,下一节会开始实际内容的讲解: sails js 在 DJI 官网的应用(二)—— 多语言
DJI 官网团队持续招人中 ,欢迎NB的前端/全栈工程师们,加入我们一起奋斗,打造一流的技术团队, 来吧朋友,国内绝对一流的工资、福利,甚至期权,等你来拿,简历可发送至 fei.pan@dji.com
其它方面不作评述,但是这里提到了前后端分离,看上去楼主还是喝了地沟油了,并且感觉味道还不错。 前后端分离以及什么Web研发模式的演变之类的基本是阿里巴巴几个所谓的技术牛人的地沟油。 参见我在 https://github.com/lifesinger/blog/issues/184 上的评论。 但是影响却很大,目前有超过DIV+CSS的涂毒的趋势。 所谓的前后端分离是基于一个错误的对前后端的认识。 所以凡是提前后端分离的人根本也不知道何为前端,何为后端,从而也不知道为何而分离。 这些人要么是被误导,要么是缺少自己的思考。 当然最重要的还是概念不清,否则也不可能被误导。
@calidion 不知阁下为何对前后端分离,如此敏感? 前后端分离,是在团队的生产力增长的基础上,自然产生的一种新的生产关系而已。 更多的不是形式,而是职能的分离与互补。我们的目的是通过调整生产关系来提升生产力,降低系统,团队间的耦合度 实践证明,它确实带来了团队效率和生产力的提升,又何必纠结于这个概念对错与否呢? 如果,阁下有更 NB 的概念或者方式能够提升我们的生产力,我们当然很愿意一试了
小孩才分对错,公司只看成果
看来你的程序都是在错误中执行的? 没有对错那来的计算? 计算是不分对错执行的? 笑死了。难怪华为的人走了。 一看就是一个大忽悠。
神棍都是包治百病的,并且很多被医过的人都认为神棍的治疗方式是有效的。
@calidion 首先,华为的人走了,跟我的个人品质,没有半毛钱关系,你随随便便的把脏水往别人身上泼,看来也不是什么优质好油吧? 其次,我的对错是指概念的对错,阁下何必以偏概全呢。我有一个 “宇宙混沌” 理论,非常正确,可以谓之对,但是与公司而言,不能 带来半毛钱的生产力,效率的提升,有何意义呢,是对是错呢?
再次,我是不是忽悠?看成果就知道了,设定美好的愿景并切实的完成之,这个愿景,是忽悠?
我对前端分离(允许我提一下这个词)的几点认识: 1,职能分割,将完全由后端完成的任务,分拆开来,由各个更专业的小组来负责,降低依赖和约束,这是解放生产力 2,代码层面进行分拆,提升系统可维护性,稳定性,干自己专业,擅长的事,华为的那哥们还会被ruby吓跑吗?
最后,我觉得干打嘴仗,没什么实际意义,还是那句话,如果阁下有好油,我真诚的愿意喝一喝,我也好给领导们喝喝 光谈问题,不谈解决方案,在我司是要被开除的,见谅
@felling 既然不是小孩就不要分对错了。 你的宇宙理论非常正确,是小孩子要分的事情,既然你不是小孩子如何分得出来呢? 连基本的逻辑都没有人,通常我是不想浪费时间的。
说我泼脏水之前好好反思下自己,我提出要区分正确,没想到你来个小孩子才区分正确。 一方面反映了你逻辑有问题,另一方面说明你的说话有明显的歧视。 小孩子智商比你高的人也是有的,你有什么资格看不起小孩子?
所以我不想跟一个没有逻辑的人多讲,我也不相信一个没有逻辑的人能做出来什么有价值的成果。 多做事,多提解决方案也许是没有错的,但是由于你是不分对错的人。别人提不提解决方案有影响吗?
一个分不出来对错的人能提出来什么好的方案? 笑死,所以就你的逻辑,我只能闭嘴,我宁可跟一个有逻辑的小孩子交流。
以宣传不分对错为荣的人,估计是没有多少社会是这样的了。 所以喝点地沟油一点不奇怪。
@calidion 主要问题避而不答,而去纠结什么对错论,自己逻辑感觉还特别好 刚才在去看电影路上想到了邓爷爷的一句话,很好做结
实践是检验真理的唯一标准,这就是你想要的对错吧?
???????
楼上怎么突然。。。
进步来自于概念的明确与多义性的消除。估计这个你也是不会懂的。 如果概念错了,那么所有的基于它之上的所有东西都是错的。 人类的进步不是靠想当然,不分对错达成的。 而是经过几千年对错的思考与验证形成的。 我讨论对错并非针对某些人,而是针对视而不见,允许错误传播的现象。 而你爱如何理解,我还真不关心,我没有义务教任何人什么是正确的,我也不代表正确。 但是我会尝试指出一些东西是错误,让更多的人去思考什么是对,什么是错。 从而更好做出判断,让错误的传播减少点。
但是我无法拯救那些智商有问题的人,因为这个社会总需要有傻子来满足骗子。 并且真正的学问通常是更加难于传播的。
@calidion 思路广,欢乐多
@olin2011
追求正确并不限制思路,而思路多则不能脱离了正确。
欢乐是私人的,并不能共享。
但我希望每个人都能快乐的享受思考的乐趣。