PHP代码即使有未定义的索引和将非静态方法作为静态方法调用等警告和提示信息,也可以正常运行。因此问题是,如果我花时间从我的代码中删除所有提示和警告,它会运行得更快吗?
PHP代码即使有未定义的索引和将非静态方法作为静态方法调用等警告和提示信息,也可以正常运行。因此问题是,如果我花时间从我的代码中删除所有提示和警告,它会运行得更快吗?
以下是数字,以帮助那些不懂法语的人:
error_reporting
和display_errors
的10k个通知:5,162.76毫秒display_errors
:136.18毫秒error_reporting
:117.79毫秒这意味着,是的,即使不显示或报告通知/警告/错误,PHP代码运行速度也会更快。
Derick Rethans在这篇文章中也说了同样的话:Five reasons why the shut-op operator (@) should be avoided (引用):
原因3:它很慢(第2部分)
每当PHP在内部生成错误消息时,它会被处理和格式化,直到完全格式化的消息可以直接输出到浏览器为止。
只有在显示之前才会检查error_reporting
设置。然而,这与@-operator无关。
在检查error_reporting
之前,错误消息总是被完全格式化。
display_errors
是与此相关的一个IT技术术语。根据警告的数量而定,但即使隐藏错误消息,PHP中的错误处理也是相对昂贵的。
要估计影响,您需要在C级别上进行分析:安装valgrind(假设您在Linux上),然后运行
callgrind /path/to/bin/php /path/to/script.php
这会生成一个名为callgrind.12345
(或类似的)文件,请将该文件加载到诸如kcachegrind之类的应用程序中,查找php_error_docref0
或php_error_cb
了解错误处理程序中花费的时间。
使用cachegrind和valgrind文档时请注意,同时还要注意存在许多依赖于系统的变量。
编辑:哦,还有一点需要注意:我认为在与数据库和类似系统交互时,花费的时间要比处理错误多得多。另外,修复提示通常使代码更加健壮,以适应未来的更改,因此无论性能如何,这都是一个好主意。