V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
evilStart
V2EX  ›  Python

Nodejs 之后, Python 在 Web 开发领域还有啥优势么?

  •  
  •   evilStart · 2021-07-18 15:54:15 +08:00 via Android · 15235 次点击
    这是一个创建于 984 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Python 的 Web 框架的并发性能被 nodejs 吊打。真要有复杂的后端服务都上 JAVA 了,也不会用 Python 。

    现在就连自动化测试这块很多都可以给 nodejs 做了。除了机器学习和作为胶水语言,感觉在 Web 领域 python 的空间越来越小了。
    101 条回复    2023-09-25 19:47:08 +08:00
    1  2  
    abcbuzhiming
        1
    abcbuzhiming  
       2021-07-18 15:59:07 +08:00
    python 在 web 领域从来就没占据主流过啊,就算没有 node 的年代,也是 PHP 和 Java 各领风骚,python 在 web 领域从来就是 [能做] 而已,优势,谈不上
    emeab
        2
    emeab  
       2021-07-18 16:01:09 +08:00   ❤️ 2
    Python 库多. 代码量小. 学习成本低. 性能不是绝对.
    Gorgine
        3
    Gorgine  
       2021-07-18 16:01:10 +08:00
    小公司用 开发效率高
    evilStart
        4
    evilStart  
    OP
       2021-07-18 16:03:08 +08:00 via Android
    @abcbuzhiming 是的。我是说相比之前来说现在 python 的使用空间被 nodejs 进一步压缩了
    hronro
        5
    hronro  
       2021-07-18 16:11:24 +08:00
    @Gorgine #3 比起 Node.js 来说,没高到哪里去吧,或者说谁高还不一定呢。
    hronro
        6
    hronro  
       2021-07-18 16:14:52 +08:00
    我个人感觉,现在还选 Python 的原因大概都是团队(或者项目负责人)对 Python 最熟之类的人为因素吧。
    inframe
        7
    inframe  
       2021-07-18 17:32:35 +08:00
    企业内部系统,python 开发比较快,
    反正不需要并发,所以一般用哪个赶快上线用哪个
    TypeError
        8
    TypeError  
       2021-07-18 17:34:44 +08:00
    新的后端项目不是 go 比较多么,国内很多公司都是 python 转 go 吧,没见过多少转 nodejs 的
    westoy
        9
    westoy  
       2021-07-18 17:39:46 +08:00   ❤️ 2
    node.js 最火是七八年前, 现在也是前浪了, 就不要互相伤害了
    aladdindingding
        10
    aladdindingding  
       2021-07-18 18:17:51 +08:00
    存在即合理,如果你想创业,写代码的就几个人 你会选择 python 还是 java
    pcbl
        11
    pcbl  
       2021-07-18 18:33:59 +08:00
    node.js 还活着啊。。
    roundgis
        12
    roundgis  
       2021-07-18 18:53:18 +08:00 via Android   ❤️ 1
    大多數的系統還不需要到拼性能的地步

    真到了那個階段,需要考慮的地方就更多了

    先活到那個階段再說
    Vegetable
        13
    Vegetable  
       2021-07-18 19:01:35 +08:00   ❤️ 7
    想当然了吧,python 的确半死不活,但是绝对比 nodejs 好多了。
    slideclick
        14
    slideclick  
       2021-07-18 20:18:09 +08:00
    @Vegetable Tibco 前三甲还是半死不活? 力压了 c++和当年为了代替 c++而发明的 c#.现在什么正红?难道是 golang?忘记当年 node.js 红火了?
    slideclick
        15
    slideclick  
       2021-07-18 20:20:11 +08:00
    要论复杂逻辑 python 不比 java 差.
    java 火有几个原因,1 人多便宜好找 2 高人多因为用的公司多 3 docker 时代语言不重要了,以前的 PaaS 很少支持 java 的在 docker 之前那时 14,15 年很多创业的用 python
    love
        16
    love  
       2021-07-18 20:26:25 +08:00   ❤️ 5
    写了多年 python web,我现在也用 node
    node + typescript 的确各方面吊打 python,不但是开发速度和运行速度,编辑器和相应工具,包管理都更好用

    而且和前端用同一种语言也是个巨大加分项,不但少一门语言且能共用很多类型定义

    ts 类型灵活性方面比 java 牛逼多了,当然 java 粉会说 java 适合低水平程序员合作,这就没什么好说的,虽然我也写过二年 java 但真没觉得 java 生态很简单
    janxin
        17
    janxin  
       2021-07-18 20:26:51 +08:00
    用 NodeJS 的原因是前端开发太多了?
    WenhaoWu
        18
    WenhaoWu  
       2021-07-18 20:50:25 +08:00 via Android
    node 有什么框架类似 Django + DRF 的?
    shuimugan
        19
    shuimugan  
       2021-07-18 21:15:39 +08:00   ❤️ 3
    在 2017 年用 tornado 搞过一个并发要求高的站点,被 python 各种的异步 io 库糟糕的生态给搞得差点放弃,从那以后我就转 node.js 了.

    最近在建设 cmdb,cmdb 这类应用大部分都是 python 开发的,看了一圈代码和功能,发现大部分的工作量都可以被无头 cms 接管过去.于是我现在用 https://directus.io/ 这个框架搭建各种 xx 内部管理系统,工作效率直接起飞,一天能顶 2 周的工作量.有的不好做的话另外起一个站点用 nest.js + prisma 缝合一下,速度也直接起飞了.打个镜像丢到 serverless 上面最低配(128MB 内存)就能玩起来,性能还很好.
    oneforallsoft
        20
    oneforallsoft  
       2021-07-18 21:52:15 +08:00
    @shuimugan
    cmdb 就是配置管理系统
    有么有复杂业务的?
    namelosw
        21
    namelosw  
       2021-07-18 23:23:44 +08:00
    说得好像之前有优势一样…

    Node.js 之前有优势也得是 PHP 和 Ruby 啊…
    O5oz6z3
        22
    O5oz6z3  
       2021-07-18 23:34:58 +08:00
    py 拿头打得赢 js,浏览器能直接运行 py 再说。
    echo1937
        23
    echo1937  
       2021-07-19 00:27:25 +08:00 via iPhone   ❤️ 1
    py 和 js 的开发者从来就不是高重合的群体,都是各写各的,各用各的;
    web 现在是红海,发展比较平稳,各语言份额很稳固;
    nodejs 远远没有前几年预测的那么火,为了性能和时髦转 go 的更多;
    SenLief
        24
    SenLief  
       2021-07-19 00:32:18 +08:00 via Android
    nodejs 多不就是因为人手都是前端,毕竟现在是 js 天下。
    Lemeng
        25
    Lemeng  
       2021-07-19 00:41:43 +08:00
    没得比的
    dayeye2006199
        26
    dayeye2006199  
       2021-07-19 03:11:13 +08:00   ❤️ 2
    一大票初创企业都是跑 python web 的,特别是非 2c 导向的(其实就是公司里面前端比较少,一般都是一些后端出来干的)。

    对初创企业来讲,性能一般不是优先考虑点。团队的熟悉程度和开发的效率都更重要。

    你觉得一些特别无聊的框架,例如 django,DRF 这种好像一直都没什么变化的,其实才是一个初创团队的好框架,上下限稳定,无微不至的保姆服务,对用最快速度搞出一个还不错的产品来投放市场来讲是很重要的。

    web 其实占很多 2b 产品的部分很少。后面的 infra 管理、存储、数据密集型运算需要更多的精力来完成。正巧很多时候做这些的人都能整两手 python,所以选 web 框架的时候,django flask 这类会变成很自然的选择。
    wolfan
        27
    wolfan  
       2021-07-19 05:06:48 +08:00
    现在不是稍大的企业就上 java 搞业务么。
    iPhone9
        28
    iPhone9  
       2021-07-19 05:13:21 +08:00
    python 原来在欧美有优势,在国内没有优势。现在在欧美也没优势了。
    oneforallsoft
        29
    oneforallsoft  
       2021-07-19 05:53:58 +08:00 via Android
    Python 相比 laravel 如何 以及 rails
    到底优在哪
    adrianzhang
        30
    adrianzhang  
       2021-07-19 08:29:13 +08:00 via iPhone
    @shuimugan 对你说的无头 cms 接管非常感兴趣,有没有开源项目呢?
    xiaolinjia
        31
    xiaolinjia  
       2021-07-19 08:31:42 +08:00
    我觉得在国内还是 java,go 的天下。nodejs 和 py 都一般,就没必要互相伤害了。
    dream4ever
        32
    dream4ever  
       2021-07-19 08:36:04 +08:00
    @adrianzhang Parse-Server,Strapi,这种都是。
    raptor
        33
    raptor  
       2021-07-19 08:51:17 +08:00   ❤️ 5
    前端党真是爱想当然,你们什么时候能把不断重新发明轮子的爱好给改了,可能还有点希望。
    qrobot
        34
    qrobot  
       2021-07-19 09:08:46 +08:00   ❤️ 3
    @raptor #33

    不知道什么叫做不断重新发明轮子。


    - Webpack 的出现,主要是为了解决打包的问题,并且可以配置插件来做一些功能
    - React 只不过是一个 JS 操作 DOM,采用虚拟 DOM 来进行操作的,方便了开发人员
    - Angular 只不过也是一个 JS 操作 DOM 的库,不过采用双向数据绑定。
    - Vue 只不过也是一个 JS 操作 DOM 的库,它减少了 Angular 的复杂度
    - PReact Fast 3kB alternative to React with the same modern API.
    - Babel 解决浏览器兼容问题

    无论从哪个方向来说,这都不是所谓的 `不断重新发明轮子` 每个 JS 库的偏向点都不一样。 他们都拥有自己不同的生态。如果硬要说,类似于 Linux 的分叉,Debian 和 Centos 的区别。Arch 和 Manjaro 的区别
    wellsc
        35
    wellsc  
       2021-07-19 09:09:44 +08:00
    这个问题你应该四五年前提,现在 nodejs,python 都不太行了
    bnm965321
        36
    bnm965321  
       2021-07-19 09:32:10 +08:00
    nodes 元编程能力不太行。prisma 这个 ORM 需要搞出一个 DSL 来描述 models,然后还有用 Rust 写的 connector 。
    jjx
        37
    jjx  
       2021-07-19 09:51:04 +08:00   ❤️ 1
    典型的我即世界
    xemtof
        38
    xemtof  
       2021-07-19 10:02:11 +08:00
    @dayeye2006199 其实初创企业最应该用 Rails,快速上线业务。
    Mohanson
        39
    Mohanson  
       2021-07-19 10:05:36 +08:00 via Android
    问题是 nodejs 在 web 也没优势啊,现在都是转 go
    moxuanyuan
        40
    moxuanyuan  
       2021-07-19 10:11:46 +08:00   ❤️ 2
    @jjx #37 凡说“典型的我即世界”,都是“典型的我即世界”
    ChevalierLxc
        41
    ChevalierLxc  
       2021-07-19 10:15:00 +08:00
    @O5oz6z3 虽然我是 nodejs ,但是还是不太支持你这种说法,这里的 nodejs 明显指后端
    adrianzhang
        42
    adrianzhang  
       2021-07-19 10:16:01 +08:00
    @dream4ever 谢谢!了解了一下什么是无头 CMS 。我其实是想了解一下 @shuimugan 自己开发的 xx cmdb 或 xx 管理系统有没有开源。看看究竟怎么实现 2 周工作量 1 天完成。
    zhuweiyou
        43
    zhuweiyou  
       2021-07-19 10:16:32 +08:00
    什么时候优势过
    vone
        44
    vone  
       2021-07-19 10:23:05 +08:00
    @Mohanson 展开讲讲 go 优势
    qq976739120
        45
    qq976739120  
       2021-07-19 10:31:05 +08:00
    国内绝大部分的公司是碰不到性能问题的
    huang119412
        46
    huang119412  
       2021-07-19 10:51:05 +08:00
    @slideclick python 无声明类型无多线程的脚本语言和 java 这种天生多线程的编译语言比逻辑,不是自取其辱?不说使用场景天天就知道秒秒秒?
    dream4ever
        47
    dream4ever  
       2021-07-19 10:52:13 +08:00
    @adrianzhang 对业务的熟练 + 对工具的熟练 + 选择合适的工具,或许是可以做到以前需要 2 周工作量的任务在 1 天内完成的。
    ch2
        48
    ch2  
       2021-07-19 11:16:56 +08:00
    现在已经是云原生的时代了
    pusheax
        49
    pusheax  
       2021-07-19 11:24:17 +08:00
    python 之前接触过一个小项目。不止是并发性能的问题,是稳定性都有大问题。试过一个 bug,在不到百人访问的情况下把物理主机吃满(应该是 8c,8g )。后来就不敢用了,毕竟这种低级问题在 ngnix 、apache 里面都很难出现。
    codepark
        50
    codepark  
       2021-07-19 11:38:09 +08:00
    哎,你用 python 用 nodejs 能咋的,你换个工具而已
    adrianzhang
        51
    adrianzhang  
       2021-07-19 11:42:30 +08:00
    @dream4ever 其实就是需要讲讲怎么用无头 cms 开发业务。
    todd7zhang
        52
    todd7zhang  
       2021-07-19 11:44:04 +08:00
    太久没有用 node.js ,不知道 node_modules 这个文件夹还大不大?
    O5oz6z3
        53
    O5oz6z3  
       2021-07-19 11:46:18 +08:00
    @ChevalierLxc 是我想当然了,我还以为前后端一把梭会是优势。
    winglight2016
        54
    winglight2016  
       2021-07-19 11:55:10 +08:00
    @slideclick #15 xd,你说的是结果,不是原因。java 火的原因是 2000 年前后,在企业端服务器领域,j2ee 框架战胜了另外一个网景的服务端技术。在此之后就是滚雪球式的发展,因为 j2ee 的服务器完成了大部分性能扩展的任务,对于企业和开发者比较友好,所以进入了互联网爆发期之后,大部分互联网公司采用了这种“成熟”技术。nodejs 和 python 被用于互联网上的开发时间上比较靠后,所以一步慢步步慢,只能在个别领域向 java 发起挑战。

    最后,python 和 nodejs 的优势都差不多吧,轻量、快速开发、脚手架成熟,只不过 python 还能用于 AI 应用,nodejs 能用在跨平台,比如手机 app based on RN
    raptor
        55
    raptor  
       2021-07-19 12:01:39 +08:00
    @qrobot 你就说打包工具这些年来出现过多少了吧,现在还活着的还有几个? debian 多少年了,centos 多少年了?反正我隔两三年碰到 JS 项目就觉得需要重新学习一门语言和全部生态,前端这样搞搞没问题,反正隔几个月就要改版,后端业务经不起这样的折腾。

    @pusheax 那只能说你们开发有问题,我这边前几年用 python 做过的项目日访问用户几万人没有这种情况。再说跟 nginx/apache 比有什么意义?它们又不处理业务。
    popil1987
        56
    popil1987  
       2021-07-19 12:10:34 +08:00
    nodejs 比 python 要快
    fastify 压测是 fastapi 两倍
    django 有可订制后台,nestjs 没有,django 适合快速出原型
    prisma 比 python 系的 orm 都要快乐
    数据处理和人工智能 nodejs 是弟弟
    strapi 比 wagtail 好用
    saleor 比 vendure 成熟
    odoo,erpnext 永远的神打遍 nodejs 无敌手
    不外包的话,
    python 就老老实实数据科学和人工智能吧
    nodejs 就老老实实前端吧
    web 框架就不麻烦二老了
    walpurgis
        57
    walpurgis  
       2021-07-19 12:20:59 +08:00 via iPhone
    感觉 python 重心不在 web 上了,以后会越来越弱势
    nodejs 现在是稳定发展期了,有用户基数在,不会太差
    node 进场其实是最晚的,es5 坑也多,估计那时劝退了不少人,现在有 ts 加持,体验不输 java
    gimp
        58
    gimp  
       2021-07-19 12:52:25 +08:00   ❤️ 1
    在 Web 领域都是弟弟,就别互相伤害了。
    dcsuibian
        59
    dcsuibian  
       2021-07-19 13:11:25 +08:00
    个人感觉,没有。真的想不到任何优势。
    不过作为一个胶水语言,作一个微服务倒还是不错的。
    ysc3839
        60
    ysc3839  
       2021-07-19 13:21:17 +08:00 via Android
    @slideclick C# 应该是为了代替 Java,而不是 C++。目前 C# 的 AOT 还不是很流行,其中之一的 il2cpp 还得依赖 C++,谈不上代替。
    ysc3839
        61
    ysc3839  
       2021-07-19 13:29:22 +08:00 via Android
    @love 说到 Python 对比 JavaScript,我觉得 Python 的 async function 没有 js 那么简单直观。
    Python 内置的 async function 和 asyncio 库结合得很深,但是它又不把 asyncio 给隐藏起来,使得用户要学 async function 就绕不开 asyncio 。有的时候我只是想像 js Promise 那样来代替一下回调函数,Python 就很难用几行代码实现,甚至比 C++20 的 coroutine 都还难。
    相比之下 js 的异步系统虽然也是跟内部的消息队列绑定的,但是 js 把消息队列隐藏起来了,暴露出来的接口简单易用。
    所以我要写 Web 后端等异步程序时,我会首选 js,写些同步的小脚本才用 Python 。
    Evilk
        62
    Evilk  
       2021-07-19 15:36:12 +08:00
    PHP 不香吗?
    DeWjjj
        63
    DeWjjj  
       2021-07-19 15:45:40 +08:00   ❤️ 1
    @evilStart 做自己监控的后端可视化还是很强的,但是单独拎出来做一个业务后端就不行。
    现在,很多都是拿 python 做工业监控后端,拿 c++类去做工业后端。
    ytmsdy
        64
    ytmsdy  
       2021-07-19 15:56:21 +08:00
    国内绝大多数的应用都跑步到 python 的性能极限,python 跑的慢,绝大多数都是写不好导致的问题。
    python 相对于 java 而言,简练很多,写起来贼快,但是多从业者的素质也有相应提高。
    java 是规范性的工程型语音,只要不作死,慢不到哪里去。
    python 相对于 java 花式语法比较多,用的不好容易翻车。
    sudoy
        65
    sudoy  
       2021-07-19 16:03:53 +08:00
    python 做做内部软件完全够用啦
    37Y37
        66
    37Y37  
       2021-07-19 16:28:57 +08:00
    很多时候我都不需要性能,简单好用最重要
    fanym
        67
    fanym  
       2021-07-19 16:53:28 +08:00
    又是语言开战了,python 没用过,但是 node,python 动态类型的代码写着爽,维护就知道哭了,接 node 的二手代码的动态类型,代码在哪调用和定义都不好找。用 ts 的项目基本很少,好多是代码 es5 和 es6 语法还混着来的项目,还有工作岗位和待遇都比 java 这种强类型的少。有机会还是去 java 卷吧。
    xcstream
        68
    xcstream  
       2021-07-19 17:03:31 +08:00
    科学计算可以
    yumenlong
        69
    yumenlong  
       2021-07-19 17:32:13 +08:00
    python 适合快速开发,开发效率高,请参考 Instagram,十几个开发者用 Python 就撑到了几十亿用户,说 python 性能不够的可以先考虑考虑你需要多少性能.
    simapple
        70
    simapple  
       2021-07-19 17:32:43 +08:00
    web 开发 一般不光是 web 交互逻辑的处理,往往还包括很多数据和文件的处理,再加上一些脚本工作和离线数据处理,这些都加起来,成熟的 web 开发语言 python php ruby 都是很有优势的
    liprais
        71
    liprais  
       2021-07-19 17:39:13 +08:00
    @yumenlong 事实上 100 万 dau 的时候就被 facebook 收购了,然后 engineering 是 fb 在做了
    z740713651
        72
    z740713651  
       2021-07-19 18:14:12 +08:00
    希望大家都别进军 python, 不要再卷啦~~~
    参考 https://studygolang.com/articles/25842
    -----------------------------------------------------------------
    python 拿 wsl2 虚拟机跑的
    python 3.8.5
    gunicorn 20.1.0
    fastapi 0.66.0

    ```python3
    from fastapi import FastAPI

    app = FastAPI()

    @app.get('/')
    async def index():
    return {'message': 'hello world'}
    ```
    ``` bash
    gunicorn -w 4 -k uvicorn.workers.UvicornWorker fastapi_demo:app --bind 0.0.0.0:8003
    ```

    ** webbench -c 1000 -t 30 http://localhost:8003 **
    Webbench - Simple Web Benchmark 1.5
    Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

    Benchmarking: GET http://localhost:8003/
    1000 clients, running 30 sec.

    Speed=392214 pages/min, 1105383 bytes/sec.
    Requests: 196106 susceed, 1 failed.





    -----------------------------------------------------------------
    node 因为不熟练 wsl2 上跑不起来
    用 windows 跑的 wsl2 上测试的 node --version v14.16.1
    这边没有用 nodejs 上生产,不知道要不要类似 gunicorn 的东西去启动
    问了前端同学抄的代码
    ```js
    const fs = require('fs')
    var express = require('express');//引入 express 模块
    var app = express();
    var cors = require('cors');

    app.use(cors())
    app.get('/',function(req,res){
    res.send('HellowWorld')
    });
    var server = app.listen(8005,function(){
    console.log('use this port: http://0.0.0.0:8005');
    })
    ```
    ```
    nodenode_demo.js
    ```


    webbench -c 1000 -t 30 http://192.168.100.228:3000/
    Webbench - Simple Web Benchmark 1.5
    Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

    Benchmarking: GET http://192.168.100.228:3000/
    1000 clients, running 30 sec.

    Speed=15598 pages/min, 62911 bytes/sec.
    Requests: 7799 susceed, 0 failed.

    -------------------------------

    python-fastapi
    Speed=392214 pages/min, 1105383 bytes/sec.
    Requests: 196106 susceed, 1 failed.
    nodejs
    Speed=15598 pages/min, 62911 bytes/sec.
    Requests: 7799 susceed, 0 failed.

    代码贴上面了 希望大佬们也验证下。。。
    z740713651
        73
    z740713651  
       2021-07-19 18:15:52 +08:00
    发现我起了 4 个 worker 数据应该是除以 4 ?
    lbunderway
        74
    lbunderway  
       2021-07-19 18:46:19 +08:00
    ubuntu 虚拟机 6 核 8G
    nodejs+koa2

    webbench -c 1000 -t 30 http://127.0.0.1:21000/test
    Webbench - Simple Web Benchmark 1.5
    Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

    Benchmarking: GET http://127.0.0.1:21000/test
    1000 clients, running 30 sec.

    Speed=321800 pages/min, 1261769 bytes/sec.
    Requests: 160900 susceed, 0 failed.

    启 2 个线程:
    Speed=396884 pages/min, 1554454 bytes/sec.
    Requests: 198442 susceed, 0 failed.

    ----------------------------------------------------------------

    webbench -c 5000 -t 30 http://127.0.0.1:21000/test
    Webbench - Simple Web Benchmark 1.5
    Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

    Benchmarking: GET http://127.0.0.1:21000/test
    5000 clients, running 30 sec.

    Speed=317996 pages/min, 1248053 bytes/sec.
    Requests: 158998 susceed, 0 failed.

    启 2 个线程:
    Speed=417516 pages/min, 1635270 bytes/sec.
    Requests: 208758 susceed, 0 failed.
    oneforallsoft
        75
    oneforallsoft  
       2021-07-19 19:09:33 +08:00
    咋没有都熟悉 laravel rails django nodejs 的人来说 到底最喜欢哪个

    鄙人表示简单 crud 离不开 php laravel

    python 强制缩进不好

    nodejs 要导入各种包不好 php 都是内置函数

    比毛性能啊 要性能就直接选这些其中一种做 crud 访问量高的模块就 GO
    NCE
        76
    NCE  
       2021-07-19 19:33:42 +08:00
    @oneforallsoft 我来说说吧

    Laravel 的设计思想我很喜欢,你用我推荐我用我不用,原因是像 tp,ci,Yii 这类框架可以做到开箱即用,Laravel 的 compose 依赖太多了,加上墙的缘故,用起来会大大影响效率和稳定性。

    rails:现在 ruby 已经升级到 3.x 了,ror 的性能也提升翻倍,如果是小型业团队起步试错我推荐用这个,开箱即用提高效率,ror 的设计原则也能约束成员开发风格。

    django:个人理解不如 rails 优秀。但 python 的 web 库也很多,django 是唯一一个大而全开箱即用的,比较适合熟悉 python 的人员起步做 web 用,你总不会发着工资让一个做数据分析的去学 ROR 吧? 你会 python,那好,2 天给我做个 api 出来,压榨 extension 价值首选。


    再说下 nodejs,nodejs 的繁荣完全是让写前端的人有机会干掉写后端的,一般公司前端都和美工一样是配角,有 nodejs 终于可以做主角了。另外 js 开发门槛低约束少性能高,很多人做 demo 都用这个,大型互联网用的还是少,特别是在 golang 出现后,基本正式场合都被 golang 占了,非正式场合 nodejs 还是很随意的。。。但在富前端开发上还是 nodejs 占主流,这个和前面 3 个没啥关系了。
    brando
        77
    brando  
       2021-07-19 20:08:56 +08:00
    每个语言脚本都有各自的优势。
    ericls
        78
    ericls  
       2021-07-20 01:47:01 +08:00
    运行环境和语言没有可比性
    myCupOfTea
        79
    myCupOfTea  
       2021-07-20 08:54:22 +08:00
    @z740713651 这种例子没啥用啊,真写业务 python 真异步包有几个,看了下异步相关的库,好多都是多线程伪装成异步 用的 python asyncio loop.run_in_executor
    liufish
        80
    liufish  
       2021-07-20 09:21:34 +08:00
    node.js + ts,选用了 NestJS,搭起小服务来还算可以。
    NestJS 用起来感觉很像 spring 那套啊
    z740713651
        81
    z740713651  
       2021-07-20 09:38:22 +08:00
    @myCupOfTea #79

    emmm 网络异步就好啦,
    基本的异步包都还是有的,
    计算啥得确实得用同步做。

    咱们讨论的是在 web 上,框架能处理的并发量和吞吐量嘛。
    说优势劣势,没数据怎么行。

    不过楼上老哥的数据看着确实吓人 ,
    没有同机器上 python 的对比数据,感觉也没有参考性。

    我是之前看有人直接拿 go 的性能对比了
    flask 确实慢的一匹 ,fastapi 的数据看上去能摸一摸 go 的尾巴了
    所以觉得速度好牛逼。才想着讨论 web 上的速度
    huang119412
        82
    huang119412  
       2021-07-20 09:40:08 +08:00
    @z740713651 说了多少次,不要自己写性能测试代码,你这和测 hello world 有什么区别。内存,缓存,网络,热启动,序列化,驱动太多影响因素,专业的事让专业的人做,你用 Web Benchmarks 的数据可能还有信服力。
    z740713651
        83
    z740713651  
       2021-07-20 09:46:37 +08:00
    @huang119412 #82 大佬说的有理
    Actrace
        84
    Actrace  
       2021-07-20 10:16:41 +08:00
    宇宙真理:做项目请选择自己熟悉的语言。
    O5oz6z3
        85
    O5oz6z3  
       2021-07-20 10:34:57 +08:00
    @ysc3839 #61 Python 的异步没有 Javascript 直观,也许是因为 js 本身就依靠事件循环,而 py 本来就没有事件循环,所以 py 必需依靠 asyncio 的 event loop 。而且 js 有完整的函数表达式,但 py 要么写嵌套函数,要么只有限制很多的 lambda 函数表达式,写回调或者 Promise 都不够方便。
    vincent7245
        86
    vincent7245  
       2021-07-20 11:15:47 +08:00
    c++ 做后台服务的瑟瑟发抖,看你们吵的这么凶,居然没人提到 c,哭了
    iqxd
        87
    iqxd  
       2021-07-20 11:25:24 +08:00
    @myCupOfTea 在操作系统层面只有网络请求能支持异步啊,其他的 io 比如文件读写等只能用线程来实现异步,所以不写 web 相关的一般不太会用到 asyncio
    ysc3839
        88
    ysc3839  
       2021-07-20 12:34:21 +08:00 via Android
    @O5oz6z3 我说的不是 event loop,说的是 async function 的基本 suspend resume 功能。比如 C++ 的 coroutine,被 await 的对象能直接拿到 async function 的 handle,后面可以通过这个 handle resume 。但是 Python 要实现这种功能似乎很难绕开 asyncio 。
    wowbaby
        89
    wowbaby  
       2021-07-20 14:23:41 +08:00
    我讨厌 node_modules 硬盘是硬伤,动辄几百兆,就我个人后端我基本不考虑 nodejs ;
    Python 跟 php 一样,开发效率高,生态完善;
    O5oz6z3
        90
    O5oz6z3  
       2021-07-20 14:30:29 +08:00
    @ysc3839 不懂 C++,所以不知道你要实现的功能是什么。
    如果是说让协程能随意 suspend resume,那么听起来像生成器。
    但是据我所知,py 协程应该不支持随意 suspend resume 。
    可能我理解有误,或者 py 水平不够。
    chenqh
        91
    chenqh  
       2021-07-20 15:53:15 +08:00
    反正我现在在用 tornado, 只为了 tornado 的异步 http 请求, mysql 用的同步, 坑我也踩过, 但是现在还行呀, 至于性能, 性能不在 py 这边呀, 就算有问题, 多 prefork 几个就没有问题了呀, 你要不爽,肯定要, 比如 ansible 如何批量重启 supervisor 进程,
    因为我现在是 一个一个重启的, 16 个进程, 就要调用 16 次, 有没有什么办法, 可以分批呢?
    ysc3839
        92
    ysc3839  
       2021-07-20 19:19:41 +08:00 via Android
    @O5oz6z3 就是想用 async function 做回调函数用,类似 js Promise 那样。
    yagamil
        93
    yagamil  
       2021-07-20 22:58:50 +08:00
    如果项目里对接了一些人工智能的项目, 估计只能 python 了.
    如果只是 crud 的话, java 也可以了
    chenqh
        94
    chenqh  
       2021-07-20 23:05:35 +08:00
    @yagamil 你这个名字,让我想起了 yagmail 这个 py 库了
    O5oz6z3
        95
    O5oz6z3  
       2021-07-20 23:49:48 +08:00
    @ysc3839 这我就不懂了,我还以为 async function 只能 await 不能用来回调。
    myCupOfTea
        96
    myCupOfTea  
       2021-07-22 08:51:37 +08:00
    @z740713651 但是数据库这些基础组件调用其实也是放线程池执行的,这样好多对外调用其实也不是真正的网络异步,不过多少还是有点用
    myCupOfTea
        97
    myCupOfTea  
       2021-07-22 08:53:00 +08:00
    @iqxd 是这样的,但是写 web 肯定要用数据库,数据库的调用都不是真异步,就很难让人信服
    z740713651
        98
    z740713651  
       2021-07-22 09:34:27 +08:00
    @myCupOfTea #96
    有异步的 mysql 啊 redis 啥的包
    因为上了 python 3.8 然后用的 fastapi
    打算都用上了(简历驱动开发)
    myCupOfTea
        99
    myCupOfTea  
       2021-07-22 09:40:42 +08:00
    @z740713651 你要先看看底层到底怎么实现异步的,是不是使用的 async 的网络调用
    但实际上,这类库为了方便基本都是用的 run_in_excutor 做的假异步(多线程)
    z740713651
        100
    z740713651  
       2021-07-22 09:50:22 +08:00
    @myCupOfTea #99
    好的 谢谢大佬

    确实很少看源代码
    除了 flask-admin
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4895 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 05:38 · PVG 13:38 · LAX 22:38 · JFK 01:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.