动态语言静态化

一、什么是动态语言静态化

将现有PHP等动态语言的逻辑代码生成为静态html文件,用户访问动态脚本重定向到静态html的过程

注 : 对实时性要求不高的页面才适合去做动态语言静态化

 

二、为什么要静态化

1. 动态脚本通常会做逻辑计算和数据查询,访问量越大,服务器压力越大

2. 访问量大时可能会造成CPU负载过高,数据库服务器压力过大

3.  静态化可以降低逻辑处理压力,降低数据库服务器查询压力

 

三、静态化的实现方式

第一种:使用模板引擎

( 1 ) 可以使用smarty的缓存机制生成静态html缓存文件

$smarty->cache_dir = $ROOT."/cache"; //缓存目录
$smarty->caching = true;//是否开启缓存
$smarty->cache_lifetime = '3600';//缓存时间

$smarty->display(string template [, string cache_id [,string compile_id]]);

备注:cache_id 缓存id;  compile_id 编译文件id

(2)  清除smarty缓存

$smarty->clear_all_cache();//清除所有缓存
$smarty->clear_cache('file.html'); //清除指定的缓存
$smarty->clear_cache('article.html',$art_id); //清除该模板下的指定缓存号的缓存

 

第二种: 利用ob系列的函数做静态化缓存 (推荐)

(1) 相关函数

ob_start();//打开输出控制缓冲
ob_get_contents();//返回输出缓冲区内容
ob_clean();//清空输出缓冲区
ob_end_flush();//冲刷出(送出)输出缓冲区内容并关闭缓冲

(2) 示例:

<?php
$cache_name = md5(__FILE__).'.html';//定义之后生成缓存文件的文件名$cache_lifetime = 3600;//定义过期时间为1小时//限制条件,条件符合,就加载缓存文件
if(filemtime(__FILE__) <= filemtime($cache_name) && file_exists($cache_name) && filectime($cache_name) + $cache_lifetime > time())
{include $cache_name;//如果在缓存之后没有进行过修改,并且文件存在,并且没有过期,我们就加载文件,并且下面内容不再访问var_dump(filemtime());//测试时用的,看修改文件时,是否还能够读取缓存文件exit;
}ob_start(); //开启缓存?>=========这部分是我们要缓存的内容========<?php$content = ob_get_contents(); //获取缓存区的内容ob_end_flush();//关闭缓存区$handle = fopen($cache_name,'w');//将文件以写的方式打开fwrite($handle,$content);//将我们获取到的缓存内容$content写入我们定义好的缓存文件fclose($handle); //关闭打开的文件资源?>

 

现在访问浏览器

与此同时,还生成了一个缓存文件,内容和从php文件中获取到的是一样的

现在,我们没有修改文件,再刷新浏览器,会出现我们在if语句中输出的filemtime,这证明if满足,已经在读取缓存文件了

现在,我们再修改一下文件,在文字后面加了一个+,如果浏览器显示这个+,并且不输出文件的修改时间,就证明读取的不是缓存文件

浏览器显示:

浏览器显示结果带 + , 证明文件修改之后,就重新读取文件,然后再刷新

结果证明: 因为文件没有再被修改,所以又读取缓存文件了

 

 

代码源码下载: http://download.csdn.net/download/m_nanle_xiaobudiu/10242029

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF-06 样式(Style)

在我们前面介绍资源的时候&#xff0c;我们提到了样式表&#xff0c;如果你之前是做Web开发的&#xff0c;你会发现Style有点类似于Web中的CSS。控件级别样式我们可以在控件级别定义自己的样式&#xff0c;控件级别的样式是优先级最高的<Window x:Class"Example_06.Sel…

构建Squid代理服务器-传统代理、透明代理、反向代理

Squid是Linux系统中最常用的一款开源代理服务软件&#xff0c;主要提供缓存加速和应用层过滤控制的功能&#xff0c;可以很好的实现HTTP、FTP、DNS查询以及SSL等应用的缓存代理。 正向代理&#xff1a;根据实现的方式不同&#xff0c;代理服务可分为传统代理和透明代理。 传统代…

数据库缓存层

一 常见的缓存形式 : 1.文件缓存 (为了避免I/O开销,尽量使用内存缓存) 2.内存缓存 二 为什么要使用缓存 缓存数据是为了让客户端很少甚至不访问数据库服务器进行的数据查询,高并发下,能最大程度降低对数据库服务器的访问压力 一般的数据请求: 用户请求->数据查询->…

仅有50Mb大小的cli即可搞定大厂才能玩的CloudIDE丨SmartIDE

作者&#xff1a;徐磊&#xff0c;开源云原生SmartIDE创始人、LEANOSFT创始人/首席架构师/CEO&#xff0c;微软最有价值专家MVP/微软区域技术总监Regional Director&#xff0c;华为云最有价值专家。从事软件工程咨询服务超过15年时间&#xff0c;为超过200家不同类型的企业提供…

操作Checkbox标签

在前端开发中&#xff0c;少不了对Checkbox的操作。 常用的的方法有2个&#xff1a;.is()和.prop()方法。前者是判断 checkbox的状态&#xff0c;选不是未选。而后者为checkbox设置一个值&#xff0c;可以设置checkbox是true还是false。写个小例子&#xff0c;练习一下&#xf…

memcache在项目中的应用

