php循环优化

On 2012/04/06, in PHP, WEB开发, 设计, by lyndon

通常要循环处理一个数组的时候,是这样写的

$arr=range(1,10000);
foreach($arr as $k=>$v)
{
$arr[$k]++;
}

如果要优化一个循环,最常见的方法就是减少循环的次数。比如,使用DUFF装置。它以创建者Tom Duff的名字命名,最早在C语言中试用,基本概念是通过计算迭代次数是否为8的倍数,将一个循环展开成一系列的语句。经Andrew B. King优化后,代码如下:

$arr=range(1,10000);
$iterations=floor(count($arr)/8);
$leftover=count($arr)%8;
$i=0;
if($leftover>0)
{
do
{
$arr[$i++]++;
}while(--$leftover>0);
}
do
{
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
$arr[$i++]++;
}while(--$iterations>0);

 

看上去代码更多,但是执行速度更快。上面2个代码执行时间相差60%。

在可读性和效率之间如何取舍,则是另外一个问题。

Tagged with:  

安装xhprof

On 2011/07/19, in PHP, WEB开发, by lyndon

xhprof是fackbook出品的一款php性能检测工具,类似xdebug,不过比xdebug轻量,不会出现cpu狂飚的现象。。。即使用在生产环境中压力也不大。

官网http://mirror.facebook.net/facebook/xhprof/doc.html

安装过程

下载

wget http://pecl.php.net/get/xhprof xhprof.tar.gz

解压

tar -xzvf xhprof.tar.gz

解压的目录中有xhprof_html和xhprof_lib,将这2个目录复制到/var/www/xhprof/,建个虚拟主机,如http://xhprof.local.com,指向xhprof_html,查看日志文件时用到。

安装

cd xhprof/extension
phpize
./configure
make
make test
make install

修改php.ini,加入

extension=xhprof.so
xhprof.output_dir=/var/www/xhprof #xhprof日志文件保存路径,需写入权限

重启apache,查看phpinfo(),应该有xhprof项。

调试

xhprof_enable();
//要调试的代码
$xhprof_data = xhprof_disable();
$XHPROF_ROOT='/var/www/xhprof';
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "local");
echo "<div><a target='_blank' href='http://xhprof.local.com/index.php?run=$run_id&source=wiiwuu'>统计</a></div>";
Tagged with:  

openx在页面上显示多个广告时优化

On 2010/09/28, in PHP, by lyndon
当页面上有多个广告时,可以优化openx只读取一次即可显示所有广告。可大大优化页面显示速度。
定义一组key:value,用于在不同的位置显示广告,key随意,value取openx中对应的广告id。
<script type=”’text/javascript’”>// <![CDATA[
<!–// <![CDATA[ var OA_zones = { 'zone_4235_1' : 4235, 'zone_4235_2' : 4235, 'zone_4235_3' : 4235, 'zone_3906' : 3906, 'zone_1251' : 1251, 'zone_9632' : 9632 } //  –>
// ]]></script>
<script src=”’http://example.com/delivery/spcjs.php’” type=”’text/javascript’”></script>
//OA_show里面的参数即为上面定义的key,在此函数定义的地方即显示对应id的广告。
<script type=”’text/javascript’”>// <![CDATA[
<!–// <![CDATA[ OA_show('zone_4235_1'); //  –>
// ]]></script>
<script type=”’text/javascript’”>// <![CDATA[
<!–// <![CDATA[ OA_show('zone_4235_2'); //  –>
// ]]></script>
<script type=”’text/javascript’”>// <![CDATA[
<!–// <![CDATA[ OA_show('zone_4235_3'); //  –>
// ]]></script>
<script type=”’text/javascript’”>// <![CDATA[
<!–// <![CDATA[ OA_show('zone_3906'); //  –>
// ]]></script>
<script type=”’text/javascript’”>// <![CDATA[
<!–// <![CDATA[ OA_show('zone_1251'); //  –>
// ]]></script>
<script type=”’text/javascript’”>// <![CDATA[
<!–// <![CDATA[ OA_show('zone_9632'); //  –>
// ]]></script>
Tagged with:  

前言:

原文地址:5 ways to make hexadecimal identifiers perform better on MySQL,作者是《High Performance MySQL, Second Edition.》的主要作者。这里是原文的节译。

在我们的业务中,经常会用md5()或者uuid()作为作为数据的标识,比如B2C网站,经常会有一些电子优惠券,常用就是通过md5()获得一 个32位字符串,给字符串建立索引,然后用户输入优惠券代码之后系统查出此优惠券对应的折扣率:select discount from coupon where id = ‘0cc175b9c0f1b6a831c399e269779527′,这样的做法存在两个问题:数据和索引很大以及非顺序数据,本文忽略“非顺序数 据”的问题,因为顺序数据和非顺序数据的优劣很大程度上由技术特性决定。这里讲得是如何在使用16进制大数据的情况下保持好的性能,主要讲的是MySQL 数据库,对其他数据库应该也起作用。
Continue reading »

Tagged with:  

网站优化点滴之http压缩

On 2010/09/16, in 架构, by lyndon

带宽总是不够用的,为了尽可能多的利用带宽,压缩成了一种手段(不是指在磁盘上压缩网站的文件,而是在传输过程中压缩内容),压缩的最大好处就是降低了网 络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点点服务器的负担。Gzip是比较常见的一种HTTP压缩算法。对常见的文本类型 的文件,如js,css等,压缩率较大,一般在80%以上,节省大量带宽,对图片等多媒体文件基本上没效果。
进行http压缩有几种方法,一种是利用web服务器,以iis为例,进入网站的属性页,在服务项里面有http压缩的2个选项,压缩应用程序文件(比如 asp,php,.net等)和压缩静态文件(比如js,css等)。静态文件只在更新有重新压缩,而不是每次请求都压缩,临时的压缩文件就存放在临时目 录指定的目录中。可以选个比较大的盘存放。应用程序文件因为每次访问内容都不同,所以不产生临时文件,每次访问时都要压缩。因为压缩会占用一定cpu,所 以是否要对应用程序文件压缩需要根据情况自行决定。这种方法不许要改动程序,简单方便,开启后对所有网站都有效果。
第二种方法是在php.ini里面设置,添加下面语句即可
output_buffering = Off
zlib.output_compression = On
这种方法只对php文件有效,对静态文件不产生效果,设置后所有使用该ini文件的网站都可使用。
第三种方法是在程序中添加代码,
//start
Ob_Start(‘ob_gzhandler’);
//other code….
Ob_End_Flush();
//end
注意要开启zlib模块,这种方法可以实现只对单个文件的压缩,同样对静态文件无效。

Tagged with:  

Windows Server自带的互联网信息服务器(Internet Information Server,IIS)是架设网站服务器的常用工具,它是一个既简单而又麻烦的东西,新手都可以使用IIS架设一个像模像样的Web站点来,但配置、优化 IIS的性能,使得网站访问性能达到最优状态却不是一件简单的事情,这里我就介绍一下如何一步一步的优化你的IIS服务器。
Continue reading »

Tagged with: