PHP 语言级性能优化 -- 可使用ab压力测试工具进行测试;
1、多使用系统内置函数;
2、系统内置函数之间的性能也不一样,选择较好的函数;如 isset 与 array_key_exist , isset 耗时更短;
3、尽量少用php魔法函数,因为魔法函数性能不佳;
4、禁用错误抑制符 @ ,会产生额外开销;正常使用try throw 抛出错误 ;
5、合理使用内存,用unset() 或者 $变量 = null释放内存;
1)、unset()函数只能在变量值占用内存空间超过256字节时才会释放内存空间
2)、unset()函数需要删除所有指向变量才会释放内存;如 $a = 1; $b = &$a ; 需要将$a及$b都unset才会释放;
6、尽量少用正则表达式;
7、避免在循环内做计算;
$s = 'abc'; // 在循环内计算字符串长度,会被重复计算;
for($i = 0; $i < strlen($s); $i++){ //代码块 }
// 优化方式
$len = strlen($s);
for($i = 0; $i < $len; $i++){ //代码块 }
8、减少计算密集型业务;(不适合大批量数据处理)
9、务必使用带引号字符串作为键值;(减少查找常量的开销)
define('key',"hhh");
$a = [ 'key' => "hello world"; ];
echo $a[key]; //会产生额外开销
echo $a['key']; //不会
10、不需要解析的字符串 最好用单引号;
11、requiere_once()比较耗资源;
这是因为requiere_once需要判断该文件是否被引用过),所以能不用尽量不用。常用require/include方法避免
12、引用路径尽量使用绝对路径,减少相对路径查询;
13、如果你需要得到接口请求的时间,$_SERVER['REQUSET_TIME']优于time();
14、建立一个对象属性(类里面的变量)例如($this->prop) 比局部变量要慢3倍;
15、某些地方使用isset代替strlen
举例如下)
if (strlen($foo) < 5) { echo “Foo is too short”
}
(与下面的技巧做比较)
if (!isset($foo{5})) { echo “Foo is too short”
}
//调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
16、变量尽量少;
17、使用缓存技术;
使用XHprof工具,分析PHP性能