当前位置: 首页 > news >正文

php linux 静态网页,(PHP学习笔记)实现页面静态化

当我们在访问各个门户信息网站时,主页都会给我们显示各种头条、导航信息(例如新闻网)。我们可以想象,面对众多的数据库访问等操作,在我们访问这些网页的同时加载速度将会变得很慢。众所周知,咱在访问静态页面的速度是优于动态网页的。所以,实现页面静态化可以有效地解决这些问题。

那么,何为静态化?其实根据字面理解我们可以得知,静态化就是将一个动态的网页转变成一个类似静态的网页。动态页面静态化的实质就是:生成静态的HTML文件。

静态化需要用到两个关键的知识点:

①buffer缓冲区机制

②利用函数file_put_contents()写入文件

静态化的过程:

1、PHP模板页面(与将要展示的HTML页面一致,区别在于添加了PHP代码)

2、写入静态文件并生成HTML文件(从缓冲区中提取模板文件)

首先我们要先写一个操作类,用于操作模板和生成静态HTML文件:

operation.php:$dsn = 'mysql:dbname=chatroom;host=127.0.0.1';

$user = 'root';$password = '123456';

$pdo = new PDO($dsn, $user, $password);

$sql="SELECT * FROM messages limit 3";

$stmt = $pdo->prepare($sql);

$result = $stmt->execute();

$stmt->setFetchMode(PDO::FETCH_ASSOC);  //以关联数组的形式返回结果

$rows = $stmt->fetchAll();

ob_start(); //打开缓冲区

require_once('muban.php');

代码解读:首先从数据库中读取数据,然后引入'muban.php'文件,目的是让其在引入的过程中加入到缓冲区中。

根据流程步骤:

1、PHP模板页面

为了演示方便,简单写了一个界面,如下所示:

muban.php

本月最热主播排行榜

require_once('operation.php');

foreach($rows as $row){?>

名称:<?php  echo $row['user']?>    收到礼物数量:

代码解读:遍历'operation.php'文件中的'$rows'数组,将结果输出到

标签中。

2、写入静态文件并生成HTML文件(从缓冲区中提取模板文件)

在operation.php中后续加上以下代码:if(file_put_contents('index.html',ob_get_clean())){

echo "success";

}else{

echo "false";

}

利用'file_put_contents()'方法将缓冲区中的内容写入到'index.html'文件中去,完成了静态文件的生成。ob_get_clean()方法是从缓冲区中读取数据并且清除缓冲区(清除缓冲区也可以理解为加载本函数内容不会显示在终端)

最终生成了'index.html'界面:

0ba25a4a620439ddb151f344b316085b.png

从控制台可以看到加载响应的时间为:

2e2dbd79bbd13058c1d9686222dab160.png

我们再看看muban.php页面:

bc05be858bd383762bae390115776f5e.png

之前说过生成的html静态文件是根据模板界面来生成的,所以界面是一样的。再看看加载的相应时间:

19eebe2ca1faf9e02402dbf8542f5e89.png

从响应的时间我们可以看出,仅仅只有几行代码就产生了这么大的差距。可想而知,当网页信息量十分庞大的时候,对加载响应的速度影响非常大。利用页面静态化,从而可以极大地避免这样的问题出现。

-----------------------------------------------------------------------------------------

说到生成静态文件,如果网页信息有变化,那该怎么办呢?答案就是重新生成(这不废话吗?)

自动触发系统生成静态化页面有三种常见的方式:

1、页面添加缓存时间。当用户请求页面时,后台判定页面时间是否过期(超过了设置的缓存时间),如果超过了则生成新的静态页面;反之则获取静态页面。

2、手动触发生成。为了解决页面修改但是未能及时显示的问题,后台添加“一键更新”的按钮实现点击后生成静态文件。

3、Crontab定时扫描程序。该方法涉及到Linux操作系统上的应用:

*/5**** php/data/StaticPage/operation.php

该语句意为每5分钟执行以下index.php文件。由于本人对其了解不深,就不做过多描述,以免误人子弟。

相关文章:

  • 貌似生日的快乐
  • spring对jboss与weblogic的jms的支持不一样
  • php 银行家算法,银行家算法又被称为“资源分配拒绝”法,是一种()算法。A、死锁解除B、死锁避免C、死锁预防D、死锁检测...
  • 易语言字节集转php,易语言将下载地址解析转换成迅雷快车旋风的方法
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • oracle中软连接命令,深入理解硬链接和软链接 (转)
  • 人物散记:吴文虎教授,信息学奥赛和其他
  • oracle 设置动态变量,数据库优化技术之Oracle数据库动态绑定变量
  • C++专家荣耀5月22日下午2点作客51CTO专家聊天室
  • oracle connection reset,Oracle JDBC 连接卡死后 Connection Reset
  • oracle查询应用语句,Oracle查询语句应用经验总结
  • POE技术简介
  • fedora 安装oracle 12c,Fedora下安装Oracle 11g
  • RIP路由协议及工作原理
  • oracle 注册表修改,Oracle 客户端注册表字符集修改-----解决乱码 .
  • 03Go 类型总结
  • AHK 中 = 和 == 等比较运算符的用法
  • Angular2开发踩坑系列-生产环境编译
  • Docker入门(二) - Dockerfile
  • flask接收请求并推入栈
  • Leetcode 27 Remove Element
  • vue数据传递--我有特殊的实现技巧
  • Vultr 教程目录
  • Yii源码解读-服务定位器(Service Locator)
  • 复习Javascript专题(四):js中的深浅拷贝
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 前端面试总结(at, md)
  • 微信小程序设置上一页数据
  • 我是如何设计 Upload 上传组件的
  • 一个SAP顾问在美国的这些年
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (ibm)Java 语言的 XPath API
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (原)本想说脏话,奈何已放下
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Core与存储过程(一)
  • .net refrector
  • .Net Web窗口页属性
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET分布式缓存Memcached从入门到实战
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET使用存储过程实现对数据库的增删改查
  • .NET中GET与SET的用法
  • .stream().map与.stream().flatMap的使用
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @Transactional 竟也能解决分布式事务?
  • @取消转义
  • []C/C++读取串口接收到的数据程序
  • [AutoSar]BSW_Com07 CAN报文接收流程的函数调用
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [C++基础]-初识模板