提升PHP性能使用细节

1、静态调用成员一定要定义成static(PHP5 Only)

静态地调用非static成员,效率会比静态地调用static成员慢50~60%,主要是因为前者会产生E_STRICT警告,内部也需要做转换。

2、使用类常量(PHP5 Only)

使用常量的好处:
编译时解析,没有额外开销
杂凑表更小,所以内部查找更快
类常量仅存于特定“命名空间”,所以杂凑更短
代码更干净,使排除更方便

3、(暂时)不要使用require/include_once
require/include_once每次被调用的时候都会自动打开目标文件。
如果使用绝对路径的话,PHP5.2/6.0不存在这个问题,新版的APC缓存系统已经解决这个问题
文件I/O增加->效率降低,所以,如果需要,可以执行检查文件时候已经被require/include

4、不要调用毫无意义的函数
有对应常量的时候,不要使用函数
    php_uname('s') == PHP_OS;
    php_version() == PHP_VERSION;
    php_sapi_name() == PHP_SAPI;
虽然使用的不多,但效率提升大概在3500%左右

5、最快的Win32检查
$is_win = DIRECTORY_SEPARATOR == '\\';
特点:不用函数、Win98/WinNT/Win2000/XP/Vista/LongHorn...通用,一直可用

6、时间问题(PHP>=5.1.0 Only)
使用$_SERVER['REQUEST_TIME'],而非time(),time()....
7、加速PCRE
对于不用保存的结果,不用(),一律用(?:)。这样PHP不用为不符合的内容分配内存,节省内存。效率提升15%左右。
能不用正则,就不用正则,尽量使用“字符串函数”

8、加速strtr
如果需要转换的全是单个字符的时候,使用字符串而不是数组来strtr
$addr = strtr($addr, "abcd", "efgh"); // good
$addr = strtr($addr, array('a' => 'e',
                        // ...
                        )); // bad
效率提升:10倍

9、不要做无谓的替换
即使没有替换,str_replace也会为其参数分配内存。
解决办法:想用strpos查找(非常快)看时候需要替换,如果需要,再进行替换
如果需要替换L:效率几乎相等,差别在0.1%左右,如果不需要替换,使用strpos快200%

10、邪恶的@操作符

不要滥用@操作符,虽然看上去简单,实际上后台会有很多操作。用@比不用@快3倍。

特别不要在循环中使用@,在5次循环测试中,即使想用error_reporting(0)关掉错误,在循环完成后再打开,都比使用@快。

11、善用strncmp

当需要对比“前n个字符”时候一样的时候,用strncmp/strncasecmp,而非substr/strtolower,更不是PCRE,更千万别提正则。strncmp/strncasecmp效率很高(虽然效率高的不多)

12、慎用substr_compare(PHP5 Only)

按照上面的道理,substr_compare应该比先substr再比较快,但答案是否定的,除非无视大小写的比较并比较较大的字符串。

13、不要用常量代替字符串

因为:需要查询杂凑表两次,需要把常量名转换为小写,生成E_NOTICE警告,会简历临时字符串,效率相差700%.

14、不要把count/strlen/sizeof放到for循环的条件语句中

for ($i = 0, $max = count($array);$i < $max; ++$i);


15、提高PHP文件的访问效率

需要包含其他PHP文件的时候,使用完整路径,或者容易转换的相对路径

include 'file.php'; // bad approach
incldue './file.php'; // good
include '/path/to/file.php'; // ideal


16、物尽其用

PHP有很多扩展和函数可用,在实现一个功能之前,看看PHP是否已经有了这个功能,时候有更简单的实现

17、引用可以简化对复杂数据结构的访问,优化内存的使用

$a = 'large string';
// memory intensive approach
function a($str)
{
return $str.'something';
}
// more efficient solution
function a(&$str)
{
$str .= 'something';
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值