分享

Zend Studio | 提供zend studio教程、zend studio下载等相关资源的公益性站点。

 quasiceo 2013-11-02

遭遇php的in_array低性能08/28/2013

PHP的性能一直在提高。然而,若是用的不恰当,或是一个不留神,还是可能会踩到PHP内部实现方面的坑的。我在前几天的一个性能问题上就碰到了。

事情是这样子的,一位同事反馈我们的一个接口每次返回需要5秒之久,我们一起review了代码,“惊喜”的发现居然在循环(大约900次)中调用了一个读缓存的操作,而这个缓存的key并没有改变,因此我们把这段代码移到了循环外面,再测,接口返回时间降到了2秒,呜呼!虽然提升了1倍,但明显不是我们能接受的结果!

出现性能问题的代码量并不大,我们排除了IO问题以后,写了一段测试代码,果然问题很快重现。

< ?php
$y="1800";
$x = array();
for($j=0;$j&lt;2000;$j++){
        $x[]= "{$j}";
}
 
for($i=0;$i&lt;3000;$i++){
        if(in_array($y,$x)){
                continue;
        }
}
?>


shell$ time /usr/local/php/bin/php test.php

real 0m1.132s
user 0m1.118s
sys 0m0.015s

对的,我们用的就是字符串型的数字,从缓存拿出来就是这样子的啦!所以这里是特意转成字符串的(如果直接是数字,并不会出现这个问题 ,各位可以自行验证)。可以看出时间耗掉了1秒,才3000次循环,后面的sys用时也注定我们用strace不会拿到什么有效信息。
太给力了,让我看完 ?

77人表示读过 | 5条评论分类: 我爱PHP 标签:  

如何提高自己的PHP修养——答一位读者来信05/20/2013

最近一位读者的来信,给了我很想说些什么的冲动,一直想说些总结性的东西,希望能够给一些正在迷茫、彷徨中的phper一点点微不足道的帮助,终于算是有了这个机会。

经来信读者同意,我将这篇颇具代表性的内容,全文贴上:
发件人:“小菜鸟”<7*******@qq.com>;
发送时间:2013年5月11日(星期六) 下午4:01
收件人:“16********”<16*****@*****.com>;
主题:hello gently
gently,您好!
在您的博客上看见这段幽默的文字:
2006,阳光普照,百废待兴!令人发指的是他竟然刚刚才悟懂了一点点的php入门知识,一个在2004年就接触php的人,为什么到2006年才刚刚弄 懂一点点入门呢?难道他沉睡了2年之久?还是去了火星一趟?种种疑问,我们不禁无比的感到好奇,本期内容就带您走进科学,走近博主。
才发现我接触PHP也将近两年了,但是一点皮毛都没怎么懂,哎,学习PHP的时候总是学学停停,走走停停也至于现在很迷茫、很纠结、很痛苦。
我现在在一个建站公司上班,套模板那种。有时候客户的需求需要在CMS的基础上做二次开发,以至于我根本无法下手。
几个需要二次开发的网站都没做下来,老板很不高兴!
我不知道我是否应该坚持学PHP开发,也不知道从何处坚持。
gently,您是过来人,求您给我一点指点。我相信听君一席话,胜读十年书!
我的回信如下:

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多