• 请不要在回答技术问题时复制粘贴 AI 生成的内容
qdwang
V2EX  ›  程序员

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

  •  
  •   qdwang · Sep 2, 2013 · 4647 views
    This topic created in 4724 days ago, the information mentioned may be changed or developed.
    本来项目还不是很大,用的是.net做的。

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

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

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

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

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

    大家来讨论看看,这方案会有什么问题么?
    20 replies    2020-12-17 18:22:35 +08:00
    judasnow
        1
    judasnow  
       Sep 2, 2013   ❤️ 1
    我今年4,5月份的时候 在一个遗留系统上(原本只是一个普通的网站,也是.net)实现配套 移动app(html5 app)的时候就使用的这种架构,原因和你的差不多。

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

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

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

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

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

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

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

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

    又比如,模板生成,前后端几乎可以是一样的代码。这样在检测浏览器版本比较现代的时候,可以让浏览器来拼接模板,浏览器性能比较差的情况(比如ie67,或手机端),可以让node来拼接,而这一切不用写第二遍模板代码,却减少了服务器模板生成开支。
    aaronlam
        19
    aaronlam  
       Dec 17, 2020
    不知道后面这个系统运行的怎么样,我也考虑想集成 Node.js 到现有 .NET 的项目里,想了解一下,感谢!
    qdwang
        20
    qdwang  
    OP
       Dec 17, 2020 via iPhone
    @aaronlam 已经 7 年多了……项目黄了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3748 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 00:54 · PVG 08:54 · LAX 17:54 · JFK 20:54
    ♥ Do have faith in what you're doing.