比较运行时

时间:2020-03-05 18:53:13  来源:igfitidea点击:

我正在尝试对PHP与Python(以及可能包括的任何其他语言)进行准确的运行时比较。脚本内的时间并不是我的问题,但是脚本内的时间并不能解决从发出运行脚本的请求到输出的所有问题。

1) Is it actually worth taking such things into account?
  
  2) Assuming it is worth taking it into account, how do I do this?

我使用的是Mac,因此可以访问Linux命令,并且不怕编译/创建命令来帮助我,我只是不知道如何编写这样的命令。

解决方案

回答

如果想法是比较语言,那么我想说它们之外的任何内容都与比较目的无关。

但是,我们可以使用time命令测量所有内容,并将其与脚本中的计时进行比较。

像这样:

$ time script.php
HI!

real    0m3.218s
user    0m0.080s
sys     0m0.064s

它将为我们提供时钟时间,用户时间(php解释器)和系统时间(操作系统时间)

如果我们正在考虑使用Web,那么它将变得更加困难,因为我们可能会混用Web服务器的开销,如果我们使用的是WSGI v / s mod_php,这并不总是那么容易比较。然后,我们还必须将探针挂接到链的Web服务部分中

回答

  • 如果要优化代码,则值得考虑速度。通常,我们应该知道为什么要优化代码(例如:现有代码库中的特定任务花费的时间太长,而不是"我听说PHP比Python慢​​")。如果我们实际上没有计划切换语言,则不值得考虑速度。仅仅因为一个微小的模块可以更快地完成某件事,并不意味着用另一种语言重写应用是一个好主意。除了速度以外,还有很多其他因素可以选择一种语言。
  • 我们当然可以进行基准测试。多次运行两个代码库,并比较时间。如果两个脚本都可以从外壳程序执行,则可以使用time命令,也可以使用每种语言各自的基准测试功能。当然,后一种情况在很大程度上取决于实际语言。

回答

好了,我们可以使用"时间"命令来帮助:

you@yourmachine:~$ time echo "hello world"
hello world

real    0m0.000s
user    0m0.000s
sys 0m0.000s
you@yourmachine:~$

这将避免环境之外的时间。

至于我们是否需要真正安排额外的工作时间,这完全取决于工作。我认为这是针对某种类型的Web应用程序的,所以这取决于我们使用的框架的实际工作方式...它是否缓存某种已编译(或者解析)的脚本版本?如果是这样,则启动时间将完全不相关(因为第一次命中将是存在启动时间的唯一时间)。

另外,请确保循环运行测试,以便我们可以打折第一次运行(如果需要,可以在报告中包括第一次运行的成本)。我已经用Java做过一些测试,由于JIT的工作,第一次运行总是最慢的(并且PHP,Python和我们尝试使用的其他任何语言都可能遇到相同的问题)。