1、静态调用成员一定要定义成static(PHP5 Only)
2、使用类常量(PHP5 Only)
3、(暂时)不要使用require/include_once
4、不要调用毫无意义的函数
5、最快的Win32检查
6、时间问题(PHP>=5.1.0 Only)
8、加速strtr
9、不要做无谓的替换
15、提高PHP文件的访问效率
16、物尽其用
静态地调用非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';
}