我正在尝试对 PHP 与 Python(以及可能我必须包括的任何其他语言)进行一些准确的运行时比较。脚本中的时间不是我的问题,但脚本中的时间并不能说明从请求运行脚本到输出的所有内容。
1)真的值得考虑这些事情吗?
2)假设值得考虑,我该怎么做?
我使用的是 Mac,所以我可以访问 Linux 命令,而且我不怕编译/创建命令来帮助我,我只是不知道如何编写这样的命令。
我正在尝试对 PHP 与 Python(以及可能我必须包括的任何其他语言)进行一些准确的运行时比较。脚本中的时间不是我的问题,但脚本中的时间并不能说明从请求运行脚本到输出的所有内容。
1)真的值得考虑这些事情吗?
2)假设值得考虑,我该怎么做?
我使用的是 Mac,所以我可以访问 Linux 命令,而且我不怕编译/创建命令来帮助我,我只是不知道如何编写这样的命令。
如果您的想法是比较语言,我会说它们之外的任何内容都与比较目的无关。
尽管如此,您可以使用 time 命令来测量所有内容,并将其与脚本中的时间进行比较。
像这样:
$ time script.php
HI!
real 0m3.218s
user 0m0.080s
sys 0m0.064s
它会给你时钟时间、用户时间(php解释器)和系统时间(操作系统时间)
如果您正在考虑 Web,那么它会变得更加困难,因为您将混合 Web 服务器开销,并且如果您使用的是 WSGI v/s mod_php,这并不总是很容易比较。然后,您还必须将探针连接到链的网络服务部分
如果您正在优化代码,则值得考虑速度。您通常应该知道为什么要优化代码(例如:现有代码库中的特定任务花费的时间太长,而不是“我听说 PHP 比 Python 慢”)。如果您实际上不打算切换语言,则不值得考虑速度。仅仅因为一个小模块做的事情稍微快一点并不意味着用另一种语言重写你的应用程序是一个好主意。除了速度之外,选择语言还有许多其他因素。
当然,您进行基准测试。多次运行这两个代码库并比较时间。如果两个脚本都可以从 shell 执行,您可以使用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 和您尝试的任何其他语言中可能存在同样的命中)。