最近考虑用node.js来做前端(与更深的业务逻辑分离),大家说说可行么?

2013-09-02 15:11:41 +08:00
 qdwang
本来项目还不是很大,用的是.net做的。

现在项目内容越来越庞大,感觉.net在实现一些比较新的前端技术方面稍许欠缺(比如websocket,node有一站式服务的socket.io,.net版本好像许久不更新了)。

node感觉比较接地气,模板拼接也能做到与前端一致,灵活性比较强大。node也能在linux下更好的与其他更适合linux环境的程序协同工作。

.net部分还是需要的,因为数据库是sql server的,已经无法更改,一些复杂的逻辑操作用.net也比较放心。.net部分只负责核心算法和逻辑处理。

所以设想是否用 数据库 - .net - node - browser 的模式,也可以更好做到各个层次解耦。

在效率方面,缓存由node操控,能命中,则不用经过.net部分,也可以充分发挥node的IO优势了。

大家来讨论看看,这方案会有什么问题么?
4070 次点击
所在节点    程序员
20 条回复
judasnow
2013-09-02 15:24:44 +08:00
我今年4,5月份的时候 在一个遗留系统上(原本只是一个普通的网站,也是.net)实现配套 移动app(html5 app)的时候就使用的这种架构,原因和你的差不多。

PS:具体我是这样做的:先在原先的 .net 系统上实现所需要的 web api ,再用 nodejs 调用之,前端就是一个打包的 html 加一些脚本。目前工作良好。:-)
qdwang
2013-09-02 15:24:51 +08:00
还有一个好处是,开发人员分成了,算法人员和前端,本质上不需要后端这个职位了。

招聘的时候多招一些前端,就能满足大部分开发要求,灵活性也比较高,可以随时调度用于需要的模块部分。
yushiro
2013-09-02 15:25:27 +08:00
我的建议, 在没有一定量的nodejs小项目试水,获取一些开发经验之前, 不要轻易把大项目迁移上去。
前几天刚用node.js+mongodb+express做了一个爬虫,然后用瀑布流方式看爬来的照片。开发过程中,觉得各种不满意, 虽然最终是达到了初始的开发目的, 但是有不少不确定的地方,比如是否有内存泄露等。
qdwang
2013-09-02 15:29:30 +08:00
@judasnow 谢谢有实际的例子,有一个需要考虑的问题是,这样做在效率上是否降低了。

我做过一个测试,就是用node包一层来反向代理.net,用的就是纯粹的http请求,效率下降了大概20%差不多。

是否让.net变成一个类似数据库的连接池,让node与.net保持长连接,这样会效率比较高一点?
qdwang
2013-09-02 15:35:09 +08:00
@yushiro 各种不满意,具体是指哪些呢?是用js开发不顺手,还是碰到一些技术上的问题,费了一番时间才得以解决?如果是的话,是什么技术问题呢?

内存泄露这样的不确定性问题,无论用哪个平台来开发都没办法避免,也的确是你说的,熟悉程度的问题,我会考虑的,谢谢。
judasnow
2013-09-02 15:45:56 +08:00
@qdwang 你说的“连接池”我也考虑过,我开始想的是用一个 websocket 连接,或者自己实现一个 rpc 但是我后来发现加上缓存之后(思路和你一样,只是写的时候访问 .net 的 api )性能还是可以接受的 暂时就没有深入实现了。:-)
judasnow
2013-09-02 15:47:54 +08:00
@yushiro 我也想知道您不满意的地方,我觉得只要习惯了异步之后,node 做 web service 还是很不错的。:-)
yushiro
2013-09-02 15:49:05 +08:00
@qdwang 一个是开发方式的改变, nodejs里面基本都是用callback的, 比如检查数据库中某ID是否存在, 然后走不同的逻辑, 在C#里面是同步的写法,nodejs里面就要用callback, 而且还要传后续需要的参数。
如果遇到循环调用callback, 并且需要传入不同的callback参数, 那又要牵扯到闭包。
如果你对js非常熟悉, 平时天天写原生JS代码的话,那这些问题几乎都可以忽略不计。
yushiro
2013-09-02 15:49:57 +08:00
@judasnow 我说的不满意, 其实就是担心程序的稳定性, 因为写一个可以运行的程序不难, 难的是可以稳定运行的程序。
qdwang
2013-09-02 15:55:11 +08:00
@judasnow 恩恩,看来我们想法差不多哈哈。 顺便想起来还有个好处,好多代码都可以共用,特别是一些helper代码。
qdwang
2013-09-02 15:57:21 +08:00
@yushiro :)我是前端出身的,应该不算什么问题~

不过稳定性确实是个问题,js太灵活了,要保持稳定的话,是不是应该多加一些测试,但是我对测试不是很熟悉,这点确实比较麻烦。
jjx
2013-09-02 16:26:54 +08:00
1. 多线程vs 多进程
2. 同步 vs 异步
3. callback和内存占用。其实闭包的一些问题c#也有, 从orm为主到sql 为主的转变
4. 第三方包对windows支援程度
5. 怎样分发? iisnode,iis 转发? 等等
min
2013-09-02 16:32:59 +08:00
asp.net 也可以弄出json来啊,这个没有node.js方便吗
icyflash
2013-09-02 16:34:02 +08:00
1楼的建议很好

另node.js有socket.io, asp.net有SignalR
qdwang
2013-09-02 17:29:57 +08:00
@min 不是简单的json问题
qdwang
2013-09-02 17:30:14 +08:00
@icyflash 感谢提醒,记下SignalR了
qdwang
2013-09-02 17:32:13 +08:00
@jjx 是的,就是有这么些问题才发帖子,不过当.net去除web服务后,本质上就是一个service了,和数据库捆绑在一起,形成一个“功能增强型数据库”。
qdwang
2013-09-02 17:37:31 +08:00
@min 除了有上面jjx说的这些问题,node的另一个优势主要是,很多代码段,前后端可以共用。

比如验证,你不用先用c#写一遍,再js写一遍。架构设计好的话,非常省事。

又比如,模板生成,前后端几乎可以是一样的代码。这样在检测浏览器版本比较现代的时候,可以让浏览器来拼接模板,浏览器性能比较差的情况(比如ie67,或手机端),可以让node来拼接,而这一切不用写第二遍模板代码,却减少了服务器模板生成开支。
aaronlam
2020-12-17 17:12:06 +08:00
不知道后面这个系统运行的怎么样,我也考虑想集成 Node.js 到现有 .NET 的项目里,想了解一下,感谢!
qdwang
2020-12-17 18:22:35 +08:00
@aaronlam 已经 7 年多了……项目黄了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/81057

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX