如何提高PHP速度第1/3页

 更新时间:2007年02月22日 00:00:00   作者:  
简单的数据缓存技术 

  近来做了一阵子程序性能的优化工作,有个比较有意思的想法,想提出来和大家交流一下。 
  Cache是“以空间换时间”策略的典型应用模式,是提高系统性能的一种重要方法。缓存的使用在大访问量的情况下能够极大的减少对数据库操作的次数,明显降低系统负荷提高系统性能。相比页面的缓存,结果集是一种“原始数据”不包含格式信息,数据量相对较小,而且可以再进行格式化,所以显得相当灵活。由于PHP是“一边编译一边执行”的脚本语言,某种程度上也提供了一种相当方便的结果集缓存使用方法——通过动态include相应的数据定义代码段的方式使用缓存。如果在“RamDisk”上建缓存的话,效率应该还可以得到进一步的提升。以下是一小段示例代码,供参考。 

<? 
// load data with cache 
function load_data($id,$cache_lifetime) { 

// the return data 
$data = array(); 

// make cache filename 
$cache_filename = ‘cache_‘.$id.‘.php‘; 

// check cache file‘s last modify time 
$cache_filetime = filemtime($cache_filename); 

if (time() - $cache_filetime <= $cache_lifetime) { 
//** the cache is not expire 
include($cache_filename); 
} else { 
//** the cache is expired 

// load data from database 
// ... 
while ($dbo->nextRecord()) { 
// $data[] = ... 


// format the data as a php file 
$data_cache = "<?\r\n"; 
while (list($key, $val) = each($data)) { 
$data_cache .= "\$data[‘$key‘]=array(‘"; 
$data_cache .= "‘NAME‘=>\"".qoute($val[‘NAME‘])."\"," 
$data_cache .= "‘VALUE‘=>\"".qoute($val[‘VALUE‘])."\"" 
$data_cache .= ");\r\n"; 

$data_cache = "?>\r\n"; 

// save the data to the cache file 
if ($fd = fopen($cache_filename,‘w+‘)) { 
fputs($fd,$data_cache); 
fclose($fd); 


return $data; 

?> 

适用情况: 
1.数据相对比较稳定,主要是读取操作。 
2.文件操作要比数据库操作快。 
3.复杂数据访问,大数据量访问,密集数据访问,系统数据库负载极重。 
4.Web/DB分离结构或者多Web单DB结构。 

未经证实的问题: 
1.并发访问时对文件的读写是否会引起锁定问题。 
2.涉及到的数据文件太多时,性能如何。 

扩展思路: 
1.生成JavaScript数据定义代码,在客户端调用。 
2.还未想到……  

望共同探讨。 
缓存 
如果你想要让自己庞大的PHP应用有更好的性能表现,采用缓存也是一种很好的方法。现在已经有许多缓存方案可供选择,其中包括:Zend Cache,APC,和Afterburner Cache。 

所有这些产品都属于“缓存模块”。当第一次出现对.php文件的请求时,它们会在Web服务器内存中保存PHP的中间代码,此后就用“经过编译”的版本响应后继的请求。这种方法确实能够改善应用的性能,因为它使得磁盘访问量减低到了最少的程度(代码已经读取和解析),代码直接在内存中运行使得服务器响应请求的速度大大提高。当然,缓存模块还会监视PHP源文件的变化,必要时重新缓存页面,从而防止了用户得到的页面仍旧由过时的PHP代码生成。由于缓存模块能够明显地降低服务器的负载、提高PHP应用的响应效率,因此它们非常适合于负载较大的网站使用。 

如何选择这些缓存产品 
Zend Cache是Zend Technologies公司的商业软件,而Zend Technologies就是前面提到的那个为我们提供PHP引擎和免费Zend Optimizer的公司。Zend Cache确实是名不虚传!对于大型的PHP页面,你可以感觉到第一次运行之后速度就会有所提高,而且服务器也会有更多的可用资源。遗憾的是这个产品并不免费,不过在有些情形下它仍旧是物超所值。 

Afterburner Cache是来自Bware Technologies的免费缓存模块,当前这个产品还是Beta版。Afterburner Cache的做法看起来与Zend Cache差不多,但它对性能的改善程度(还)不能与Zend Cache相比,而且它还不能与Zend Optimizer一起工作。 

APC是Alternative PHP Cache的缩写,它是来自Community Connect的又一个免费缓存模块。这个产品已经具有足够的稳定性供正式场合使用,而且它看起来也能在很大程度上提高响应请求的速度。

相关文章

  • PHP6 中可能会出现的新特性预览

    PHP6 中可能会出现的新特性预览

    PHP核心团队开发者Pierre Joye近日在官网上贴出了PHP6中可能会出现的新特性,之所以说是“可能会出现”,是因为目前PHP6项目还处于阶段,这些特性还只是一个想法,还需要讨论,随时都有可能变更
    2014-04-04
  • php foreach、while性能比较

    php foreach、while性能比较

    foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快.
    2009-10-10
  • php 使用expat方式解析xml文件操作示例

    php 使用expat方式解析xml文件操作示例

    这篇文章主要介绍了php 使用expat方式解析xml文件操作,结合实例形式分析了PHP使用expat方式解析xml文件具体步骤与相关操作技巧,需要的朋友可以参考下
    2019-11-11
  • php中用数组的方法设置cookies

    php中用数组的方法设置cookies

    php中用数组的方法设置cookies,需要的朋友可以参考下。
    2011-04-04
  • Admin generator, filters and I18n

    Admin generator, filters and I18n

    You need to modify your EntityFormFilter (where Entity is your object class - Article, Book, etc.).
    2011-10-10
  • 随时给自己贴的图片加文字的php水印

    随时给自己贴的图片加文字的php水印

    随时给自己贴的图片加文字的php水印...
    2007-03-03
  • PHP 读取和修改大文件的某行内容的代码

    PHP 读取和修改大文件的某行内容的代码

    最近碰到一个比较有趣的问题,就是修改某个文件的某一行字符,不过文件太大,file()直接读取是不可能的,我使用fgets来跳转到指定行,并用fwrite修改某个字符串。
    2009-10-10
  • 浅析php中抽象类和接口的概念以及区别

    浅析php中抽象类和接口的概念以及区别

    本篇文章是对php中抽象类和接口的概念以及区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php中CI操作多个数据库的代码

    php中CI操作多个数据库的代码

    最近有个需求,做一个独立后台出来,这个独立后台有单独的库,单独的url,单独…。但是,这里边只是一些基础数据,而使用者需要通过该库查看另一个库里的统计数据。这就带来一个问题:我需要在控制器里边可以同时操作两个数据库,而且这两个库毫不相干
    2012-07-07
  • PHP 登录记住密码实现思路

    PHP 登录记住密码实现思路

    在登录的时候记住用户输入的密码在某些情况下是很有必要的,下面是一个小例子,感兴趣的朋友可以参考下哈,希望对你有所帮助
    2013-05-05

最新评论