PHP-性能优化( 二 )


11 用字符串而不是数组作为参数如果一个函数既能接受数组,又能接受简单字符做为参数,那么尽量用字符作为参数 。例如字符替换函数,参数列表并不是太长,就可以考虑额外写一段替换代码,使得每次传递参数都是一个字符,而不是接受数组做为查找和替换参数 。大事化小,1+1>2 。
12 最好不用@用@掩盖错误会降低脚本运行速度,并且在后台有很多额外操作 。用@比起不用,效率差距 3 倍 。特别不要在循环中使用@,在 5 次循环的测试中,即使是先用error_reporting(0)关掉错误,在循环完成后再打开,都比用@快 。
13 数组元素加引号$row['id']比$row[id]速度快7倍,建议养成数组键名加引号的习惯 。
14 别在循环里用函数例如:
for($x=0; $x < count($array); $x++) {}这种写法在每次循环的时候都会调用 count() 函数,效率大大降低,建议这样:
$len = count($array);for($x=0; $x < $len; $x++) {}让函数在循环外面一次获得循环次数 。
16 方法里建立局部变量在类的方法里建立局部变量速度最快,几乎和在方法里调用局部变量一样快 。
17 局部变量比全局变量快2倍由于局部变量是存在栈中的,当一个函数占用的栈空间不是很大的时候,这部分内存很有可能全部命中cache,这时候CPU访问的效率是很高的 。相反,如果一个函数里既使用了全局变量又使用了局部变量,那么当这两段地址相差较大时,cpu cache需要来回切换,那么效率会下降 。
18 局部变量而不是对象属性建立一个对象属性(类里面的变量,例如:$this->prop++)比局部变量要慢3倍 。
19 提前声明局部变量建立一个未声明的局部变量要比一个已经定义过的局部变量慢9-10倍 。
20 谨慎声明全局变量声明一个未被任何一个函数使用过的全局变量也会使性能降低(和声明相同数量的局部变量一样) 。PHP可能去检查这个全局变量是否存在 。
21 类的性能和其方法数量没有关系新添加10个或多个方法到测试的类后,性能没什么差异 。
22 在子类里方法的性能优于在基类中23 函数快于类方法调用只有一个参数、并且函数体为空的函数,花费的时间等于7-8次$localvar++运算,而同一功能的类方法大约为15次$localvar++运算 。
24 用单引号代替双引号会快一些因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会 。
PHP 引擎允许使用单引号和双引号来封装字符串变量,但是它们的速度是有很大的差别的!使用双引号的字符串会告诉 PHP 引擎,首先去读取字符串内容,查找其中的变量,并改为变量对应的值 。一般来说字符串是没有变量的,所以使用双引号会导致性能不佳 。最好是使用字符串连接而不是双引号字符串 。
$output = "This is a plain string";// 不好的实践$output = 'This is a plain string';// 好的实践$type = "mixed";// 不好的实践$output = "This is a $type string";$type = 'mixed';// 好的实践$output = 'This is a ' . $type .' string';25 echo字符串用逗号代替点连接符更快些echo可以把逗号隔开的多个字符串当作“函数”参数传入,所以速度会更快 。(说明:echo是一种语言结构,不是真正的函数,故把函数加上了双引号) 。例如:
【PHP-性能优化】echo $str1, $str2;// 速度快echo $str1 . $str2;// 速度稍慢26 尽量静态化Apache/Nginx解析一个PHP脚本的时间,要比解析一个静态html页面慢2至10倍,所以尽量使页面静态化,或使用静态HTML页面 。
28 使用缓存Memchached或者redis都可以 。
高性能的分布式内存对象缓存系统,提高动态网络应用程序性能,减轻数据库的负担 。
也对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译 。
29 使用整型保存IP使用ip2long()和long2ip()函数把IP地址转成整型后,再存放进数据库,而保存非字符型 。
这几乎能降低1/4的存储空间 。同时可以很容易对地址进行排序和快速查找;
30 检查email有效性使用checkDNSrr()通过域名存在性来确认email地址的有效性,这个内置函数能保证每一个的域名对应一个IP地址 。
31 使用MySQLi或PDOmysql_*函数已经不被建议使用,建议使用增强型的mysqli_*系列函数或者直接使用PDO 。
32 试着喜欢使用三元运算符(?:)33 是否需要组件在你想在彻底重做你的项目前,看看是否有现成的组件(在Packagist上)可用,通过composer安装 。组件是别人已经造好的轮子,是个巨大的资源库,很多php开发者都知道 。


推荐阅读