下面代码的执行时间比不加这些判断直接echo $rw['lastdate'];运行时间足足多了1毫秒,在加了下面那此判断后页面在执行时我明显有顿的感觉(执行时间长)我反复测试了,加了下面代码平均执行时间在0.003秒,不加直接echo $rw['lastdate'];
平均执行时间在0.002秒,希望能把下面代码优化,并详细解释下面代码执行效率低的原因,即相关原理,谢谢!$CurrentTime=getdate();                          //取得当前时间数组
$OldTime=strtotime($rw['lastdate']);              //取得存在数据库中时间的Unix时间戳
$TimeDifference=$CurrentTime[0]+(8*3600)-$OldTime;//把当前时间的Unix时间戳减去存在数据库中时间的Unix时间戳
if($TimeDifference<60)                             //如果Unix时间戳小于60秒就显示多少秒前发布的 {
   echo floor($TimeDifference)."秒前";
}
elseif($TimeDifference<3600&&$TimeDifference>=60)    //如果Unix时间戳大于60秒小于3600秒就显示多少分钟前发布
{
   $min=$TimeDifference/60;                   //时间戳差除以60得到多少分钟前
   echo floor($min)."分钟前";
   
}else                                                      //否则按存在数据库中的格式显示时间
{
  echo $rw['lastdate'];
}

解决方案 »

  1.   

    计算代码运行时间时,应不计算 echo 的时间,否则应打开缓存(ob_start)
    echo 包括其他输出函数在没有打开缓存的情况下要先检查用户是否在线(不在线就退出了)
    这是一件比较耗时的工作
      

  2.   

    &&$TimeDifference>=60  这个条件没必要
    计算总要消耗性能的,,,没必要纠结1毫秒优化一个SQL语句,复杂业务逻辑更重要
      

  3.   

    就种功能应该用SQL语句就可以实现(个人感觉应该可以),但是本人不太会
      

  4.   

    这么复杂的逻辑交给SQL来做不合适吧! 都是程序,mysql就一定耗时短?
    感觉你的测试并不严密,用apache ab或其它的压力测试工具得出的才算是接近平均水平
      

  5.   

    我确信是加了这个判断让我的页面打开慢了一毫秒,页面我加了计算时间功能,至少人能够感觉到这个“慢”,我个没说用SQL来实现就一定耗时短,我是想用SQL语句来实现下测试页面打开时间,上面那1毫秒差是我测试出来的结果,测试了4次,加判断平均下来时间在3.6毫秒,不加平均在2.3毫秒,本处没必要用压力测试工具来小题大作吧,就打开个页面,自己写个计算打开页面的函数就行了
      

  6.   

    为什么不应该计算echo呢? 这个检查用户在线是什么意思?指的登陆的用户吗?还是其它的?如果是登陆用户,那这里又跟用户在不在线有什么关系?疑问的很...
      

  7.   

    用户 是指正在浏览此页的人
    就是发出本轮http请求的浏览器或其他设备检查用户是否在线 就是 检查本轮 http 会话是否已经提前结束了