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

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

  •  1
     
  •   rophie123 · 154 天前 · 12084 次点击
    这是一个创建于 154 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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


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

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

    https://remix.run/

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

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

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

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

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

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

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

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

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

    js+php 当然可以跑,只是用同一门语言没那么多心智负担,比如 php 的变量要加$,js 里面不用,写着写着就很容易把这两者的差异给搞混,都用 js 就不怕了,语言特性是一样的,差别仅仅是存在于 API 上。
    badmarillo
        63
    badmarillo  
       153 天前
    上家公司就是全“沾”,技术栈:vue/react + koa + typescript + sequelize
    star7th
        64
    star7th  
       153 天前
    我几年前前也是 js+php . 但近年来全部换成 js + node 了。优势嘛,就是不用常切换语言,减轻心智负担。另外就是 node 在读数据库 io 方面,由于异步,比 php 要高性能一些
    shuimugan
        65
    shuimugan  
       153 天前   ❤️ 8
    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
       153 天前
    @shuimugan 感谢,推荐个框架呗
    shuimugan
        67
    shuimugan  
       153 天前
    @rophie123 directus + nest.js 具体理由一图流:

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