| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > WEB开发

优化php效率,提高php性能的一些方法

时间:2007-09-20 12:07:03  来源:Linux联盟收集整理  作者:
静态调用的成员一定要定义成 static (仅PHP5) ECFLinux联盟
ECFLinux联盟
提示:PHP 5 引入了静态成员的概念,作用和 PHP 4 的函数内部静态变量一致,但前者是作为类的成员来使用。静态变量和 Ruby 的类变量(class variable)差不多,所有类的实例共享同一个静态变量。
<?phpECFLinux联盟
class foo {ECFLinux联盟
 function bar() {ECFLinux联盟
 echo 'foobar';ECFLinux联盟
 }ECFLinux联盟
}ECFLinux联盟
ECFLinux联盟
$foo = new foo;ECFLinux联盟
ECFLinux联盟
// instance wayECFLinux联盟
ECFLinux联盟
$foo->bar();ECFLinux联盟
ECFLinux联盟
// static wayECFLinux联盟
ECFLinux联盟
foo::bar();ECFLinux联盟
?>
静态地调用非 static 成员,效率会比静态地调用 static 成员慢 50-60%。主要是因为前者会产生 E_STRICT 警告,内部也需要做转换。ECFLinux联盟
ECFLinux联盟
不要调用毫无意义的函数ECFLinux联盟
ECFLinux联盟
有对应的常量的时候,不要使用函数。
<?phpECFLinux联盟
php_uname('s') == PHP_OS;ECFLinux联盟
php_version() == PHP_VERSION;ECFLinux联盟
php_sapi_name() == PHP_SAPI;ECFLinux联盟
?>
虽然使用不多,但是效率提升大概在 3500% 左右。ECFLinux联盟
ECFLinux联盟
最快的 Win32 检查
<?phpECFLinux联盟
$is_win = DIRECTORY_SEPARATOR == '\\';ECFLinux联盟
?>
- 不用函数ECFLinux联盟
- Win98/NT/2000/XP/Vista/Longhorn/Shorthorn/Whistler...通用ECFLinux联盟
- 一直可用ECFLinux联盟
ECFLinux联盟
时间问题 (PHP>5.1.0 ONLY)ECFLinux联盟
ECFLinux联盟
你如何在你的软件中得知现在的时间?简单,「time() time() again, you ask me...」。ECFLinux联盟
ECFLinux联盟
不过总归会调用函数,慢。ECFLinux联盟
ECFLinux联盟
现在好了,用 $_SERVER['REQUEST_TIME'],不用调用函数,又省了。ECFLinux联盟
ECFLinux联盟
不要做无谓的替换ECFLinux联盟
ECFLinux联盟
即使没有替换,str_replace 也会为其参数分配内存。很慢!解决办法:ECFLinux联盟
ECFLinux联盟
- 用 strpos 先查找(非常快),看是否需要替换,如果需要,再替换ECFLinux联盟
ECFLinux联盟
效率:ECFLinux联盟
ECFLinux联盟
- 如果需要替换:效率几乎相等,差别在 0.1% 左右。ECFLinux联盟
- 如果不需要替换:用 strpos 快 200%。ECFLinux联盟
ECFLinux联盟
不要把 count/strlen/sizeof 放到 for 循环的条件语句中ECFLinux联盟
ECFLinux联盟
提示:我的个人做法
<?phpECFLinux联盟
for ($i = 0, $max = count($array);$i < $max; ++$i);ECFLinux联盟
?>
效率提升相对于:ECFLinux联盟
ECFLinux联盟
- count 50%ECFLinux联盟
- strlen 75%ECFLinux联盟
ECFLinux联盟
提高 PHP 文件访问效率ECFLinux联盟
ECFLinux联盟
需要包含其他 PHP 文件的时候,使用完整路径,或者容易转换的相对路径。
<?phpECFLinux联盟
ECFLinux联盟
include 'file.php'; // bad approachECFLinux联盟
ECFLinux联盟
incldue './file.php'; // goodECFLinux联盟
ECFLinux联盟
include '/path/to/file.php'; // idealECFLinux联盟
ECFLinux联盟
?>
物尽其用ECFLinux联盟
ECFLinux联盟
PHP 有很多扩展和函数可用,在实现一个功能的之前,应该看看 PHP 是否有了这个功能?是否有更简单的实现?
<?phpECFLinux联盟
$filename = "./somepic.gif";ECFLinux联盟
$handle = fopen($filename, "rb");ECFLinux联盟
$contents = fread($handle, filesize($filename));ECFLinux联盟
fclose($handle);ECFLinux联盟
ECFLinux联盟
// vs. much simplerECFLinux联盟
ECFLinux联盟
file_get_contents('./somepic.gif');ECFLinux联盟
?>
ECFLinux联盟
关于引用的技巧ECFLinux联盟
ECFLinux联盟
引用可以:ECFLinux联盟
ECFLinux联盟
- 简化对复杂结构数据的访问ECFLinux联盟
- 优化内存使用
<?phpECFLinux联盟
$a['b']['c'] = array();ECFLinux联盟
ECFLinux联盟
// slow 2 extra hash lookups per accessECFLinux联盟
for ($i = 0; $i < 5; ++$i)ECFLinux联盟
 $a['b']['c'][$i] = $i;ECFLinux联盟
ECFLinux联盟
// much faster reference based approachECFLinux联盟
$ref =& $a['b']['c'];ECFLinux联盟
for ($i = 0; $i < 5; ++$i)ECFLinux联盟
 $ref[$i] = $i;ECFLinux联盟
?>
<?phpECFLinux联盟
$a = 'large string';ECFLinux联盟
ECFLinux联盟
// memory intensive approachECFLinux联盟
function a($str)ECFLinux联盟
{ECFLinux联盟
 return $str.'something';ECFLinux联盟
}ECFLinux联盟
ECFLinux联盟
// more efficient solutionECFLinux联盟
function a(&$str)ECFLinux联盟
{ECFLinux联盟
 $str .= 'something';ECFLinux联盟
}ECFLinux联盟
?>
来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
    无相关信息
栏目更新
栏目热门