高性能LAMP程序设计
PHP篇
Performance…
?要用array_key_exists,用isset来判断键值是否在数组中
?如有可能,采用static静态方法
?避免使用__set, __get等魔术方法 ?使用echo代替print() ?使用include、require代替include_once、require_once ?@操作符是邪恶的
?要把 count/strlen/sizeof 放到 for 循环的条件语句中
?……
好意思,今天讲这些…
Why?
循环200W次 原生获取:0. 31μs/每次
__get:1μs/每次
原生设置:0.38μs/每次 __set:1.3μs/每次
说实在的,我care这些….
But…
?代码洁癖,程序中最好要有错误,哪怕是notice
?干净的代码,非必要引入
?SQL语句要放在for循环里面执行,最好能用group by之类解决,戒者 合并写入 ?出了问题再profile你的PHP代码 ?通过auto loading 实现 lazy loading ?相比较运行速度,更需要注意memory limit,尤其是一些shell处理脚本
线上PHP监控
你的线上PHP代码运行正常吗?
偶发数据库连接失败、边界溢出、后台服务抖劢、合作方数据异常……
解决办法:
通过set_error_handler来捕获线上运行错误,统一收集日志、报警 通过register_shutdown_function来捕获fatal errors、记录运行时间
Profiling
?PHP工具: Xdebug、xhprof,戒者整体性能工具
点击下载