node.js - 协同工具Worktile 全站都是用的JS实现,具体是什么样的架构?
怪我咯
怪我咯 2017-04-17 11:16:00
0
5
224

看到协同工具Worktile 说用node和angularjs(差不多全站逻辑都是由JS来控制)实现.
这样的网站架构具体是什么样子的? 什么优缺点?

后补:
Worktile CTO TerryLee 的文章: 团队协作工具Worktile技术架构揭秘
讲的比较详细

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(5)
巴扎黑

昨晚看到这个问题,准备今天早上来回答一下,没想到都有这么多回答了,其实大家说的关于技术上的优缺点都是正确的。作为Worktile的技术人员,我大概介绍下为什么采用这些技术和一些优缺点吧!

Worktile之所以服务端选择用NodeJS,并不是一味的追求前后端统一,恰好是这些技术非常符合我们的产品,并且我们的团队能够很好的把握这些技术。全站JS,虽然都是用javascript语言,但是前端和后端需要考虑的东西和实现的业务是完全不一样的。当然也是可以把前端的JS用NodeJS的方式编写,然后通过 Browserify 去编译成前端的JS,这样就真正的达到了前后端代码完全统一了,我们并没有这么做,虽然我们的工程师基本上都是前后端通吃类型的,但是我们还是严格按照前后端分离进行组织开发的。负责后端的在一段时间内基本上也只做后端,负责前端的基本上不允许改服务端的代码(当然我们足够开放,团队成员可以申请职责调换),所以我们也就没有必要把前端的代码用NodeJS的方式编写了,不可否认这种方式的确很不错。

为了追求更好的用户体验,Worktile 整体架构基本上服务端只提供RESTfull的API,前端实现了SPA(单页程序)。具体的服务端使用的技术有: NodeJS、Express、Mongoose、Mongodb,前端主要是AngularJS + 一大堆前端JS库组成(其中也有很多我们自己封装的类库)。好玩的是在我们的产品上线之后,发现了还有一个叫MEAN(http://mean.io/)架构的东西。正好和我们采用的技术是相同的。

下面简单的说下采用这个架构的优缺点吧!其实间接的也就是谈谈NodeJS和AngularJS的优缺点了。

NodeJS 优点:
1. 我们选择 NodeJS,是因为它简单,高性能,正好我们的服务端只提供RESTfull API,Worktile 业务并不是特别复杂,而且我们都很喜欢NodeJS,所以也就使用它了,当然如果选择其他技术也可以做的很好;
2. 至于数据库,和NodeJS完美结合的当然是Mongodb,数据格式都是完全匹配,而且Mongodb的性能也是很不错的,楼上有人对于 Mongodb 数据量大了有些疑问,我们现在的数据量已经很大了,表示暂时还没有遇到过瓶颈,但是Mongodb也很好的提供了数据库集群,我们随时都在为今后做准备;

NodeJS 缺点:
1. 遭遇很多人吐槽甚至放弃使用的肯定是异步回调,到处callback让人受不了,其实可以使用一些同步的Module来弥补这个缺陷,如:async、 when,但是我们没有使用,是因为Worktile的业务不是特别复杂,如果有个别复杂的场景我们会拆分成很多方法,所以看不到很多callback的代码;
-----感谢 @shaunxu 提醒,更正于 2014-7-30:其实Worktile其他的一些service是使用了同步的module的,Worktile整个系统的架构如果细细讨论还有很多,我所回答的仅仅针对于 web 和 web API。
2. 事务的支持不是特别好,正好这个功能对于我们产品来说不是很重要。
更多的优缺点可以参考下:使用 Node.js 的优势和劣势都有哪些?

AngularJS的优点:
1. 我觉得是目前为止最好的前端MVC或者MVVM框架,基本上包含了所有我们需要的功能;
2. 更多细节我之前在知乎上回答过,我就不重复了,参考:AngularJS 有没有缺点?MVVM 框架中有比它更好的吗?

AngularJS的缺点:
1. 楼上有人说SEO,的确这是一个缺点,这是所有前端MVC框架的缺点,但是也有解决方案,如:prerender,Worktile没有使用,我们把外部需要SEO的页面都独立成一个站点了,这个独立的站点使用Express的服务端进行渲染的,而且这些页面也都是展示文字的,没有必要用到SPA;
2. 兼容性也是个缺点,我们目前对IE9及以下版本支持都不是很友好,甚至惨不忍睹,由于时间和精力有限,没法做很多兼容,但是我们相信,为了使用更好的产品,用户愿意为我们升级浏览器,呵呵。

至于其他的,我就不多说了,欢迎大家对某些具体技术和细节进行交流。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!