学习与交流:
为什么要使页面静态化?
当用户访问不经常更新的网页时,会指示PHP解析php脚本文件,从数据库中查询页面所需的数据,然后渲染页面模板,最后将完成的页面显示给用户。
单个请求对于服务器来说处理起来非常简单和快速,但是如果数千个不同的用户同时请求该页面怎么办?这无疑是一种资源的浪费,而这正是做静态的目的。
静态分为纯静态和伪静态,纯静态又分为部分纯静态和完全纯静态。
伪静态
顾名思义,伪静态并不是真正的静态页面,而是假静态页面。例如,对于使用 PHP 作为后端语言的网站,其 URL 通常应类似于。
经过我们做伪静态处理后,您访问同一页面时显示的URL可能是相同的。
它的作用是简化路由并更好地被搜索引擎索引。当您不希望用户了解您的后端语言时也可以使用此方法。
纯静态
局部纯静态
一个页面通常由多个部分组成,比如博客,可能由文本、类别、链接、栏目等组成。当某些部分更新频繁,而另一些部分更新不频繁时,可以使用部分静态化。
全部纯静态
看完前面的内容就很容易理解了。当页面的所有内容不经常更新时使用此方法。
静态页面实现原理
首先要谈的是()。
我们举一个简单的例子来说明它的功能:当我们编辑一个文档时,在我们保存之前系统不会写入磁盘,而是会写入到磁盘中。当它已满或执行保存操作时,系统将不会写入磁盘。数据将被写入磁盘。
对于PHP来说,像echo这样的每一个输出操作也是先写入PHP。直到执行脚本或执行强制输出缓存操作后,数据才会显示在浏览器上。
对于这个缓冲区,在PHP输出内容之前,我们先把缓冲区的内容取出来(这里是渲染出来的模板内容),然后写入静态文件并设置过期时间,下次用户访问该页面时,如果静态文件存在并且在有效期内,我们将直接将静态文件显示给用户,否则我们将重写静态文件。
代码实现
数据库连接采用单例模式。
.php
class Database {
//用于保存实例化对象
private static $instance;
//用于保存数据库句柄
private $db = null;
//禁止直接实例化,负责数据库连接,将数据库连接句柄保存至私有变量$db
private function __construct($options) {
$this->db = mysqli_connect($options['db_host'], $options['db_user'], $options['db_password'], $options['db_database']);
}
//负责实例化数据库类,返回实例化后的对象
public static function getInstance($options) {
if (!(self::$instance instanceof self)) {
self::$instance = new self($options);
}
return self::$instance;
}
//获取数据库连接句柄
public function db() {
return $this->db;
}
//禁止克隆
private function __clone() {
// TODO: Implement __clone() method.
}
//禁止重构
private function __wakeup() {
// TODO: Implement __wakeup() method.
}
}
用于静态页面
缓存.php
class Cache {
public function index($options) {
//判断文件是否存在,判断是否过期
if (is_file('shtml/index.shtml') && (time() - filemtime('shtml/index.shtml') < 300)) {
require_once ('index.shtml');
}else {
require_once ('Database.php');
$con = Database::getInstance($options)->db();
$sql = "SELECT * FROM pro_test";
$exe_res = mysqli_query($con, $sql);
$res = mysqli_fetch_all($exe_res);
try{
if (!$res) {
throw new Exception("no result");
}
}catch (Exception $e) {
echo 'Message: ' .$e->getMessage();
}
//开启缓存区,这后面的内容都会进缓存区
ob_start();
//引入模板文件(模板会渲染数据)
require_once ('templates/index.php');
//取出缓存区内容(在这里是渲染后的模板),将其保存(默认会覆盖原来的)为index.shtml(static html)
file_put_contents('shtml/index.shtml', ob_get_contents());
}
}
}
//数据库配置信息
$options = [
'db_host' => 'mysql',
'db_user' => 'root',
'db_password' => 'localhost',
'db_database' => 'pro_shop',
];
$obj = new Cache();
$obj->index($options);
/index.php
<html>
<head>
<meta charset="UTF-8">
<title>首页title>
head>
<body>
foreach ($res as $item) {?>
<div>姓名: echo $item[1]?>div>
<div>密码: echo $item[2]?>div>
}?>
body>
html>
浏览器访问/Cache.php
原文链接:
以上就是本文的全部内容。希望所有程序员努力提高个人技能。最后,小编温馨提醒:每天读书5分钟,每天学习一点,每天进步一点。
丨免费获取热门教程资源丨
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。