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

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

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

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

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

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

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

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

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