嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

周梦康 发表于 2014-04-01 2699 次浏览 标签 : ZzBlog

免费领取阿里云优惠券 我的直播 - 《PHP 进阶之路》

今天查看系统里的U函数,由于这个函数在网站的使用中调用次数非常高,每个链接的组装都离不开它,所以我想把$router_ruler改为了静态变量,而不是每次都是router.php文件里读取。

/**
 * Url地址构造函数
 * @param  string $url      控制器和方法 'Blog/blog'
 * @param  array  $params   array('id'=>1,'p'=>3)
 * @return string $real_url 伪静态地址 或者真实的$_SERVER['QUERY_STRING']
 */
function U($url,$params=null){
    //是否开启路由
    if(defined('ROUTE') && ROUTE){
        //导入路由
        $router_ruler = include(dirname(__FILE__).'/route.php');
        $real_url = route($router_ruler,$url,$params);
    }else{
        $real_url = urlBuild($url,$params);
    }
	return $real_url;
}
/**
 * Url地址构造函数
 * @param  string $url      控制器和方法 'Blog/blog'
 * @param  array  $params   array('id'=>1,'p'=>3)
 * @return string $real_url 伪静态地址 或者真实的$_SERVER['QUERY_STRING']
 */
function U($url,$params=null){
    //是否开启路由
    if(defined('ROUTE') && ROUTE){
        //导入路由
        static $router_ruler = array();
        if(empty($router_ruler)){
            $router_ruler = include(dirname(__FILE__).'/route.php');
        }
        $real_url = route($router_ruler,$url,$params);
    }else{
        $real_url = urlBuild($url,$params);
    }
 return $real_url;
}

下面的3.php就是模拟的是路由文件,代码如下

return array(
        0=>'a',
        1=>'b',
        2=>'c',
        3=>'d',
    );

模拟U函数的操作

function test($index){
    static $router_ruler = array();
    if(empty($router_ruler)){
        $router_ruler = include(dirname(__FILE__).'/3.php');
    }
    return $router_ruler[$index];
}

$time_run_start = microtime(TRUE);
$mem_run_start = memory_get_usage();

for ($i=0; $i < 100000; $i++) { 
    test($i%4);
}

$mem_run_end = memory_get_usage();
$time_run_end = microtime(TRUE);

echo '时间消耗:',($time_run_end-$time_run_start),'<br>';//0.032487154006958
echo '内存消耗:',($mem_run_end-$mem_run_start),'<br>';//1432
function test($index){
    $router_ruler = include(dirname(__FILE__).'/3.php');
    return $router_ruler[$index];
}

$time_run_start = microtime(TRUE);
$mem_run_start = memory_get_usage();

for ($i=0; $i < 100000; $i++) { 
    test($i%4);
}

$mem_run_end = memory_get_usage();
$time_run_end = microtime(TRUE);

echo '时间消耗:',($time_run_end-$time_run_start),'<br>';//39.312365055084
echo '内存消耗:',($mem_run_end-$mem_run_start),'<br>';//760

使用静态变量的时候是0.03~0.04秒,不使用的时候是39秒多,虽然使用静态变量的时候内存开销大那么一点点,但是占用内存时间短吧!不测不知道,一测吓一跳啊!

嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表