通常要循环处理一个数组的时候,是这样写的
$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%。
在可读性和效率之间如何取舍,则是另外一个问题。
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>";
前言:
原文地址: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 »
带宽总是不够用的,为了尽可能多的利用带宽,压缩成了一种手段(不是指在磁盘上压缩网站的文件,而是在传输过程中压缩内容),压缩的最大好处就是降低了网 络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点点服务器的负担。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模块,这种方法可以实现只对单个文件的压缩,同样对静态文件无效。
Windows Server自带的互联网信息服务器(Internet Information Server,IIS)是架设网站服务器的常用工具,它是一个既简单而又麻烦的东西,新手都可以使用IIS架设一个像模像样的Web站点来,但配置、优化 IIS的性能,使得网站访问性能达到最优状态却不是一件简单的事情,这里我就介绍一下如何一步一步的优化你的IIS服务器。
Continue reading »

Recent Comments