题
我正在尝试对 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 和您尝试的任何其他语言中也可能存在同样的问题)。