V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shellquery
V2EX  ›  程序员

各大主流语言 web 框架代码行数对比

  •  2
     
  •   shellquery · 2018-05-05 12:54:34 +08:00 · 9003 次点击
    这是一个创建于 2154 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Go

    1. gin 4762
    2. echo 4903
    3. iris 27854 肿
    4. buffalo 9391

    Node

    1. koa 1667
    2. express 4051
    3. sails 17100 肿

    Python

    1. tornado 21666
    2. werkzeug 20801
    3. flask 7489
    4. bottle 3756
    5. web.py 10830
    6. django 119701 泰肿

    Ruby

    1. sinatra 2580
    2. grape 7229
    3. rails 130379 泰肿

    Java

    1. spring-core 75207 装着没看见
    2. spring-aop 25984
    3. spring-web 49017
    4. spring-webmvc 60246
    5. spring-beans 51070
    6. spring-context 76356
    7. spring-boot 50847

    统计方法

    统计的时候我发现有些框架的代码比我想象的大的太多,所以我对这些代码量大的代码进行了反复统计,去掉路径包含 test/example/benchmark/vendor 等的代码,进行 wc -l 汇聚得到的最终结果。

    这样直接对比对某些框架来说是不公平的。有些框架注释比较多,有些框架几乎没有注释。我的统计方法里面没有把注释去掉。不过注释并不是最重要的区别,最大的区别在于有些框架是微内核,有些框架是 full-stack 的。fullstack 的框架可以直接拿来即用,而微内核一般还需要引入额外的插件和扩展才能达到相似的效果。

    从源码学习角度来说,自然还是应该选择微内核的,代码量大了阅读起来会是一头雾水。微内核短小精悍,浓缩的都是精华。

    学习源码的相关链接

    1. https://github.com/pyloque/httpkids 1200 行代码的 Java Web 框架
    2. https://github.com/pyloque/ormkids 2000 行代码的 Java ORM 框架
    3. https://github.com/pyloque/rpckids 700 行代码的 Java RPC 框架
    4. https://github.com/pyloque/iockids 200 行代码的 Java 依赖注入框架

    最后请允许我同情一下 Java 程序员,表示他们真得很幸苦。

    52 条回复    2018-06-11 16:16:53 +08:00
    ofooo
        1
    ofooo  
       2018-05-05 13:22:45 +08:00
    python 比 go 差好多啊~~~
    ioth
        2
    ioth  
       2018-05-05 14:09:02 +08:00
    有钱人住别墅,没钱人住单间。
    搞 java 的人都特别有钱。
    ipwx
        3
    ipwx  
       2018-05-05 14:17:41 +08:00
    1、统计代码请用 cloc
    2、Flask 依赖 werkzeug,只看 Flask 的行数,和其他对比的话,不公平。
    rogwan
        4
    rogwan  
       2018-05-05 14:27:17 +08:00 via Android
    django 和 rails 以及 java 框架说明太肿才是大众需要的嘛
    shellquery
        5
    shellquery  
    OP
       2018-05-05 14:28:55 +08:00 via Android
    @ipwx 感谢推荐
    shellquery
        6
    shellquery  
    OP
       2018-05-05 14:29:13 +08:00 via Android
    @rogwan 这话我没法反驳
    shellquery
        7
    shellquery  
    OP
       2018-05-05 14:30:07 +08:00 via Android
    @ipwx 在理
    dobelee
        8
    dobelee  
       2018-05-05 14:31:51 +08:00 via Android   ❤️ 1
    说到 web 框架,php 是世界上最好的语言。
    MeteorCat
        9
    MeteorCat  
       2018-05-05 14:38:59 +08:00
    @dobelee 哈哈哈,我就知道会有这个
    lhx2008
        10
    lhx2008  
       2018-05-05 15:29:39 +08:00 via Android
    java 没什么语法糖,spring 又自己造了大量轮子(光是解析 xml 都不知道多少行),基本没什么依赖
    要是 js 的框架把依赖包的行数算上,恐怕是几百万行吧。。。[滑稽]
    tabris17
        11
    tabris17  
       2018-05-05 15:33:09 +08:00   ❤️ 2
    不看依赖统计行数就是耍流氓
    sagaxu
        12
    sagaxu  
       2018-05-05 15:33:12 +08:00 via Android
    行数=功能*语言啰嗦程度
    chinafu
        13
    chinafu  
       2018-05-05 15:33:28 +08:00
    php 是世界上最好的语言...................哈哈哈,我就知道会有这个
    icy37785
        14
    icy37785  
       2018-05-05 15:35:15 +08:00 via iPhone
    为什么主流语言,web 框架这两个关键字下看不到我们全宇宙最好的语言 PHP。。。这不是我大 PHP 的主战场么。。。
    LeungJZ
        15
    LeungJZ  
       2018-05-05 15:40:05 +08:00
    为啥没有 PHP ?
    JS 如果算上 node_modules 估计有 100w 行吧。
    linxl
        16
    linxl  
       2018-05-05 15:43:52 +08:00
    这是不算上它的扩展包吗?
    zn
        17
    zn  
       2018-05-05 15:44:04 +08:00
    这个不能简单评判的,不能说代码简洁就是好,也不能说代码多就厉害。

    代码少可能是简洁高效了,然而代码少意味着功能肯定少,后果就是要做一个东西往往要每个轮子都要自己造,累还不说,代码质量比成熟框架差远了,各种 bug 和漏洞不要太多。。。。。
    fork3rt
        18
    fork3rt  
       2018-05-05 15:51:06 +08:00 via Android
    没有 PHP 叫什么 Web, LOL
    e9e499d78f
        19
    e9e499d78f  
       2018-05-05 15:57:36 +08:00
    测试写得多岂不是很吃亏
    Kilerd
        20
    Kilerd  
       2018-05-05 16:00:28 +08:00   ❤️ 1
    go 有一个很完善的 net/http,node 有一个 http

    这能比? KOA 真正核心的代码,即便算上 koa-compose 也不到几百行。
    python 不用 wsgi,自己写一个 HTTP 解析库都几千行了。

    无谓的 benchmark,没意义
    prolic
        21
    prolic  
       2018-05-05 16:20:52 +08:00 via Android
    别跨语言看,看看同种语言内各个框架的差异,不同语言基础库差异是巨大的
    wellsc
        22
    wellsc  
       2018-05-05 16:26:57 +08:00   ❤️ 1
    cloc 了解一下
    zjsxwc
        23
    zjsxwc  
       2018-05-05 16:29:37 +08:00 via Android
    最好的 web 开发语言 PHP 已经不懈与比较了 2333
    Zh1
        24
    Zh1  
       2018-05-05 16:39:38 +08:00
    竟然没有 PHP
    agagega
        25
    agagega  
       2018-05-05 16:54:19 +08:00 via iPhone
    且不论楼主的标准是否客观。Rails 作者说得好,很多时候所谓的精简意味着你想要某个功能的时候还得去从一堆库中选择一个,集成得还不一定好,到头来可能变得更臃肿。
    xiongshengyao
        26
    xiongshengyao  
       2018-05-05 17:02:29 +08:00
    介个…… flask 是依赖 werkzeug 的吧
    learnshare
        27
    learnshare  
       2018-05-05 17:02:58 +08:00
    看行数意义不大,要看功能、易用性和扩展性,性能都不是主要的关注点
    cheesea
        28
    cheesea  
       2018-05-05 17:19:27 +08:00
    还是去掉注释再计算吧,有些框架注释比代码还多,直接是把文档包含在代码里面了。
    cheesea
        29
    cheesea  
       2018-05-05 17:20:52 +08:00
    而且像 flask 其实代码只有不到 3000 行,但是它严重依赖于 werkzeug,直接统计 flask 行数,其实没什么意义。
    shellquery
        30
    shellquery  
    OP
       2018-05-05 17:27:11 +08:00 via Android
    @cheesea 你们就不能明白作者为什么要把 werkzeug 也列进去的原因么,而且还故意和 flask 放在一起
    TomorJM
        31
    TomorJM  
       2018-05-05 17:33:08 +08:00
    毫无意义~
    Jackeriss
        32
    Jackeriss  
       2018-05-05 17:38:26 +08:00
    好大一颗红宝石!
    ccino
        33
    ccino  
       2018-05-05 17:42:31 +08:00
    好大一个娃娃~~
    sonyxperia
        34
    sonyxperia  
       2018-05-05 19:45:49 +08:00
    就知道 Java 又中枪了……
    xAx
        35
    xAx  
       2018-05-05 20:09:04 +08:00
    来来来,来个会吹牛的给我解释下,我那一个加上图片才 3M 大的小项目,那几百兆的 node_modules 里是什么。你跟我说我用的框架就几千行代码?

    照这么算,我能写出一个没有代码的 java 框架,一个 pom.xml 就行了。

    不能这么算代码行数吧?
    miketeam
        36
    miketeam  
       2018-05-05 20:34:33 +08:00 via iPhone
    又引起语言之针(^^)。 不说了,万能的 php,没有之一
    janus77
        37
    janus77  
       2018-05-05 20:45:26 +08:00 via Android
    语言之间比行数并没有什么卵用,谁都知道 java 写法不简洁…
    还是语言内部比吧
    btw,ruby 可以算主流么…
    orangeade
        38
    orangeade  
       2018-05-05 20:54:04 +08:00 via Android
    django, tornado 都和 Facebook 有关系,有意思
    88250
        39
    88250  
       2018-05-05 20:57:16 +08:00
    golang 换 logo 了....
    murmur
        40
    murmur  
       2018-05-05 21:46:06 +08:00
    js 没依赖多少代码但是你发现 node_modules 里有一百来个包。。。
    loading
        41
    loading  
       2018-05-05 21:55:54 +08:00 via iPhone
    web.py 居然比 flask 要多,吓到我了。
    FaiChou
        42
    FaiChou  
       2018-05-05 22:07:47 +08:00 via iPhone
    react 呢?
    shellquery
        43
    shellquery  
    OP
       2018-05-05 22:49:02 +08:00
    @FaiChou react 是客户端,这里怼的是服务端
    shellquery
        44
    shellquery  
    OP
       2018-05-05 22:51:40 +08:00
    @murmur 你说的是 dev 依赖,不考虑 dev 依赖,一个纯粹的 web 服务器也会有很多依赖包,但是不至于 100 来个
    murmur
        45
    murmur  
       2018-05-05 23:04:17 +08:00
    @shellquery dev 依赖咋就不算依赖了呢
    按你这么算 java 打出来就一个 war 包呢
    shellquery
        46
    shellquery  
    OP
       2018-05-05 23:12:01 +08:00 via Android
    @murmur dev 依赖是可选依赖,你完全可以不使用 dev 依赖
    ylcc
        47
    ylcc  
       2018-05-05 23:39:45 +08:00
    tornado 不只是是一个 web 框架,里面还实现了自己的异步网络库,感觉不能这么跟 flask 比较。。。ps:行数的比较似乎不是很有意义
    conn4575
        48
    conn4575  
       2018-05-06 02:00:25 +08:00 via Android
    突然觉得 tornado 真是不简单,和 werkzeug+flask 差不多的代码量,功能比后者多了许多,还包括自己实现了 asyncio,web 框架源码学习的典范!
    swat199538
        49
    swat199538  
       2018-05-06 10:39:49 +08:00
    web 方面居然没有 PHP ?
    faywong8888
        50
    faywong8888  
       2018-05-06 11:27:23 +08:00 via Android
    竟然没有 lisp/clojure ?
    shellic
        51
    shellic  
       2018-05-06 11:41:49 +08:00 via Android
    PHP 表示不服
    bestkayle
        52
    bestkayle  
       2018-06-11 16:16:53 +08:00
    web 框架没有 PHP 的是几个意思
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3156 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 13:02 · PVG 21:02 · LAX 06:02 · JFK 09:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.