比较运行时间
我想对比一下PHP和Python的运行时间,可能还会包括其他语言。脚本内部的计时对我来说不是问题,但脚本内部的计时并不能涵盖从请求开始到输出的整个过程。
1) 其实考虑这些因素是否真的有必要呢?
2) 如果真的有必要考虑,那我该怎么做呢?
我在用Mac,所以可以使用Linux命令,我也不怕自己编写命令来帮助我,只是我不知道该怎么写这样的命令。
3 个回答
好吧,你可以使用“time”命令来帮助你:
you@yourmachine:~$ time echo "hello world"
hello world
real 0m0.000s
user 0m0.000s
sys 0m0.000s
you@yourmachine:~$
这样可以避免在环境外进行计时。
至于你是否真的需要计时那些额外的工作……这完全取决于你在做什么。我猜这可能是某种网页应用,所以这要看你使用的框架是怎么工作的……它是否缓存了一种编译过的(或解析过的)脚本版本?如果是这样,那么启动时间就完全不重要了(因为只有第一次访问时才会有启动时间)。
另外,确保在循环中运行你的测试,这样你就可以忽略第一次运行的结果(如果你想的话,也可以把第一次运行的时间算在你的报告里)。我在Java中做过一些测试,第一次运行总是最慢的,因为JIT在工作(在PHP、Python和你尝试的其他语言中也可能会有类似的情况)。
在优化代码的时候,考虑速度是很重要的。你应该清楚自己为什么要优化代码,比如说:你发现现有代码中的某个任务运行得太慢,而不是单纯地听说“PHP比Python慢”。如果你并不打算换语言,那么考虑速度就没必要了。仅仅因为某个小模块运行得稍微快一点,并不意味着把整个应用换成另一种语言就是个好主意。选择编程语言时,除了速度,还有很多其他因素需要考虑。
当然,你需要进行基准测试。多次运行这两个代码,比较它们的执行时间。如果两个脚本都可以在命令行中执行,你可以使用time命令,或者使用各自语言的基准测试功能;后者的使用方法会根据具体语言有所不同。
如果你的想法是比较不同的编程语言,我觉得其他的东西就不太相关了。
不过,你可以使用时间命令来测量所有的东西,然后把它和脚本内部的时间进行比较。
像这样:
$ time script.php
HI!
real 0m3.218s
user 0m0.080s
sys 0m0.064s
这样做会给你显示时钟时间、用户时间(php解释器的时间)和系统时间(操作系统的时间)。
如果你在考虑网页相关的内容,那就会变得更复杂,因为你需要考虑到网页服务器的开销,这样的比较就不那么简单了,比如说,你在使用WSGI和mod_php的时候。那样的话,你还得在网页服务的各个环节中插入一些探针来进行测量。