代码里的注释会影响性能么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Tairy
V2EX    PHP

代码里的注释会影响性能么?

  •  
  •   Tairy 2017-07-06 16:19:47 +08:00 19691 次点击
    这是一个创建于 3025 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚听说 PHP 代码发布到生产环境要去除掉代码里的注释,有这么操作的么,反正我是惊呆了!

    127 条回复    2017-07-07 23:22:07 +08:00
    1  2  
    whx20202
        1
    whx20202  
       2017-07-06 16:26:21 +08:00
    不会吧
    eoo
        2
    eoo  
       2017-07-06 16:27:30 +08:00 via Android
    Javascript JAVA Python C C++ 代码里的注释会影响性能么?
    echo1937
        3
    echo1937  
       2017-07-06 16:28:40 +08:00 via iPhone
    你太小看现代编译器的水平了
    U7Q5tLAex2FI0o0g
        4
    U7Q5tLAex2FI0o0g  
       2017-07-06 16:29:14 +08:00
    肯定不会呀
    zbl430
        5
    zbl430  
       2017-07-06 16:29:20 +08:00
    php 引擎根本不对空行和注释进行解析,直接忽略掉。它们不参与计算代码行数也不参与程序的执行,对程序执行效率也没有影响!
    你想呀,注释和空行如果会影响解析速度的话,为啥 phpDocument 里提倡大家多写注释呢!还有人说一份好的代码,有 50%以上的注释,才是正常的!
    binjoo
        6
    binjoo  
       2017-07-06 16:29:22 +08:00
    代码运行的时候注释都会去忽略掉,应该不会影响吧。

    求大神科普。
    alqaz
        7
    alqaz  
       2017-07-06 16:29:43 +08:00
    运行时要加载源码的语言肯定都会有影响,影响大小就不好说。
    phx13ye
        8
    phx13ye  
       2017-07-06 16:29:43 +08:00
    编译器词法还是语法分析阶段会帮你做
    zhanglintc
        9
    zhanglintc  
       2017-07-06 16:29:56 +08:00 via iPhone
    嗯?这么说好像还真有点可能,解释型语言毕竟判断它是注释也是要花时间的。
    mokeyjay
        10
    mokeyjay  
       2017-07-06 16:30:10 +08:00 via Android
    理论上,纯净的 php 在每次执行时都会读取源文件并解析,较大的源文件会影响读取速度
    实际上影响忽略不计,再说都直接上 opcache 或其他缓存技术了,也不会每次都读源文件
    TIGERB
        11
    TIGERB  
       2017-07-06 16:30:56 +08:00
    谁说的,叫出来聊聊
    lightening
        12
    lightening  
       2017-07-06 16:31:27 +08:00
    毕竟要多读几个字节,应该是要花时间的吧?
    honeycomb
        13
    honeycomb  
       2017-07-06 16:32:23 +08:00
    静态语言,仅会在编译时增加一点点 IO 开销
    如果是 Javascript 的情况,类似地也只有加载到内存时有可以忽略的 IO 开销,相比之下,将其从云端传输到客户端的开销会因为注释导致的 js 体积增大而增加
    sfz97308
        14
    sfz97308  
       2017-07-06 16:32:56 +08:00   1
    编译型的语言一定不会影响,因为编译的时候就已经把所有注释滤掉了。
    解释型的语言可能有一点点影响吧,毕竟运行的时候才去过滤注释。
    至于 PHP... 应该影响不大吧,毕竟是最好的语言 :doge:
    explon
        15
    explon  
       2017-07-06 16:33:43 +08:00   1
    楼主可以考虑换家公司了
    Shura
        16
    Shura  
       2017-07-06 16:34:31 +08:00 via Android
    词法分析阶段就解决了
    LINAICAI
        17
    LINAICAI  
       2017-07-06 16:35:40 +08:00
    编译型没影响,脚本型不好说,但你注释能有多少啊。
    shiny
        18
    shiny  
       2017-07-06 16:39:05 +08:00 via Android
    早年的 thinphp 会这么干,而且还会合并文件。目的大概是为了减少 IO 开销,但现代 PHP 这方面优化的已经足够好了。
    forelegance
        19
    forelegance  
       2017-07-06 16:40:28 +08:00
    缩进和注释都影响性能,恩
    lurenw
        20
    lurenw  
       2017-07-06 16:41:55 +08:00
    可能会增加一丢丢的时间,这一丢丢时间还只是 IO 的消耗,基本可以忽略不计,除非你有巨多巨多的注释
    jason2017
        21
    jason2017  
       2017-07-06 16:43:03 +08:00
    不太了解 PHP,但是 java 编译成 class 文件的时候,注释都是被忽略的。
    ps:PHP 果然是最好的语言。
    rocksolid
        22
    rocksolid  
       2017-07-06 16:45:08 +08:00
    除非你单个文件注释能到 m 级别
    qui9090
        23
    qui9090  
       2017-07-06 16:48:02 +08:00
    公司让去掉注释可能不一定是为了性能考虑的
    jun4rui
        24
    jun4rui  
       2017-07-06 16:50:21 +08:00
    20 年前我刚学变成书上就写编译器会把注释都过滤掉了。

    再换个思路,楼主你想想,注释要怎样才能产生写成 CPU 能执行的代码啊?注释根本就不会被 CPU 执行,就不能能占用 CPU 时间,自然也就不会降低运行速度,是不是?

    想通了就不会有疑问了。
    Microi
        25
    Microi  
       2017-07-06 16:50:40 +08:00   1
    可以忽略不计吧,除非你把《冰与火之歌》或者《哈利波特》拷贝到注释里。
    Tairy
        26
    Tairy  
    OP
       2017-07-06 16:51:14 +08:00
    @zbl430 我也觉得注释详细了好啊。
    @binjoo 估计会影响文件加载,运行不会影响。
    @forelegance 那 python 岂不是不活了。
    @rocksolid 整个文件都上不了 M,我就是用了 api-doc 把生成文档的东西写在注释里了。
    Chingim
        27
    Chingim  
       2017-07-06 16:52:04 +08:00 via Android
    @jun4rui php 是解释型语言,不是编译型。
    jasontse
        28
    jasontse  
       2017-07-06 16:52:29 +08:00 via iPad
    注释又不会编译成 opcode,有 opcache 在哪来的开销。
    Ouyangan
        29
    Ouyangan  
       2017-07-06 16:55:09 +08:00
    这个问题很可爱 .
    lifeiselsewhere
        30
    lifeiselsewhere  
       2017-07-06 17:00:11 +08:00
    不写注释也得找个靠谱的理由,即使是解释型语言,注释对性能的影响可以完全忽略。
    Leafove
        31
    Leafove  
       2017-07-06 17:03:00 +08:00
    有影响,但是完全可以忽略不计..

    什么?!你的项目里有 80 万行注释?!
    ahkxhyl
        32
    ahkxhyl  
       2017-07-06 17:03:07 +08:00
    看到你们在喷他 我就放心了~~
    learnshare
        33
    learnshare  
       2017-07-06 17:03:09 +08:00
    应该有影响,毕竟文件体积变大了,读硬盘的时候多了一点时间
    cxbig
        34
    cxbig  
       2017-07-06 17:05:41 +08:00
    没有影响。除非你的线上项目是不带任何缓存跑的
    damondev
        35
    damondev  
       2017-07-06 17:06:53 +08:00
    会的不写注释的 app 感觉手机都轻了几十克
    Mac
        36
    Mac  
       2017-07-06 17:15:25 +08:00
    可能只是防止代码被直接打包出售,你们的生产环境是托管的?
    sagaxu
        37
    sagaxu  
       2017-07-06 17:19:36 +08:00 via Android
    你写个 100G 的注释,看看会不会影响性能
    Deeer
        38
    Deeer  
       2017-07-06 17:24:16 +08:00
    告诉我,你是写了多少注释才想到这个问题的?
    zhuangtongfa
        39
    zhuangtongfa  
       2017-07-06 17:25:30 +08:00
    编译型只会影响编译性能,不会影响执行性能
    解释性多少会影响,比如你写个几 G 的注释试试,但是实际上影响不大,毕竟一本纯文本小说也就几 Kb,你注释再多也不会多到哪去,不写还影响可读性和维护性
    hinate
        40
    hinate  
       2017-07-06 17:27:08 +08:00
    可能会影响项目的大小吧?
    anyforever
        41
    anyforever  
       2017-07-06 17:29:09 +08:00
    你这项目是有多大啊。。
    还是从其他方面优化性能来的更快吧。
    litter123
        42
    litter123  
       2017-07-06 17:29:43 +08:00 via Android
    @zhuangtongfa 纯文本小说几 K 的,你看的小说太小,唐三合集都 40-50MB 了,普通记事本打开都得卡半天
    zjsxwc
        43
    zjsxwc  
       2017-07-06 17:31:33 +08:00   1
    我记得 Python 确实是注释越多越慢; PHP 有 opcode 之类的,而且像 symfony 这种会把代码“编译”压缩成新的 php 文件也没有这种问题。
    orderc
        44
    orderc  
       2017-07-06 17:34:12 +08:00
    变量名也要简写用 a, ac, cd,减少磁盘占用空间,且不要有任何缩进。
    Tairy
        45
    a href="/member/Tairy" class="dark">Tairy  
    OP
       2017-07-06 17:34:36 +08:00
    @lifeiselsewhere 不是找理由不写注释,只是今天突然听到这种操作,有点惊讶,才来问问的。
    @Mac 不是,都是普通的 web 代码,没啥值得保护的。
    @sagaxu 写一辈子代码估计也干不出 100 G 的注释了。
    @Deeer 只是今天突然听到这种操作,有点惊讶,才来问问的。
    @anyforever 我也觉得考虑这个就有点过度优化了。
    findmyself
        46
    findmyself  
       2017-07-06 17:42:28 +08:00
    这个问题很刁钻
    vingz
        47
    vingz  
       2017-07-06 17:45:52 +08:00
    代码先是给人看,然后才是运行的;注释必须有,不影响性能;编译器忽略注释
    y1shan
        48
    y1shan  
       2017-07-06 17:48:35 +08:00
    我会用这个给自己找懒的理由
    pangliang
        49
    pangliang  
       2017-07-06 17:50:20 +08:00
    要说会不会, 肯定会, 就算是跳过, 解释器解释的时候也需要 cpu 去 if 然后跳过啊
    但是, 这种影响 的 占比 相对其他因素, 根本不是一个量级....
    一个 php 请求用 ms 记时的话, 这种多了一点注释的影响 则是 us 级别
    cnZary
        50
    cnZary  
       2017-07-06 17:52:49 +08:00
    php 的话
    讲道理至少在 i/o 上会有点区别吧
    visionsmile
        51
    visionsmile  
       2017-07-06 17:53:31 +08:00
    C++里预处理之后注释都没有了,完全没有运行时开销!(逃
    est
        52
    est  
       2017-07-06 17:57:23 +08:00
    @zjsxwc py 里的 # 注释根本就不在 .pyc 里存在。可能是用 了 """ """ 这种导致的。
    facetest
        53
    facetest  
       2017-07-06 18:32:28 +08:00 via Android
    解释执行的话,把射雕英雄传贴进去会怎样?
    fen
        54
    fen  
       2017-07-06 18:32:52 +08:00
    来局农药压压惊
    MrMario
        55
    MrMario  
       2017-07-06 18:35:23 +08:00 via iPhone
    会,会影响网络传输,但我们去除注释主要是考虑到 js 混淆被逆,加大一些难度而已
    Tairy
        56
    Tairy  
    OP
       2017-07-06 18:41:58 +08:00
    @fen 哈哈哈 大管家别闹
    cutoutsy
        57
    cutoutsy  
       2017-07-06 18:44:27 +08:00
    去掉注释难道不是因为文件大小,生产环境一般都是去掉注释再压缩什么的
    manihome
        58
    manihome  
       2017-07-06 18:46:16 +08:00
    难道代码不应该写在一行里?(偷笑.gif )
    run2
        59
    run2  
       2017-07-06 18:57:02 +08:00
    和(说这话的)他们说话会影响代码性能的,真的!
    Tairy
        60
    Tairy  
    OP
       2017-07-06 19:12:51 +08:00
    @cutoutsy PHP 代码也有必要这么做么?
    snnn
        61
    snnn  
       2017-07-06 19:14:55 +08:00 via Android
    会啊。js 发布前都要做这个的
    sampeng
        62
    sampeng  
       2017-07-06 19:31:18 +08:00
    有这样的同事,我想会影响我的性能。。。
    Sapp
        63
    Sapp  
       2017-07-06 19:40:07 +08:00
    @honeycomb js 难道还有上线前不走一遍压缩的么?也就是那个时候占用一些 cpu 性能。我觉得 js 才是不需要担心这个问题的。
    honeycomb
        64
    honeycomb  
       2017-07-06 19:42:00 +08:00
    @Sapp
    所以说几乎不可能会考虑源代码注释对性能的影响
    Sapp
        65
    Sapp  
       2017-07-06 19:42:15 +08:00
    @litter123 我想起来以前上学看小说,唐家三少的根本看不起,别人是一天一毛几毛,看他一天能看一块多的
    jfcherng
        66
    jfcherng  
       2017-07-06 19:54:08 +08:00   1
    某些注不被忽略,你甚至可以由代取得注。
    http://php.net/manual/en/reflectionclass.getdoccomment.php
    alwayshere
        67
    alwayshere  
       2017-07-06 19:54:57 +08:00   10
    那要看你的服务器用的是水电、火电还是风电,一般来讲,用水电和火电的服务器编译器在编译 PHP 文件时性能彪悍,用风电的服务器编译 PHP 文件时性能没那么好,因为风电太缓而且柔,最好的还是核电,你把新华字典写进注释都没问题,所以一般抗 DDOS 的服务器都必须拉大亚湾核电专线
    dryyun
        68
    dryyun  
       2017-07-06 19:54:58 +08:00
    也就是注释多于代码罢了,没什么大不了。
    sagaxu
        69
    sagaxu  
       2017-07-06 20:01:11 +08:00 via Android
    @zjsxwc Python 注释只影响首次载入脚本时的性能,会影响性能的不是注释,是 docstring,会占用内存
    0915240
        70
    0915240  
       2017-07-06 20:01:31 +08:00
    像 js html 之类的,所以一般 js 都有压缩,直接加载的肯定有的,但是当然这要你的注释量有多大啊。

    编译类型的如 java,则没影响(不影响运行)。
    BB9z
        71
    BB9z  
       2017-07-06 20:02:58 +08:00
    贴主这标题误导人了吧,导致上面 60 多楼都在说性能……

    被要求的是 PHP 代码发布到生产环境去注释,会不会是团队在安全或产权保护(客户的服务器,不想给产品代码)上考虑的?

    另,应该是有工具去除的吧。
    Tairy
        72
    Tairy  
    OP
       2017-07-06 20:07:17 +08:00
    @BB9z 不是误导啊,我听到的就是会影响性能,自家代码,自家服务器,不存在代码保护问题。
    BB9z
        73
    BB9z  
       2017-07-06 20:08:48 +08:00
    @Tairy 那就无法理解了……
    sunnysign
        74
    sunnysign  
       2017-07-06 20:13:29 +08:00
    @zbl430 注释太多就像鸟屎,最好的代码是通俗易懂,遵守规则。
    fangxing204
        75
    fangxing204  
       2017-07-06 20:15:57 +08:00 via Android
    就算有,也是第一次加载文件时
    SuperMild
        76
    SuperMild  
       2017-07-06 20:21:30 +08:00
    js 大多数都会有个 min 版本,这就很能说明问题了。
    johnnie502
        77
    johnnie502  
       2017-07-06 20:26:01 +08:00 via Android
    @SuperMild js 主要考虑网络传输的开销,php 是服务器端运行,两码事
    fuyufjh
        78
    fuyufjh  
       2017-07-06 20:34:14 +08:00
    即使是动态语言,影响也可以小到忽略。不信你写个“遇到 //就跳过直到换行”的程序,吞吐量应该在 GB/s 级别
    wclebb
        79
    wclebb  
       2017-07-06 20:35:11 +08:00 via iPhone
    如果一定要去掉 zhi yi
    anyele
        80
    anyele  
       2017-07-06 21:14:12 +08:00 via Android
    太搞笑了
    luoluoluo
        81
    luoluoluo  
       2017-07-06 21:38:19 +08:00
    楼主很棒,今日最佳!

    哈哈哈哈嘿嘿嘿嘿红红火火恍恍惚惚
    leitwolf
        82
    leitwolf  
       2017-07-06 21:44:55 +08:00
    如果这都要考虑,那不用编程了。这种都能影响到性能的话,可以考虑更低级的语言,或者加点钱,升级一下硬件。
    loading
        83
    loading  
       2017-07-06 21:46:26 +08:00 via Android
    脚本需要应该有点,但微乎其微。

    实在不行,做个 js 压缩那种工具,去注释。
    qhxin
        84
    qhxin  
       2017-07-06 21:50:25 +08:00
    当年我们的程序在线上,框架的核心会是要根据 include 情况来合并到一个文件的,目的是为了减小读硬盘的次数,解析速度真的对整个请求响应时间是有影响的,严重的有几百毫秒的差距呢,当然现在上编译缓存基本不考虑这些了
    billlee
        85
    billlee  
       2017-07-06 21:57:25 +08:00
    @qhxin #84 应该不是读硬盘次数吧,而是解释器的系统调用次数吧。硬盘应该是最开始读一遍后面就都在 page cache 里了。
    mingyun
        86
    mingyun  
       2017-07-06 22:19:23 +08:00
    还有这种操作
    sindy
        87
    sindy  
       2017-07-06 22:51:37 +08:00 via iPhone
    @Microi 一边阅读代码一边把小说看完了
    ms2008
        88
    ms2008  
       2017-07-06 22:54:02 +08:00
    ricemo
        89
    ricemo  
       2017-07-06 23:05:41 +08:00
    论大学《编译原理》课程重要性
    scriptB0y
        90
    scriptB0y  
       2017-07-06 23:08:09 +08:00
    真的会影响性能,如果不去掉注释发布的时候性能会快一些
        91
    SlipStupig  
       2017-07-06 23:13:53 +08:00
    @zjsxwc python 用文档符会有但是,注释符不会有的,因为 python 是 AST 生成代码的,不存在你说的这种问题
    ikaros
        92
    ikaros  
       2017-07-06 23:29:12 +08:00
    影响写代码的效率 和 别人维护的效率
    akira
        94
    akira  
       2017-07-07 00:41:23 +08:00
    过度优化了。 最大的可能影响的地方就是加载 php 文件时候的 io 损耗了,但是,如果你们到了需要计较这点损耗的时候,早就上编译缓存了啦
    Perry
        95
    Perry  
       2017-07-07 04:08:04 +08:00
    只有 HTML JS CSS 才需要吧。。。
    popbones
        96
    popbones  
       2017-07-07 06:08:38 +08:00
    应该是有影响,不过想要体验到这个估计除非你的源码很大很大,比如 1G 的源码,半个 G 的注释,或者从 5 寸盘读取源码估计能体验到
    Monstercat
        97
    Monstercat  
       2017-07-07 08:28:45 +08:00 via Android
    理论上肯定会的 毕竟要多读一些文本 解释性语言就是解释的时候慢 编译性就是编译的时候。。然而几乎可以完全忽略不计。。
    keikeizhang
        98
    keikeizhang  
       2017-07-07 08:38:56 +08:00
    忽略不计
    jedicxl
        99
    jedicxl  
       2017-07-07 08:40:58 +08:00 via iPhone
    不会影响性能,会影响性功能
    loongwang
        100
    loongwang  
       2017-07-07 09:09:22 +08:00
    编译原理没好好学吧
    1  2  
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5344 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 08:31 PVG 16:31 LAX 01:31 JFK 04:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86