模板完全静态化,也就是通过模板完全生成纯静态的网页,相比动态页面和伪静态页面更安全更利于SEO访问更快。相比前二者各有利弊吧,现在稍微对这三种形式的优缺点对比一下,以及在ThinkPHP5项目中实现完全静态化的基本过程。

对比

1. 动态与真静态

页面静态化与动态页的对比,静态没有了SQL和一些后端脚本运行,安全稳定,访问速度快,对SEO友好(网上也有说现在的搜索引擎已经对动态网页的抓取没什么压力了),但是搜索引擎再强大,静态的URL也比动态的后面带问号冒号什么的要好看,不对SEO友好对普通浏览用户者也是友好(好看第一)。但是生成静态页面的弊端,也就是如果一个博客网站,随着文章内容的增多,那生成的页面也不断增多,就算一个html就30几Kb,数量多的情况下也挺耗存储空间,网上也有说频繁生成静态页面化,容易让硬盘出现坏道。这个我的看法是不好测试可以忽略,因为现在多数是使用云服务器或云虚拟主机,那些都不是物理硬件,就算太过碎片导致硬盘损坏,网站也能正常访问的,因为那是云服务器。

2. 真静态与伪静态

这二者的对比看起来像是正统之争,因为大家都知道伪静态还是动态页,只是Apache通过URL重写规则让其变成了像静态网页的样子。主要也是让自己对SEO友好,但是相比真静态多了Apache的步骤,所以也就比较耗费一些服务器的资源。而真静态的缺点上面也说了,在项目中的选择看需求,各有利弊,北桥苏的使用主要是自己网站有时要优化一下速度所以就做了模板静态化,以下是操作过程。

实现思路

1. 根据模块控制器自动递归创建目录。

2. file_exists判断生成的静态页是否存在

3. 或判断过期与否,存在重定向到静态网页

4. file_put_contents($file,$content)函数生成页面。

编码

1. 目录的创建

/*
* 递归创建目录
* @param string $dir 文件目录路径
* @return boolean 创建结果
* **/
function mkdirs($dir)
{
if(!is_dir($dir))
{
if(!mkdirs(dirname($dir))){
return false;
}
if(!mkdir($dir,0777)){
return false;
}
}
return true;
}

2. 在基类中初始化需创建的目录

protected $staticHtmlDir = "";              //静态模板生成目录
protected $staticHtmlFile = ""; //静态文件 protected function _initialize() {
parent::_initialize(); $this->staticHtmlDir = "html".DS.$this->request->controller().DS; //……………………………………………………………………

3. 基类中的生成前与生成后的方法。

//判断是否存在静态
public function beforeBuild($param) {
//生成静态
//$baseDir = "html".DS.$this->request->controller().DS;
if(is_array($param)) {
$param = implode("_",$param);
}
$this->staticHtmlFile = $this->staticHtmlDir.$this->request->action().($param?$param:'').'.html'; if(mkdirs($this->staticHtmlDir)) {
if(file_exists($this->staticHtmlFile) && filectime($this->staticHtmlFile)>=time()-60*60*24*5) { //静态文件存在
$this->redirect('/'.$this->staticHtmlFile);
}
}
} //开始生成静态文件
public function afterBuild($html) {
if(!empty($this->staticHtmlFile) && !empty($html)) {
if(file_exists($this->staticHtmlFile)) {
unlinnk($this->staticHtmlFile);
}
if(file_put_contents($this->staticHtmlFile,$html)) {
$this->redirect('/'.$this->staticHtmlFile);
}
}
}

4. 视图控制器中的使用。

ThinkPHP5中fetch方法返回给file_put_contents函数作为content就可以生成一个完整的静态页面了。

