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

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

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

    刚听说 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
    你太小看现代编译器的水平了
    littleylv
        4
    littleylv  
       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
    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 )
    sobigfish
        59
    sobigfish  
       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
    0xvincebye
        89
    0xvincebye  
       2017-07-06 23:05:41 +08:00
    论大学《编译原理》课程重要性
    scriptB0y
        90
    scriptB0y  
       2017-07-06 23:08:09 +08:00
    真的会影响性能,如果不去掉注释发布的时候性能会快一些
    SlipStupig
        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   ·   实用小工具   ·   994 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 21:18 · PVG 05:18 · LAX 13:18 · JFK 16:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.