由于PHP代码运行得很好,即使它有关于未定义索引的警告和通知以及被称为静态等的非静态方法,问题是,如果我花时间删除我的所有通知和警告代码运行显着更快?
答案 0 :(得分:81)
我为一篇文章添加了书签,其中作者对此做了一些基准测试;不幸的是,这是法语...但这里是(也许你会理解它的某些部分):Ne faites pas d'erreur
以下是数字,以帮助那些不读法语的人:
error_reporting
和display_errors
的10k通知:5,162.76 ms display_errors
:136.18 ms error_reporting
:117.79 ms 这意味着,是的,PHP代码运行得更快,没有通知/警告/错误,即使没有显示也没有报告。
Derick Rethans在本文中说同样的事情:Five reasons why the shut-op operator (@) should be avoided (引用):
原因3:它很慢(第2部分)
每当PHP生成错误 内部消息,它被处理和 格式一直到完全格式化 格式化的消息,可以 直接输出到浏览器 只是在它显示之前 检查
error_reporting
设置。 然而,这与此无关 @ -operator独家。
错误 消息只是始终完全格式化 在检查error_reporting
之前 - 或display_errors
就此而言。
答案 1 :(得分:8)
取决于警告的数量,但PHP中的错误处理是,即使隐藏错误消息,相对昂贵。
估计效果的方法是在C级别进行分析:安装valgrind(假设您使用的是Linux),然后运行
callgrind /path/to/bin/php /path/to/script.php
这会生成一个名为callgrind.12345
左右的文件,将此文件加载到kcachegrind这样的应用中,然后查找php_error_docref0
或php_error_cb
以查看花费了多少时间错误处理程序。
请注意cachegrind和valgrind文档,并注意涉及许多与系统相关的变量。
编辑:哦,还有一点需要注意:我认为方式在与数据库和类似系统交谈时花费的时间更多。还有另一个注意事项:修复通知通常会使代码对未来的更改更加健壮,因此这是一个独立于性能的好主意。
答案 2 :(得分:2)
对于大多数情况,我不会称之为“重大”改进,但运行不会产生任何类型错误的代码自然比必须每隔一行生成堆栈跟踪的代码运行得快。
请查看:http://www.noamdesign.com/Web-Design-Blog/15-tips-to-optimizing-your-php-code/,了解有关您可以对代码进行细微优化的更多信息。
根据我自己的经验,我发现95%的代码优化通常会处理您使用数据库的方式。