php在没有警告的情况下运行得更快吗?

2022-08-30 11:26:11

由于PHP代码即使充斥着有关未定义索引和非静态方法被调用为静态等的警告和通知,也可以正常运行,问题是,如果我花时间从代码中删除所有通知和警告,它会运行得更快吗?


答案 1

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

以下是数字,以帮助不读法语的人:

  • 10k 个通知,带和启用:5,162.76 毫秒error_reportingdisplay_errors
  • 相同,但禁用:136.18 msdisplay_errors
  • 相同,但也禁用:117.79 mserror_reporting
  • 最后,在修补代码后,它不再产生任何通知:19.51 ms

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


Derick Rethans在本文中说了同样的事情:应该避免使用shut-op运算符(@)的五个原因(引用):

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

每当PHP在内部生成错误消息时,它就会被处理和格式化,直到完全格式化的消息可以直接输出到浏览器。
只有在显示之前,才会检查设置。但是,这与 @-operator 并不完全相关。
错误消息在选中之前始终是完全格式化的,或者就此而言。error_reportingerror_reportingdisplay_errors


答案 2

这取决于警告的数量,但是PHP中的错误处理是相对昂贵的,即使在隐藏错误消息时也是如此。

要估计C级的性能分析,您需要做的就是:安装valgrind(假设您在Linux上),然后运行

callgrind /path/to/bin/php /path/to/script.php

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

这样做时,请注意缓存和valgrind文档,并注意涉及许多依赖于系统的变量。

编辑:哦,还有一点注意:我假设在与数据库和类似系统交谈时花费更多的时间。还有另一个额外的注意事项:修复通知通常会使代码在将来的更改中更加健壮,因此这是一个独立于性能的好主意。


推荐