php没有警告会运行得更快吗?

Spu*_*uds 39 php performance

因为PHP代码运行得很好,即使它有关于未定义索引的警告和通知以及被称为静态等的非静态方法,问题是,如果我花时间从我的代码中删除所有通知和警告将它跑得快得多?

Pas*_*TIN 85

我给一篇文章添加了书签,其中作者对此做了一些基准测试; 不幸的是,这是法语...但在这里(也许你会理解它的一些部分):Ne faites pas d'erreur

这里有数字,以帮助那些不读法语的人:

  • 10k通知,启用error_reportingdisplay_errors启用:5,162.76 ms
  • 相同,但有display_errors残疾人:136.18毫秒
  • 相同,但也有error_reporting禁用:117.79毫秒
  • 最后,在修补代码之后,它不再产生任何通知:19.51 ms

这意味着,是的,PHP代码运行得更快,没有通知/警告/错误,即使没有显示也没有报告.


Derick Rethans在本文中说了同样的事情:为什么应该避免关闭操作符(@)的五个原因 (引用):

原因3:它很慢(第2部分)

每当PHP在内部生成错误消息时,它都会被处理并格式化,直到完全格式化的消息,可以直接输出到浏览器.
仅在显示之前 error_reporting检查设置.但是,这与@ -operator无关.
error_reporting检查之前,或者 display_errors就此而言,错误消息总是完全格式化.

  • 嗯,我发帖后意识到:这是我的第1000个答案^^ (16认同)
  • +1为最终测试.通知和警告是您最严重的错误,因为它们不会强迫您立即解决问题.缺少数组索引很容易修复,但很少解决.就个人而言,我将每个通知/警告视为E_FATAL. (11认同)

joh*_*nes 8

取决于警告的数量,但PHP中的错误处理,即使隐藏错误消息,也相对昂贵.

你需要做些什么来估计效果是在C级上进行分析:安装valgrind(假设你在Linux上)然后运行

callgrind /path/to/bin/php /path/to/script.php
Run Code Online (Sandbox Code Playgroud)

这会生成一个名为callgrind.12345左右的文件,将此文件加载到像kcachegrind这样的应用程序中,查找php_error_docref0php_error_cb查看错误处理程序花费了多少时间.

这样做时请注意cachegrind和valgrind文档,并注意涉及许多与系统相关的变量.

编辑:哦,更多的一个音符:我假设的方式,一边给数据库和类似系统有更多的时间是花在.另外还有一个注意事项:修复通知通常会使代码在未来的更改中更加健壮,因此独立于性能是一个好主意.