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

46

PHP代码即使有未定义的索引和将非静态方法作为静态方法调用等警告和提示信息,也可以正常运行。因此问题是,如果我花时间从我的代码中删除所有提示和警告,它会运行得更快吗?

3个回答

104
我收藏了一篇文章,作者在其中进行了一些基准测试;不幸的是,它是用法语写的...但是这里有链接(也许你能理解其中的一些部分)Ne faites pas d'erreur

以下是数字,以帮助那些不懂法语的人:

  • 启用error_reportingdisplay_errors的10k个通知:5,162.76毫秒
  • 相同,但禁用display_errors:136.18毫秒
  • 相同,但同时禁用error_reporting:117.79毫秒
  • 最后,在修补代码以不再产生任何通知后:19.51毫秒

这意味着,是的,即使不显示或报告通知/警告/错误,PHP代码运行速度也会更快。


Derick Rethans在这篇文章中也说了同样的话:Five reasons why the shut-op operator (@) should be avoided (引用)

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

每当PHP在内部生成错误消息时,它会被处理和格式化,直到完全格式化的消息可以直接输出到浏览器为止。
只有在显示之前才会检查error_reporting设置。然而,这与@-operator无关。
在检查error_reporting之前,错误消息总是被完全格式化。

display_errors 是与此相关的一个IT技术术语。

20
哦,发布后我意识到:这是我的第1000个回答 ^^ - Pascal MARTIN
13
最终测试加1分。注意事项和警告是最糟糕的错误,因为它们不会立即强制您修复问题。数组索引缺失很容易修复,但往往被忽视。个人而言,我将每个注意事项/警告都视为E_FATAL。 - Dereleased
1
现在有一个问题,那就是错误检查是否会比处理程序更加耗时。我的意思是:测试是否存在等操作。别误会:我讨厌警告和提示。最近我得到了这样一个项目,但上述结果并没有让我信服要投入精力。 - Galvani

8

根据警告的数量而定,但即使隐藏错误消息,PHP中的错误处理也是相对昂贵的。

要估计影响,您需要在C级别上进行分析:安装valgrind(假设您在Linux上),然后运行

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

这会生成一个名为callgrind.12345(或类似的)文件,请将该文件加载到诸如kcachegrind之类的应用程序中,查找php_error_docref0php_error_cb了解错误处理程序中花费的时间。

使用cachegrind和valgrind文档时请注意,同时还要注意存在许多依赖于系统的变量。

编辑:哦,还有一点需要注意:我认为在与数据库和类似系统交互时,花费的时间要比处理错误多得多。另外,修复提示通常使代码更加健壮,以适应未来的更改,因此无论性能如何,这都是一个好主意。


2
我不会完全称之为“显著”的改进,但是运行不产生任何错误的代码自然比每隔一行就生成堆栈跟踪的代码运行得更快。
请查看:http://www.noamdesign.com/Web-Design-Blog/15-tips-to-optimizing-your-php-code/,了解有关您可以对代码进行的微小优化的更多信息。
根据我的经验,95%的代码优化通常涉及如何使用数据库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接