看到协同工具Worktile 说用node和angularjs(差不多全站逻辑都是由JS来控制)实现.
这样的网站架构具体是什么样子的? 什么优缺点?
后补:
Worktile CTO TerryLee 的文章: 团队协作工具Worktile技术架构揭秘
讲的比较详细
看到协同工具Worktile 说用node和angularjs(差不多全站逻辑都是由JS来控制)实现.
这样的网站架构具体是什么样子的? 什么优缺点?
后补:
Worktile CTO TerryLee 的文章: 团队协作工具Worktile技术架构揭秘
讲的比较详细
看回复才知道 SEO 和 刷新 都有了解决方案,表示孤陋寡闻了。
不太认同其他两位的观点
优点:
缺点:
不是太了解Angular,但是和它同名的Ember.js是这样的,它可以说是一个在前端的web框架,包含了router,model,controller,view/template这些。
我正好跟他们的人见过,还聊过,可以谈谈我的见解。
架构:
前端:angularjs,他们的前端是angularjs写的,更偏向于webApp的方式,单页面应用。
服务端:nodejs,express框架,既然是用express框架。根据框架来看,我估计不是完全的前后端分离,应该还是首页用node渲染出来的。
数据库: mongodb,其实这个你也可以认为是一个大的json文件,所以才说(差不多全站逻辑都是由JS来控制)。
优缺点
对于1楼说的优点都认同,缺点,现在看来SEO基本不成问题,F5感觉也优化了体验。
但是对于用了angularjs之后,ie的体验一直不是太好,特别是低版本。
还有一个对于mongodb 在数据量大了之后的一个疑问。
3 回答1.3k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
4 回答633 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
2 回答950 阅读✓ 已解决
2 回答1.5k 阅读
1 回答1.2k 阅读✓ 已解决
昨晚看到这个问题,准备今天早上来回答一下,没想到都有这么多回答了,其实大家说的关于技术上的优缺点都是正确的。作为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及以下版本支持都不是很友好,甚至惨不忍睹,由于时间和精力有限,没法做很多兼容,但是我们相信,为了使用更好的产品,用户愿意为我们升级浏览器,呵呵。
至于其他的,我就不多说了,欢迎大家对某些具体技术和细节进行交流。