V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rophie123
V2EX  ›  Node.js

nodejs 前后端一把梭的优势在哪?

  •  1
     
  •   rophie123 · 2021-12-16 00:29:43 +08:00 · 15989 次点击
    这是一个创建于 1074 天前的主题,其中的信息可能已经有所发展或是发生改变。

    相比 js+php ,语言都熟悉的前提下,出活快,js 一把梭的优势在哪?真有那么多复用的代码吗?

    第 1 条附言  ·  2021-12-16 07:37:05 +08:00
    补充一下,说的就是前后端分离,一个人全栈接活,目前用的是 vue+php ,如果后端换 node 会不会有更大优势
    76 条回复    2022-02-20 12:47:06 +08:00
    ipwx
        1
    ipwx  
       2021-12-16 00:40:13 +08:00
    1. vue.js + webpack 配合其他语言不是难事,比如我经常配合 python 。
    2. vue.js 就是比 html bootstrap jquery 好写啊。。。
    seki
        2
    seki  
       2021-12-16 00:45:09 +08:00   ❤️ 1
    优势在于不用学第二门语言。
    除此之外复用代码也是一种可能性
    golangLover
        3
    golangLover  
       2021-12-16 00:45:55 +08:00   ❤️ 1
    不用聘请第二个人
    dcoder
        4
    dcoder  
       2021-12-16 00:52:52 +08:00   ❤️ 2
    适合业余"full-stack engineer"直接做出产品原型
    ob
        5
    ob  
       2021-12-16 01:12:12 +08:00
    @ipwx 请教下,vue 的界面布局有没有比 bootstrap 更好用的方式?目前只比较熟悉 bootstrap 那套。
    DOLLOR
        6
    DOLLOR  
       2021-12-16 01:16:22 +08:00   ❤️ 3
    曾经跟 node+typescript 的后端对接过接口,前后端可以共用 interface 、type ,沟通成本比其他语言低很多。
    BealuoC
        7
    BealuoC  
       2021-12-16 01:39:03 +08:00
    @ob tailwindcss
    yyfearth
        8
    yyfearth  
       2021-12-16 02:30:09 +08:00
    可以复用 数据层的代码 校验代码

    另外要考虑到前端需要 build 脚本 一般都是 nodejs 比如 webpack
    后段需要运维脚本 一般用 python 和 shell 的多
    然后数据库要用到 sql
    这么一来开发一个功能你就需要 full stack 的话 需要用到 js php python shell sql 多个语言 而且可能还需要共享数据结构和部分逻辑
    那么当然用 JS 一把嗦比较爽了 vue/react+webpack+node+mongo
    但是前提就是 full stack 一个人从前到后
    而且 nodejs 性能在脚本语言里面不错的

    如果前后端分工 就无所谓了 这种我见过纯后端用 Java 比较多
    yyfearth
        9
    yyfearth  
       2021-12-16 02:31:15 +08:00   ❤️ 1
    @ob vue 和 react 都可以继续用 bootstrap 呀 并不冲突
    react 有 react-bootstrap 和 reactstrap
    vue 也有类似的
    style 和 layout 和用 jquery 的 bootstrap 没啥区别
    caisanli
        10
    caisanli  
       2021-12-16 08:03:30 +08:00 via iPhone
    @DOLLOR 怎么共用呢?前后端代码写到一个项目里吗?
    dayeye2006199
        11
    dayeye2006199  
       2021-12-16 08:14:14 +08:00
    优势是方便只会 JS 的人干活
    gzf6
        12
    gzf6  
       2021-12-16 08:32:50 +08:00 via Android   ❤️ 1
    这种情况 ng + nestjs 的 monorepo 项目代码复用率会高一些
    mirage13
        13
    mirage13  
       2021-12-16 08:37:23 +08:00
    优势就是 前后端一把梭
    banliyaya
        14
    banliyaya  
       2021-12-16 08:55:16 +08:00   ❤️ 2
    @ob 可以试试 tailwind css 个人认为比 bootstrap 好用
    murmur
        15
    murmur  
       2021-12-16 08:56:16 +08:00
    你都会抢答了,前端后端一个人全干
    yuyue001
        16
    yuyue001  
       2021-12-16 09:10:10 +08:00   ❤️ 7
    version
        17
    version  
       2021-12-16 09:10:44 +08:00
    如果熟练起来.没啥区别吧.现在我都是 mongodb 的开发模式.crud 全部前端传参数就好.别搞那么多 mvc 框架.浪费开发时间.性能也差.只用 koa 或者 express
    优势应该是有些数据可以 vue 状态机来处理数据聚合洗和转数据。。到后期稳定可以般到服务器来处理。安全些
    如果有接口性能要求的活动或者秒杀.直接 redis+lua 当数据库.云服务器百万数据基本也没问题.时间成本且 qps 服务器成本随便碾压任何语言
    wobuhuicode
        18
    wobuhuicode  
       2021-12-16 09:13:37 +08:00
    @yyfearth 运维脚本也用 node 来写,数据库很多都用 mongodb 的,直接套个 orm 框架,sql 也不用。
    cweijan
        19
    cweijan  
       2021-12-16 09:13:41 +08:00
    node.js 开发很快, 缺点是程序容易崩, 时刻需要处理异常, 没有统一规范, 这意味着如果要用于商业项目, 程序员的水平要高.
    rophie123
        20
    rophie123  
    OP
       2021-12-16 09:34:02 +08:00 via iPhone
    @cweijan 这么看 php 更稳一点啊,不是引战,因为我现在就是这么用的
    zhsama
        21
    zhsama  
       2021-12-16 09:50:12 +08:00
    @dcoder 为啥是业余😂感觉使用体验良好
    Rocketer
        22
    Rocketer  
       2021-12-16 09:50:25 +08:00 via iPhone   ❤️ 2
    正式一点的开发可以考虑一下.Net Core ,又稳又快。用 Nuget 管理包比其他主流语言都方便,搭建开发环境也比其他主流语言快,装个 VS 就全有了。
    nicholasxuu
        23
    nicholasxuu  
       2021-12-16 09:58:54 +08:00
    共享代码,共享逻辑。
    一个人开发前后端时换脑子轻松一点。
    可以考虑 SSR (服务器端渲染)。
    其实大部分语言都差不多,量级上去了可能某些语言对资源要求低可以省成本(但量级上去了大多可以不在乎那点成本)。更多是看是否有合适的开发人员,还有这个语言的生态如何(比如 ORM 之类有哪些,是否好用)。
    dreamerblue
        24
    dreamerblue  
       2021-12-16 10:02:37 +08:00   ❤️ 1
    如果走前后端分离,前端业务逻辑占比应该不会少,前端复杂度会很高,除非是传统的异构 SSR + 前端仅处理少量交互代码。这个时候如果前后端同构都用 JS ( TS ),优势就体现出来了,前后端复用的校验、接口 DAO 、服务、工具类、配置等可以显著提升一把梭速度。我们组维护的几个 MAU 只有几百万的小项目就是从几年前开始一直在这么搞的,技术栈主要就是自研的 JS 全栈框架 + Vue 。当然运维相关对 Node.js 是个问题,公司有支持是最好,个人项目直接用 alinode 等也不错
    lmoon
        25
    lmoon  
       2021-12-16 10:06:15 +08:00
    相比 Tailwind CSS 我觉得 Windi CSS 更好
    adspe
        26
    adspe  
       2021-12-16 10:21:24 +08:00
    优势就是省人工成本
    Terry05
        27
    Terry05  
       2021-12-16 10:23:19 +08:00
    都没有兼容 ie 的硬性要求了嘛,都敢上 Tailwid CSS 跟 Windi CSS 了
    BlackJac95
        28
    BlackJac95  
       2021-12-16 10:25:40 +08:00
    vue+egg 感觉不错的
    eason1874
        29
    eason1874  
       2021-12-16 10:27:39 +08:00
    复用校验代码确实爽

    之前我写 JS + PHP ,校验逻辑一样,其实代码也 99%相同,但要写两遍,就很羡慕 Node 的前后一把梭
    rophie123
        30
    rophie123  
    OP
       2021-12-16 10:31:27 +08:00
    @eason1874 我现在和你一样,所以我想问问 node 会不会更有优势一点
    darknoll
        31
    darknoll  
       2021-12-16 10:35:58 +08:00
    没有优势,一把梭单纯的是因为不会其他语言的后端
    chenqh
        32
    chenqh  
       2021-12-16 10:37:20 +08:00
    但是小项目,可以校验逻辑完全放到后端来做呀, 前端什么也不校验,就是用起来不那么友好罢了
    dany813
        33
    dany813  
       2021-12-16 10:42:27 +08:00
    复用逻辑吧
    Elissa
        34
    Elissa  
       2021-12-16 10:43:07 +08:00
    大的样式布局用 flex+grid 布局,配合组件库自带的栅格系统,和 bootstrap 效果一样。细节布局组件库已经实现的很精致了,需要覆盖的话定义个公共的样式,main.js 引入覆盖
    dcoder
        35
    dcoder  
       2021-12-16 10:52:44 +08:00
    @zhsama
    分人, 主要是有太多 新手前端工程师学点 mongoDB, 就号称自己是 full stack 了
    makelove
        36
    makelove  
       2021-12-16 10:54:54 +08:00
    我就是单人 node 前后端,以前用 py 做后端现在也改 node 了。
    优点很大,前后端共用 typescript 定义,只用一种语言大脑切换损失小,js+ts 语言灵活表达力高还是强类型检查,可以说完全没有坚守 php 的理由。


    @cweijan node 容易崩?哪来的说法?给个会崩的场景?
    iugo
        37
    iugo  
       2021-12-16 10:59:57 +08:00
    目前 Deno + React, 核心优势是使用 TypeScript 后 共同的业务类型约束, 相关的运行时类型判断函数也通用.
    xuanbg
        38
    xuanbg  
       2021-12-16 11:02:42 +08:00   ❤️ 4
    其实没啥优势,后端能力在线的,学几种 Java 这样的语言压根就不是什么问题。编程的问题也从来不是语言的问题,生态的问题远大于语言,而解决问题的能力又远高于生态。
    fujishimamao
        39
    fujishimamao  
       2021-12-16 11:02:42 +08:00 via Android
    写 BFF 的话用 gql 前端直接复用后端类型,只不过变成每天都在写图了
    fujishimamao
        40
    fujishimamao  
       2021-12-16 11:07:27 +08:00 via Android
    @cweijan 交给 docker 或者 k8s 来管理
    ipwx
        41
    ipwx  
       2021-12-16 11:10:48 +08:00
    @ob 你可以用 bootstrap-vue ( doge )

    https://bootstrap-vue.org/
    agdhole
        42
    agdhole  
       2021-12-16 11:24:19 +08:00 via iPhone   ❤️ 1
    写了几年 PHP 的告诉你,node 各方面都可以取代 PHP ,性能,ts 静态类型,常驻任务,开发速度,前后端大统一,就这几点为啥还抱着 PHP 玩,写个实时通讯 PHP 都要搞什么 swoole ,瞎折腾。
    galikeoy
        43
    galikeoy  
       2021-12-16 11:54:48 +08:00
    @cweijan #19 容易蹦??给个例子?公司项目生产环境跑了 2 年,金额流水过亿
    Austaras
        44
    Austaras  
       2021-12-16 11:56:42 +08:00
    如果真的爱玩新技术,可以尝试一下 fsharp 全栈。。。甚至有 ssr
    galikeoy
        45
    galikeoy  
       2021-12-16 11:56:55 +08:00
    @cweijan #19 异常处理,哪个语言不需要异常处理,统一规范那是项目管理的事情
    ijse
        46
    ijse  
       2021-12-16 11:58:02 +08:00
    看 React Remix 全栈框架,一把梭的优势就在于可以给页面做到更好的体验。

    https://remix.run/

    但前后端分离的项目,应该优势不大。
    4771314
        47
    4771314  
       2021-12-16 12:05:48 +08:00
    优势在于会搞出很多的 bug (如果前端水平不够的话)
    接手过一个前端搞的后端项目,bug 很多,逻辑也很扯,主要是 OOM 、CPU 的问题全都有
    好家伙,一个项目,直接把后端的问题暴露了个全
    我 TM 直接好家伙
    dreamerblue
        48
    dreamerblue  
       2021-12-16 12:29:03 +08:00
    @4771314 深有体会,之前接手过隔壁组的 node 项目,屎山不说,各种内存泄漏、for 循环串行 rpc 、不写鉴权导致安全问题频出等等。拉前端来写 node 业务还是要有一定经验的才行
    libook
        49
    libook  
       2021-12-16 12:35:12 +08:00
    前后端通用的包不少比如 Lodash 、Axios 、Bluebird ,另外因为语言绝大部分特性一样,所以自己写的很多代码可以前后端复用,比如涉及到 API 的各种类。

    你熟悉啥,用啥出活就快。

    每个技术栈都有擅长的领域和不擅长的领域,看你当前遇到的需求或问题是否是某一个技术栈擅长的,比如涉及到大量 JSON 处理的场景,后端 Node.js 就肯定比 PHP 方便一些,以及 Node.js 的异步非阻塞是开箱即用的,不需要很多工作就能支持高并发。

    对于公司来说,Node.js 全栈的优势是一门语言通吃前后端,前后端交集的那一部分不需要重新学,很多设计思想也可以通用。

    但任何一个规模较大的项目都不是一门语言可以拿下的,需要用多个技术栈各自发挥特长。

    所以你现在熟悉 PHP ,在没有实际遇到不适合 PHP 的需求的时候,好像也没必要硬换技术栈。
    pengtdyd
        50
    pengtdyd  
       2021-12-16 12:48:19 +08:00   ❤️ 1
    优势在于本来要,前端,后端,测试,运维,产品的,现在招一个人就可以了。5 大问题 1 人搞定,累死了就下一个
    L1shen
        51
    L1shen  
       2021-12-16 13:05:01 +08:00
    可以了解下 jamstack
    比如 https://blitzjs.com/ 这个框架
    boja
        52
    boja  
       2021-12-16 13:10:03 +08:00
    node 最大的不方便是進程間通訊,和數字浮點處理。除此外專業後端寫的 node 跟 java/php 並沒什麼區別。代碼共享,調試 /溝通成本直降 80%。
    zzWinD
        53
    zzWinD  
       2021-12-16 13:10:16 +08:00   ❤️ 1
    .net core
    3dwelcome
        54
    3dwelcome  
       2021-12-16 13:14:42 +08:00
    我发现前后端一把梭的优势,是可以把传统后端一锅端,直接把后端代码,放到 WASM 里和前端一起运行。

    这样就变成了一个传统的应用程序,所有的数据都是本地文件来源和内存数据库。

    都不需要网络通讯了。数据通过“伪后端”处理加工后,再发送给前端页面展示出来。
    agdhole
        55
    agdhole  
       2021-12-16 13:25:39 +08:00   ❤️ 2
    @3dwelcome #54 c# blazor
    nicevar
        56
    nicevar  
       2021-12-16 13:36:46 +08:00
    没有什么优势,对个人开发者来说,还不如 php 实在,我工作时后台用 Java ,自己的后台用过 Java/Go/Python/NodeJs ,后来换 php 了,开发调试方便,各种东西大多有现成的可用。
    mikulch
        57
    mikulch  
       2021-12-16 14:04:33 +08:00
    国内用这个的太少了。
    yyfearth
        58
    yyfearth  
       2021-12-16 14:48:00 +08:00
    @wobuhuicode 我就是这个意思啊
    “JS 一把嗦比较爽了 vue/react+webpack+node+mongo”
    zhy0216
        59
    zhy0216  
       2021-12-16 14:58:19 +08:00
    如果是 ts 的话 至少类型可以复用
    rophie123
        60
    rophie123  
    OP
       2021-12-16 15:07:32 +08:00
    @nicevar 是的,开发部署方便,修改完了直接上传一下文件就行了,有问题直接撤回,调试就不好玩了
    vertigo
        61
    vertigo  
       2021-12-16 15:45:27 +08:00   ❤️ 1
    js 开发者特点:
    大问题没有,小问题不断,js 很容易写出自己的语言风格
    所以带来的好处是:
    项目质量总体不错,一直出错可以一直维护,项目方找不到能接盘的人只能一直绑定开发

    很适合赚钱
    7gugu
        62
    7gugu  
       2021-12-16 16:08:52 +08:00   ❤️ 1
    最大优势就是学了 JS ,就可以通杀前后端,国内外生态也不错,很多轮子可以用,教程也多经验也多。

    js+php 当然可以跑,只是用同一门语言没那么多心智负担,比如 php 的变量要加$,js 里面不用,写着写着就很容易把这两者的差异给搞混,都用 js 就不怕了,语言特性是一样的,差别仅仅是存在于 API 上。
    badmarillo
        63
    badmarillo  
       2021-12-16 18:55:43 +08:00
    上家公司就是全“沾”,技术栈:vue/react + koa + typescript + sequelize
    star7th
        64
    star7th  
       2021-12-16 19:49:24 +08:00
    我几年前前也是 js+php . 但近年来全部换成 js + node 了。优势嘛,就是不用常切换语言,减轻心智负担。另外就是 node 在读数据库 io 方面,由于异步,比 php 要高性能一些
    shuimugan
        65
    shuimugan  
       2021-12-16 19:55:19 +08:00   ❤️ 9
    js 一把梭挺爽的,让我告诉你 php 换 nodejs 之后爽在哪里
    1.异步 io 性能大幅度提升。很多人说你的项目压根用不到语言的瓶颈,但他们往往说的是计算瓶颈,而不是 io 瓶颈。很多 php 用户没搞清楚“异步里面不能套同步”就上 swoole ,就和很多 python 用户在 tornado/fastapi/asyncio 里用内置 file 等 io 阻塞型函数,java 用户在 netty 里用 jdbc 那样。我测试 8700K [单核心] 空跑 node 的 qps 有 4w ,内存占用 65MB ,这种性能优势随便招个人培训一下随便写都不会差到哪里去。
    2.单步调试。说实话很多 php 用户连 xdebug 都没用过几次,echo/vardump 一把梭,更别说在 swoole 里用断点调试了。
    3.有很多相似的库。像 Laravel 的框架有 AdonisJS,像 SpringBoot 的框架有 Nest.js,像 Yii2 的 ORM 有 TypeOrm,用 JavaScript 实现的 PHP 函数库有 https://github.com/locutusjs/locutus (注意不要用 io 相关和加密相关的,是阻塞实现)。
    4.代码复用。很多逻辑判定的代码可以复用,不过要在编码过程中注意调用环境,函数最好是无运行环境依赖的。
    5.服务端打包。node.js 打包是非常多的人忽略的,包括各路 serverless 厂商。大家认为有 docker 就不需要打包了,但是 nodejs 是可以直接打成二进制的。比如 https://github.com/vercel/pkg 这个库可以把 nodejs 项目打包成二进制,然后可以直接在服务器上运行(这一点和 go 、.net 的特性一致了,还用啥 go )。实测一个没有使用.node 扩展的 300MB+的项目打成二进制才 40MB 出头,tar.gz 后大概在 20MB 。做 docker alpine 镜像也就加多几 MB 。

    很多人说运维的问题,但我觉得未来属于 serverless ,而且现在各家 serverless 都支持跑 docker 镜像了。前后端都用 js ,服务部署上云,真的是连运维都不用,服务器维护都免了。我上家一年在公有云消费几千万,资源利用率才 30%多,各种 java 应用在上面跑,都是 io 密集型应用,还有为了高可用应用实例最低都是 2 个节点的,要是能改 serverless 架构一年能省千万级的费用。如果你的应用冷启动都是毫秒级,实际上 0 应用实例就可以做到高可用了,无论是做 saas 还是丢给客户在公有云部署,都是极大的优势。
    rophie123
        66
    rophie123  
    OP
       2021-12-16 20:10:34 +08:00
    @shuimugan 感谢,推荐个框架呗
    shuimugan
        67
    shuimugan  
       2021-12-16 20:38:48 +08:00
    @rophie123 directus + nest.js 具体理由一图流:

    ![1.png]( https://s2.loli.net/2021/12/16/S2zckoYvWFO75eG.png)
    zhennann
        68
    zhennann  
       2021-12-16 20:44:55 +08:00
    事实 1:大多数类似 vue admin 的 UI 框架都是为 pc 端定制,mobile 端可用但不好用
    事实 2:大多数 node 项目都是 crud 和工具类应用,没有好用的工作流引擎
    因此,强烈建议使用 CabloyJS ,解决了上述两个问题,而且还有大量丰富的工具和组件,将低代码的开箱即用和专业代码的灵活定制,有机的结合了起来
    眼见为实,在线演示: https://test.cabloy.com/
    分别使用 PC 和手机浏览该网页,体验与众不同的 pc=mobile+pad 自适应布局
    byte10
        69
    byte10  
       2021-12-16 21:09:03 +08:00
    @shuimugan 我靠,很多 java 用户在 netty 里用 jdbc 那样,你这个经典。也有很多 webflux 项目也是有同步代码,我直接挖槽,太多土鸡了。还有另外一些奇葩 @async 后 直接 get ()进行阻塞获取,太蠢货。哎。serverless 还是不错,小程序这方面就很好用,运维对于中小公司确实挺大的负担的。
    fkdog
        70
    fkdog  
       2021-12-17 09:14:30 +08:00
    nodejs 前边几年吹的很厉害,前后端一把梭。
    经过几年时间的检验,nodejs 在后端届并没有展现出杀手级的应用,反而还被异军突起的 go 和 k8s 杀了一道。
    现在 nodejs 基本已经沦落为用来 js 打包、本地 webpack 调试一类的支持工具了。。。
    zhennann
        71
    zhennann  
       2021-12-17 10:18:35 +08:00
    @fkdog 你说的是现实。前几年,nodejs 炒作来炒作去,还不是工具层、代理层,网上大多数知识也只是在玩具的层面翻来覆去的 copy 。所以,我花了几年时间做了一款 node 全栈开源框架:CabloyJS 。内置工作流引擎,全新的 UI 布局风格,希望能为 node 生态添砖加瓦。
    imruxin
        72
    imruxin  
       2021-12-17 17:20:37 +08:00
    前后端都分离了,至于后端用 PHP 还是 node 看公司团队跟技术栈熟悉程度咯。PHP 能实现的,node 也能实现。不过大型项目用 node 的好像不多,中小型的项目用 node 还是挺多的。
    rophie123
        73
    rophie123  
    OP
       2021-12-17 17:33:26 +08:00 via iPhone
    @imruxin 没有公司和团队,一直说的就是个人,不争论语言,就是比出活优势,没优势就继续 php
    hutoer
        74
    hutoer  
       2021-12-17 19:50:33 +08:00
    php 貌似漏洞特别多,当然我的观念还在 php5 的时代,很久没碰 php 了
    用 nodejs 的话,php 漏洞的问题解决了,算不算优势?
    rophie123
        75
    rophie123  
    OP
       2021-12-17 22:27:31 +08:00 via iPhone
    @hutoer 漏洞根本用不上吧,从没遇到过,自由职业+兼职外包
    7086cmd
        76
    7086cmd  
       2022-02-20 12:47:06 +08:00
    单纯靠我的看法来讲,……
    1. 前后端语法相同,出现了 Bug 可以很好地定位,并且可以提出方案(运营方面)
    2. Node.js 有很多的轮子,在必要的时候可以帮助一把
    3. 前后端可以统一配置统一使用,测试方便
    4. 若使用 TypeScript ,前后端可以使用自动补全,即使是 API
    5. Node.js 不会有 PHP 那么样直接跑源码等的性能问题和源码泄露(我觉得
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2772 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 08:09 · PVG 16:09 · LAX 00:09 · JFK 03:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.