热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

页面静态化用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的缓存。



 
技术分享

技术分享


index1.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语句,表结构,以及缓存查询结果等(仅仅是从自己优化的项目来说,只代表自己的观点。)。





推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 在project.properties添加#Projecttarget.targetandroid-19android.library.reference.1..Sliding ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • 0x00端口渗透端口扫描端口的指纹信息(版本信息)端口所对应运行的服务常见的默认端口号.尝试弱口令端口爆破hydra端口弱口令NTScanHs ... [详细]
  • 一,织梦后台后台设置进入系统后台,在[系统基本参数]下面的性能选项卡当中,关于memcache进行如下配置:cfg_memcache_enable:是否启用memcache缓存,如果为否(N) ... [详细]
author-avatar
王锟2004
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有