中国设计联盟
联网
平面设计 画册 VI欣赏 包装 CG-插画 搜索 个人网页 Alexa排名 CSS 建站资源 下载专区 JS特效 品牌服装 服装院校 专题欣赏 SEO 图标欣赏 专题
域名注册 虚拟主机 广州网站设计 域名注册 广州网站建设 上海网站建设 虚拟主机 广州网页设计  虚拟主机 域名注册 acg王国 ACG玩家
求创科技
上海网站建设
中国福网
招聘求职
中国互联
中国设计秀
中资源
当前位置:网络学院首页 >> 编程开发 >> php >> PHP性能提升的技巧

PHP性能提升的技巧 (1)

来源:中国设计秀    作者:    点击:40     加入收藏    发表评论
0
顶一下

贴士:PHP 5 引入了静态成员的概念,作用和 PHP 4 的函数内部静态变量一致,但前者是作为类的成员来使用。静态变量和 Ruby 的类变量(class variable)差不多,所有类的实例共享同一个静态变量。

QUOTE:
// PHP CODE Highliting for CU by dZ902

<?php
class foo {
    function bar() {
        echo 'foobar';
    }
}

 $foo = new foo;

// instance way

 $foo->bar();

// static way

foo::bar();
?>

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

[size=+2]使用类常量 (PHP5 ONLY)

贴士:PHP 5 新功能,类似于 C++ 的 const。

使用类常量的好处是:

- 编译时解析,没有额外开销
- 杂凑表更小,所以内部查找更快
- 类常量仅存在于特定「命名空间」,所以杂凑名更短
- 代码更干净,使除错更方便

[size=+2](暂时)不要使用 require/include_once

require/include_once 每次被调用的时候都会打开目标文件!

- 如果用绝对路径的话,PHP 5.2/6.0 不存在这个问题
- 新版的 APC 缓存系统已经解决这个问题

文件 I/O 增加 => 效率降低

如果需要,可以自行检查文件是否已被 require/include。

[size=+2]不要调用毫无意义的函数

有对应的常量的时候,不要使用函数。

QUOTE:
// PHP CODE Highliting for CU by dZ902

<?php
php_uname('s') == PHP_OS;
php_version() == PHP_VERSION;
php_sapi_name() == PHP_SAPI;
?>
虽然使用不多,但是效率提升大概在 3500% 左右。

[size=+2]最快的 Win32 检查

QUOTE:
// PHP CODE Highliting for CU by dZ902

<?php
 $is_win = DIRECTORY_SEPARATOR == '\\';
?>

- 不用函数
- Win98/NT/2000/XP/Vista/Longhorn/Shorthorn/Whistler...通用
- 一直可用

[size=+2]时间问题 (PHP>5.1.0 ONLY)

你如何在你的软件中得知现在的时间?简单,「time() time() again, you ask me...」。

不过总归会调用函数,慢。

现在好了,用  $_SERVER['REQUEST_TIME'],不用调用函数,又省了。

[size=+2]加速 PCRE

- 对于不用保存的结果,不用 (),一律用 (?

这样 PHP 不用为符合的内容分配内存,省。效率提升 15% 左右。

- 能不用正则,就不用正则,在分析的时候仔细阅读手册「字符串函数」部分。有没有你漏掉的好用的函数?

例如:

strpbrk()
strncasecmp()
strpos()/strrpos()/stripos()/strripos()

[size=+2]加速 strtr

如果需要转换的全是单个字符的时候,用字符串而不是数组来做 strtr:

QUOTE:
// PHP CODE Highliting for CU by dZ902

<?php
 $addr = strtr( $addr, "abcd", "efgh"); // good
 $addr = strtr( $addr, array('a' => 'e',
                           // ...
                           )); // bad
?>

效率提升:10 倍。

[size=+2]不要做无谓的替换

即使没有替换,str_replace 也会为其参数分配内存。很慢!解决办法:

- 用 strpos 先查找(非常快),看是否需要替换,如果需要,再替换

效率:

- 如果需要替换:效率几乎相等,差别在 0.1% 左右。
- 如果不需要替换:用 strpos 快 200%。

[1] [2] [3]
2007-08-13 16:33:00    出处:
热点文章/相关文章
网站地图 | 关于我们 | 联系我们 | 网站建设 | 广告服务 | 版权声明 | 免责声明 | 网站公告 | 友情链接 | 留言 | 旧版入口