当前位置:  开发笔记 > 编程语言 > 正文

评论会影响Perl的性能吗?

如何解决《评论会影响Perl的性能吗?》经验,为你挑选了4个好方法。

我正在优化一些经常运行的Perl代码(每个文件每天一次).

评论是否会降低Perl脚本的速度?我的实验倾向于否:

use Benchmark;
timethese(20000000, {
    'comments' => '$b=1;
# comment  ... (100 times)
', 'nocomments' => '$b=1;'});

提供几乎相同的值(除了噪音).

Benchmark: timing 10000000 iterations of comments, nocomments...
  comments:  1 wallclock secs ( 0.53 usr +  0.00 sys =  0.53 CPU) @ 18832391.71/s (n=10000000)
nocomments:  0 wallclock secs ( 0.44 usr +  0.00 sys =  0.44 CPU) @ 22935779.82/s (n=10000000)

Benchmark: timing 20000000 iterations of comments, nocomments...
  comments:  0 wallclock secs ( 0.86 usr + -0.01 sys =  0.84 CPU) @ 23696682.46/s (n=20000000)
nocomments:  1 wallclock secs ( 0.90 usr +  0.00 sys =  0.90 CPU) @ 22099447.51/s (n=20000000)

如果我将评论和无评论版本作为单独的Perl脚本运行,我会得到类似的结果.

这似乎是违反直觉的,如果没有别的解释器每次都需要将注释读入内存.



1> Will Hartung..:

运行时性能?没有.

解析和lexing性能?当然是.

由于Perl倾向于动态解析和lex,因此注释将影响"启动"性能.

他们会明显地影响它吗?不太可能.



2> Schwern..:

Perl是一种即时编译语言,因此注释和POD对运行时性能没有影响.

注释和POD对编译时间有一个微不足道的影响,但它们对于Perl解析它来说非常容易和快速,几乎不可能测量性能.你可以通过使用-c标志来编译来自己看到这个.

在我的Macbook上,一个包含2个语句和1000行70个字符注释的Perl程序需要相同的时间来编译为1000行空注释,只有2个打印语句.确保运行每个基准测试两次以允许您的操作系统缓存文件,否则您要进行基准测试的是从磁盘读取文件的时间.

如果启动时间对您来说是一个问题,那不是因为评论和POD.



3> Jonathan Lef..:

Perl编译脚本然后执行它.注释略微减慢了编译阶段,但对运行阶段没有影响.



4> Michael Carm..:

Perl不是一种与shell脚本相同的脚本语言.解释器不会逐行读取文件.Perl程序的执行在两个基本阶段完成:编译和运行时[1].在编译阶段,源代码被解析并转换为字节码.在运行时阶段,字节码在虚拟机上执行.

注释将减慢解析阶段,但与解析脚本本身所需的时间相比,差异可以忽略不计(对于大多数程序来说,这已经非常小了).关于解析时间的唯一时间是在Web服务器环境中,每秒可以多次调用程序.mod_perl的存在是为了解决这个问题.

你正在使用Benchmark.非常好!您应该寻找改进算法的方法 - 而不是微优化.Devel :: DProf可能有助于找到任何热点.你绝对不应该在误导性的尝试中剥离评论,以使你的程序更快.你只会让它不可维护.


[1]这通常被称为"及时"编译.Perl中实际上有几个阶段一样INIT,并END没有在这里无关紧要.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有