php memcache页面静态化,页面静态化用memcache的思想去实现,会是什么效果那??...

最近因为之前的项目需要,需要对一个PHP项目进行优化,优化之余,突然想尝试着用memcache去实现页面静态化的思想会不会有效果那?

页面静态话其实就是在访问一个页面的时候,由于这个页面很少会发生变化,就可以考虑将这个页面生成一个静态的html保存起来,当再次访问的时候直接访问的是静态的html,这样的话会使网站的响应速度大幅度的提高,对整个网站的并发以及性能起到了优化作用。

动态生成html需要用到php的ob_start()   、ob_get_contents()函数,其实这个过程就是将解析后的html从浏览器的缓存中取出来保存成html文件。

那么我们用memcache去实现会是什么样的那,首先我们取出一个页面的唯一url地址(当然我们之前的写法,每个函数只实现一个功能),经过md5作为唯一的key放入memcache缓存服务器中。当下一次访问的时候如果有直接取memcache中的缓存,如果没有进行正常解析,并将结果存入memcache服务器。

下面是具体的实现:

当一个已经成型的项目摆在你面前的时候,如何对这个项目进行优化处理,你拿到的程序有可能是加密的,也有可能项目文件非常大,我们如果一个一个的去看源码,去修改往往是不太现实的,在这里我的思路时增加一个中间层,如此处,我们将项目入口文件改为index2.php,重新建一个入口文件(index.php)和一个memcache 的优化中间层(index1.php),用新的入口文件对index1.php 和 index2.php 做引入操作,加入缓存机制,对所有的访问链接进行memcache缓存(采用页面静态化的思想),把页面静态化的思想去用memcache实现,是一种很不错的方案,但是会有一个缺点,这里使用url

做md5作为唯一的key,假如存在一种情况,这个url有多个不同的页面调用,此时会出现一些其他情况,需要注意,可以采取一个内置参数,让某些url不再缓存,而这种方法对于ajax来说是作用不大的,(此处为我自己的理解)因为ajax获取的是一个参数传递的过程,中间并没有经过浏览器的缓存,所以我们得不到ajax的缓存。

922d391666577a06f4cca8f1b8fe253c.png

cf416dfe307d3c37324c2099ed46c432.png

index1.php 原来项目的入口文件

php

define(‘url‘,‘http://‘.$_SERVER[‘SERVER_NAME‘].‘:‘.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]);

class memcacheHtml{

public $memcache;

public $time=10;

public $urlArray = array();

function memcacheGet(){

$this->memcache =  new memcache();

$this->memcache->connect(‘127.0.0.1‘,11211) or dir("error __FUNCTION__");

if($this->memcache->get(md5(url))){

echo $this->memcache->get(md5(url));

//$this->memcacheFlush();

return true;

}

return false;

}

function memecacheSet($data){

if(in_array(url,$this->urlArray)){

return true;

}

$this->memcache =  new memcache();

$this->memcache->connect(‘127.0.0.1‘,11211) or dir("error __FUNCTION__");

$this->memcache->set(md5(url),$data,MEMCACHE_COMPRESSED,$this->time);

//echo $data;

}

function memcacheFlush(){

$this->memcache->flush();

}

}

index2.php

// comment out the following two lines when deployed to production

defined(‘YII_DEBUG‘) or define(‘YII_DEBUG‘, true);

defined(‘YII_ENV‘) or define(‘YII_ENV‘, ‘dev‘);

require(__DIR__ . ‘/../vendor/autoload.php‘);

require(__DIR__ . ‘/../vendor/yiisoft/yii2/Yii.php‘);

$config = require(__DIR__ . ‘/../config/web.php‘);

(new yii\web\Application($config))->run();

index.php

include_once ‘index1.php‘;

$requre = new memcacheHtml();

$requre->time = 1;

//    if(strpos(‘login‘,url)){

//        array_push($requre->urlArray,url);

//    }

/*if(!empty($_GET[‘flush‘])){

$requre->memcacheFlush();

}*/

if(!$requre->memcacheGet()){

ob_clean();

ob_start();

require_once ‘index2.php‘;

$requre->memecacheSet(ob_get_contents());

}

?>

其实memcache是一个简单的内存服务器,平时的使用中多将数据查询结果放入其中,当短时间内频繁请求的时候可以快速响应,从而缓解是数据库的压力。这里这种方法只是一种想法的实现,相信会有更好的方法去提高响应速度,比如我们还可以通过Opcodes,缓存php的中间码避免php的多次解析来提高站点的响应速度。但是自我感觉效果不太大,更大的效果是优化sql语句,表结构,以及缓存查询结果等(仅仅是从自己优化的项目来说,只代表自己的观点。)。

原文:http://blog.csdn.net/wyfhist/article/details/46318577

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值