国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 課堂 > FAQ問答 > 正文

頁面靜態(tài)化用memcache的思想去實現(xiàn) 會是什么效果那

2020-03-22 18:11:05
字體:
供稿:網(wǎng)友
  • 最近因為之前的項目需要,需要對一個PHP項目進行優(yōu)化,優(yōu)化之余,突然想嘗試著用memcache去實現(xiàn)頁面靜態(tài)化的思想會不會有效果那?

    頁面靜態(tài)話其實就是在訪問一個頁面的時候,由于這個頁面很少會發(fā)生變化,就可以考慮將這個頁面生成一個靜態(tài)的html保存起來,當(dāng)再次訪問的時候直接訪問的是靜態(tài)的html,這樣的話會使網(wǎng)站的響應(yīng)速度大幅度的提高,對整個網(wǎng)站的并發(fā)以及性能起到了優(yōu)化作用。

    動態(tài)生成html需要用到php的ob_start() 、ob_get_contents()函數(shù),其實這個過程就是將解析后的html從瀏覽器的緩存中取出來保存成html文件。

    那么我們用memcache去實現(xiàn)會是什么樣的那,首先我們?nèi)〕鲆粋€頁面的唯一url地址(當(dāng)然我們之前的寫法,每個函數(shù)只實現(xiàn)一個功能),經(jīng)過md5作為唯一的key放入memcache緩存服務(wù)器中。當(dāng)下一次訪問的時候如果有直接取memcache中的緩存,如果沒有進行正常解析,并將結(jié)果存入memcache服務(wù)器。

    下面是具體的實現(xiàn):

    當(dāng)一個已經(jīng)成型的項目擺在你面前的時候,如何對這個項目進行優(yōu)化處理,你拿到的程序有可能是加密的,也有可能項目文件非常大,我們?nèi)绻粋€一個的去看源碼,去修改往往是不太現(xiàn)實的,在這里我的思路時增加一個中間層,如此處,我們將項目入口文件改為index2.php,重新建一個入口文件(index.php)和一個memcache 的優(yōu)化中間層(index1.php),用新的入口文件對index1.php 和 index2.php 做引入操作,加入緩存機制,對所有的訪問鏈接進行memcache緩存(采用頁面靜態(tài)化的思想),把頁面靜態(tài)化的思想去用memcache實現(xiàn),是一種很不錯的方案,但是會有一個缺點,這里使用url 做md5作為唯一的key,假如存在一種情況,這個url有多個不同的頁面調(diào)用,此時會出現(xiàn)一些其他情況,需要注意,可以采取一個內(nèi)置參數(shù),讓某些url不再緩存,而這種方法對于ajax來說是作用不大的,(此處為我自己的理解)因為ajax獲取的是一個參數(shù)傳遞的過程,中間并沒有經(jīng)過瀏覽器的緩存,所以我們得不到ajax的緩存。





    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

    <?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

    <?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是一個簡單的內(nèi)存服務(wù)器,平時的使用中多將數(shù)據(jù)查詢結(jié)果放入其中,當(dāng)短時間內(nèi)頻繁請求的時候可以快速響應(yīng),從而緩解是數(shù)據(jù)庫的壓力。這里這種方法只是一種想法的實現(xiàn),相信會有更好的方法去提高響應(yīng)速度,比如我們還可以通過Opcodes,緩存php的中間碼避免php的多次解析來提高站點的響應(yīng)速度。但是自我感覺效果不太大,更大的效果是優(yōu)化sql語句,表結(jié)構(gòu),以及緩存查詢結(jié)果等(僅僅是從自己優(yōu)化的項目來說,只代表自己的觀點。)。

    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

  • 上一篇:julia是什么

    下一篇:什么是全棧工程師

    發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 巴青县| 犍为县| 平谷区| 潞城市| 台山市| 淳化县| 宜春市| 南城县| 谷城县| 大名县| 洛宁县| 马鞍山市| 咸阳市| 德阳市| 上林县| 桃源县| 横峰县| 木里| 广饶县| 志丹县| 河曲县| 柘荣县| 永宁县| 临朐县| 内黄县| 鹤庆县| 廊坊市| 高青县| 上犹县| 玉林市| 沾化县| 麟游县| 温泉县| 萨嘎县| 贵南县| 蕉岭县| 安仁县| 潢川县| 洛扎县| 嵊泗县| 深水埗区|