ThinkPHP5中如何实现模板完全静态化的更多相关文章

  1. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_11-freemarker静态化测试-基于模板字符串静态化

    再定义一个测试方法 把拿到的字符串变成模板 加载器设置好了以后, 加一个断点来测试 生成模板文件 上面这种方式很灵活. 最终代码 @Test public void testGenerateHtmlB ...

  2. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_10-freemarker静态化测试-基于模板文件静态化

    把resource拷贝到test目录下 只保留文件夹结构和test1.ftl这个模板文件就可以了. 新建一个包 编写测试类 使用freemaker提供的方法生成静态文件 Configuration是i ...

  3. Django中通过定时任务触发页面静态化的方式

    安装 pip install django-crontab 添加应用 INSTALLED_APPS = [ ... 'django_crontab', # 定时任务 ... ] 设置任务的定时时间 在 ...

  4. 天猫浏览型应用的CDN静态化架构演变

    原文链接:http://www.csdn.net/article/2014-01-22/2818227-CDN-Architecture 在天猫双11活动中,商品详情.店铺等浏览型系统,通常会承受超出 ...

  5. 天猫浏览型应用的CDN静态化架构演变(转)

    转自:http://wbj0110.iteye.com/blog/2036613 在天猫双11活动中,商品详情.店铺等浏览型系统,通常会承受超出日常数倍甚至数十倍的流量冲击.随着历年来双11流量的大幅 ...

  6. PHP静态化(非伪静态化)

    什么是PHP静态化 PHP静态化的简单理解就是使网站生成页面以静态HTML的形式展现在访客面前,PHP静态化分纯静态化和伪静态化,两者的区别在于PHP生成静态页面的处理机制不同. 为什么要让网页静态化 ...

  7. PHP实现HTML页面静态化

    随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化.一般情况下会从以下方面 ...

  8. 如何做URL静态化 和页面的静态化

    为什么要进行URL静态化? 如果帮到了您,您可以小支持一下,谢谢您   1.更好的迎合搜索引擎工作原理的爬行抓取机制:2.把网站URL静态化更有助于网站获得好的排名:3.URL静态化有利于用户体验.不 ...

  9. ASP.NET MVC 页面静态化操作的思路

    本文主要讲述了在asp.net mvc中,页面静态化的几种思路和方法.对于网站来说,生成纯html静态页面除了有利于seo外,还可以减轻网站的负载能力和提高网站性能.在asp.net mvc中,视图的 ...

随机推荐

  1. Java 的API(API: Application(应用) Programming(程序) Interface(接口))

    按 ctrl 点击查看源代码: 一.equals方法: 1.用于比较两个对象是否相同. 2.Objec 类中,若两边是引用数据类型,比较的是两个对象的内存地址. 3.Objec 类中,若两边是数值类型 ...

  2. 如何使用离线存储(localStorage)?

    1.存储数据:localStorage.setItem("属性","属性值") 2.获取本地存储的值:localStorage.getItem("属性 ...

  3. 洛谷P3063 [USACO12DEC]牛奶的路由Milk Routing

    链接 其实在博客园里写题解都挺应付的都是在洛谷写了之后 挑一部分粘过来 在洛谷写的也都是废话,是为了凑篇幅 主要就是代码 大体思路就一提 这题贪心不行废话 跑m遍SPFA更新最小值 注意数组记得清空 ...

  4. Linux 进程树查看工具 pstree

    pstree 是 Linux 下的一个用于展示进程树结构的工具,类似于 tree 展示目录树一样,可视化地查看进程的继承关系.pstree 工具其实是 PSmisc 工具集的成员之一,PSmisc 工 ...

  5. nginx 配置状态监控

    Nginx有内置一个状态页,需要在编译的时候指定参数--with-http_stub_status_module参数方可打开.也就是说,该功能是由http_stub_status_module模块提供 ...

  6. 在centos系统的/etc/hosts添加了 当前主机的 ‘ NAT分配的IP controller’,RabbitMQ添加用户报错。

    在centos系统的/etc/hosts添加了 当前主机的 ' NAT分配的IP controller',RabbitMQ添加用户报错. rabbitMq添加用户 报错信息如下 [root@contr ...

  7. .NET 微服务 2 架构设计理论(一)

    SOA体系架构 面向服务的体系结构 (SOA) ,通过将应用程序分解为多个服务(通常为 HTTP 服务,WCF服务等),将其分为不同类型(例如子系统或层),从而来划分应用程序的结构. 微服务源自 SO ...

  8. Linux 下杀毒软件 clamav 的安装和使用

    安装依赖: 1 2 3 yum install -y pcre* zlib zlib-devel libssl-devel libssl yum install -y openssl yum inst ...

  9. ubuntu16安装python3

    正常情况下,你安装好ubuntu16.04版本之后,系统会自带 python2.7版本,如果需要下载新版本的python3.5,就需要进行更新.下面给出具体教程: 1.首先在ubuntu的终端tern ...

  10. os-enviroment

    pip3 install PyUserInput ping 是不带协议的