一 安装memcache 具体流程这篇文章有写到: 点击 链接 二 在项目中应用memcache 为了减轻数据库的查询压力,所以我们把一些不经常变动的数据进行缓存,用户查询时,如果查询的要求是一样的,我们就memcache缓存中读取数据并返回去,如果查询要求变了,我们再到数据库中查询,并将查…

Dapr 证书过期了怎么办? 别慌,有救!

一、背景Dapr 默认证书有效时间是1年&#xff0c;证书过期后就不能执行相关控制面和数据面的交互了&#xff0c;如下图&#xff1a;二、查看证书有效时间通过dapr mtls expiry 看到期时间&#xff0c;具体参见命令https://v1-7.docs.dapr.io/reference/cli/dapr-mtls/dapr-mtls…

js高级程序设计的笔记(一)

2019独角兽企业重金招聘Python工程师标准>>> 1.js中的 null : 如果只意在保存对象的变量还没有真正的保存对象之前&#xff0c;就需要先把该变量保存 null值&#xff0c; null代表空对象的指针 2.函数的参数对象 arguments的理解。 argument对象的length属性 实例 f…

Redis在PHP项目中的应用

一 运行redis服务端 出现上图的图形,就说明redis服务端开启成功,并且开启了密码功能(如果不加载配置文件,连接redis是不需要密码的,这样,会给我们的程序带来很大隐患) 密码的设置: 在redis配置文件中,搜索requirepass ,后面设置密码 比如 : requirepass G506myredis 则表示此…

上汽拒绝HW符合商业逻辑

不久前&#xff0c;上汽董事长陈虹表示“与HW合作自动驾驶是不可接受的。这就好比一家公司为我们提供整体的解决方案&#xff0c;如此一来&#xff0c;它就成了灵魂&#xff0c;而上汽就成了躯体。对于这样的结果&#xff0c;上汽是不能接受的&#xff0c;要把灵魂掌握在自己手…

javac compiling error ( mising package)

javac 编译java源文件时&#xff0c;提示 package does not exist 的错误 Test.java import java.security.MessageDigest; import org.apache.commons.codec.binary.Hex;public class Test{public static void main(String args[]){boolean isAlarmed true;boolean aa isAla…

使用ffmpeg录音

官方教程&#xff1a;http://ffmpeg.org/ffmpeg.html 录音方法&#xff1a; 开始找到了这个方法&#xff0c;但是不行呀&#xff0c;好像是没有这个oss吧。 oss 是linux 下的声音相关的东西&#xff0c;与alsa 一样&#xff0c;不过oss 是商业的&#xff0c; 而/dev/dsp 是oss …

Mysql慢查询日志的使用 和 Mysql的优化

一、生成实验数据 原理&#xff1a;sql 蠕虫复制&#xff08;这种生成数据方式同样适用于数据表中有主键的情况&#xff09;。 insert into comic (name,pen_name,cover) select name,pen_name,cover from comic 二、慢查询日志设置 当语句执行时间较长时&#xff0c;通过日…

thinkphp出现Call to undefined function Think\C() in ... online 313

造成这个问题的原因很多,在这里我只说明我自己遇到之后解决的办法 我将functions.php改成了function.php之后,修改了一些其他无关紧要的东西出现了这个问题,来回排查,各种尝试,最后,将function.php改回functions.php,可以正常运行

WPF效果第一百九十九篇之Gamma曲线

前面效果中分享了模块对比;今天大周末那就再来分享一下最近实现的效果;基于YX^n公式根据不同的系数绘制Gamma曲线效果如下图:1、曲线的话,咱就用最简单的方式绘制一堆点:PathFigure pathFigure new PathFigure(){StartPoint new Point(0, count),};for(double x 0; x < 1…

深入理解Spring Boot数据源与连接池原理

​ Create by ysterfoxmail.com 2018-8-2一&#xff1a;开始 在使用Spring Boot数据源之前&#xff0c;我们一般会导入相关依赖。其中数据源核心依赖就是spring‐boot‐starter‐jdbc 如下 <dependency><groupId>org.springframework.boot</groupId> …

Dapr 集成 Open Policy Agent 实现 接口的访问控制

大型项目中基本都包含有复杂的访问控制策略&#xff0c;特别是在一些多租户场景中&#xff0c;例如Kubernetes中就支持RBAC&#xff0c;ABAC等多种授权类型。Dapr 的 中间件 Open Policy Agent 将Rego/OPA策略应用到传入的Dapr HTTP请求中。Open Policy AgentOpen Policy Agent…

【招聘(大连)】北森云计算 .NET 专场招聘

为了更好的实现战略布局&#xff0c;逐步形成以三个产品研发中心&#xff08;北京、成都、大连&#xff09;为主&#xff0c;青岛和南京为辅的产品研发团队配置。北森云第三研发中心&#xff08;大连&#xff09;正式成立&#xff0c;目前大连的人选招聘正式开启&#xff0c;欢…

C#多线程编程-必知必会

“发现问题的能力&#xff0c;运用技术解决问题的能力&#xff0c;是一个技术人成长的关键”图片故事&#xff1a;洋姜的花&#xff0c;拍摄于2022年7月23日&#xff0c;地点&#xff1a;北京奥林匹克森林公园 &#xff0c;摄影师&#xff1a;刘先生概要&#xff1a;使用C#发起…