PHP页面静态化的优缺点与实现

作者:寻找09之夏 时间:2023-05-27 09:14:40 

前言

随着网站的内容的增多和用户访问量的增多,网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化。

一、页面静态化概念

静态化定义

静态化就是指把原本的动态生成的 html 页面变成静态内容保存起来,当用户客户端请求的时候,直接返回静态页面,不用再经过服务渲染,不用查询数据库,可以大大减少服务器和数据库压力,显著提升网站性能。

静态页面

静态页面,即静态网页,是实际存在的,无需经过服务器的编译,直接加载到客户浏览器上显示出来。静态页面需要占一定的服务器空间,且不能自主管理发布更新的页面,如果想更新网页内容,要通过FTP软件把文件DOWN下来用网页制作软件修改(通过fso等技术例外)。常见的静态页面举例:.html扩展名的、.htm扩展名的。

动态页面

动态页面是通过执行asp,php,jsp,.net等程序生成客户端网页代码的网页。 动态页面通常可以通过网站后台管理系统对网站的内容进行更新管理。发布新闻,发布公司产品,交流互动,博客,网上调查等,这都是动态 网站的一些功能。也是我们常见的。 动态页面常见的扩展名有:.asp .php .jsp .cgi.aspx 等。 注意:动态页面的“动态”是网站与客户端用户互动的意思,而非网页上有动画的就是动态页面。

静态化分类

  • 从形式看:纯静态和伪静态

  • 从范围看:整体静态化和局部静态

静态化优点和缺点

优点:

  • 适合 SEO,有利于搜索引擎收录

  • 提升网站速度和稳定性

  • 网站更加安全,HTML 页面避免 PHP 相关漏洞

缺点:

  • 生成静态页面多,占用更多的存储空间

  • 增加网站开发成本和维护成本

二、静态化实现

认识 PHP Buffer

在php中,buffer其实就是缓冲区,一个内存地址空间,主要用于存储数据;默认是开启状态,大小默认4096,在php.ini文件中由output_buffering配置,只有当缓冲区满了或者 php 运行完毕,才将数据输出去。

php.ini 代码示例:

output_buffering = on
#打开output缓冲,默认打开的。

缓冲流程:

# 详细了解输出过程,大家可以自行查阅
1.打开了 php 输出缓存: echo,print -> php output_buffring -> server buffering -> browser buffering -> browser display
2.未打开 php 输出缓存: echo,print -> server buffering -> browser buffering -> browser display

原生PHP输出(创建 index.php 文件,本地配置虚拟域名"www.test.vip")。

代码如下(示例):

<!DOCTYPE html>
<html lang="">
<head>
   <meta charset="utf-8">
   <title>网页静态化</title>
</head>
<body>
<h1>排名</h1>
<ul>
   <?php for ($i = 1; $i <= 5; $i++) { ?>
       <li>No.<?php echo $i; ?></li>
   <?php } ?>
</ul>
<?php ?>
</body>
</html>

请求如下(www.test.vip/index.php):

PHP页面静态化的优缺点与实现

使用PHP文件读写功能生成静态页面

代码如下(示例):

<?php
$data = '<!DOCTYPE html>
<html lang="">
<head>
   <meta charset="utf-8">
   <title>网页静态化</title>
</head>
<body>
<h1>排名</h1>
<ul>
   <li>No.1</li>
   <li>No.2</li>
   <li>No.3</li>
   <li>No.4</li>
   <li>No.5</li>
</ul>
</body>
</html>';
$fp = fopen("index.html", "w");
if (!$fp) {
   echo "System Error";
   exit();
}
fwrite($fp, $data);
fclose($fp);
echo "生成 index.html 成功!";

其中"$data"数据是解析好的前端代码,若包含 PHP 原生代码是无法解析的,那如何把动态的 PHP 语言静态化?

PHP OB 缓存机制生成静态页面

代码如下(示例):

<?php
ob_start();
require_once('index.php'); // 引入模版文件
$data = ob_get_contents();
file_put_contents('index.html', $data); // 生成静态文件 index.html
ob_end_clean(); // 输出信息并清除缓存
$fp = fopen("index.html", "w");
if (!$fp) {
   echo "System Error";
   exit();
}
fwrite($fp, $data);
fclose($fp);
echo "生成 index.html 成功!";

其他

ob_start() // 打开输出控制缓冲,若 php.ini 已经开启,那么这里会开启一个新的输出缓冲区;
ob_get_length() // 返回输出缓冲区的长度
ob_get_level() // 返回输出缓冲区的嵌套级别
ob_get_status() // 返回输出缓冲区的状态(数组形式返回,默认返回最顶层,参数为true时返回所有)
ob_get_contents() // 返回输出缓冲区的内容
ob_get_clean() // 以字符串格式返回当前输出缓冲区并关闭输出缓冲,等价于ob_get_contents和ob_end_clean);
ob_end_clean() // 清空(擦除)缓冲区并关闭输出缓冲
ob_get_flush() // 以字符串返回输出缓冲区内容并关闭缓冲
ob_end_flush() // 冲刷出(送出)输出缓冲区内容缓冲并关闭输出缓冲

来源:https://blog.csdn.net/qq_34272964/article/details/129101680

标签:PHP,页面,静态化
0
投稿

猜你喜欢

  • 数据库Oracle数据的异地的自动备份

    2010-07-27 13:28:00
  • Python 关于反射和类的特殊成员方法

    2021-10-16 19:30:13
  • python按比例随机切分数据的实现

    2021-05-28 05:17:34
  • python安装mysql的依赖包mysql-python操作

    2024-01-20 22:00:54
  • python中实现修改图像分辨率大小

    2021-05-06 06:23:22
  • PHP删除数组中指定值的元素常用方法实例分析【4种方法】

    2024-06-05 09:51:58
  • 关于SQL Update的四种常见写法

    2024-01-25 09:40:07
  • nx.adjacency_matrix计算邻接矩阵与真实结果不一致的解决

    2023-12-06 14:23:56
  • 详解Python import方法引入模块的实例

    2021-01-10 04:21:08
  • SQL Server的全文搜索功能

    2024-01-27 20:49:24
  • SQL Server 2005 FOR XML嵌套查询使用详解

    2009-01-06 11:20:00
  • 在 Python 中接管键盘中断信号的实现方法

    2022-11-25 15:14:55
  • python实现哈希表

    2022-12-16 09:00:19
  • js中eval()函数和trim()去掉字符串左右空格应用

    2024-04-19 10:00:16
  • 如何用idea数据库编写快递e站

    2024-01-23 08:43:56
  • 一文详解Python中多进程和进程池的使用方法

    2023-12-01 04:10:12
  • 解析Python中的变量、引用、拷贝和作用域的问题

    2023-07-10 16:54:21
  • Python 元组(Tuple)操作详解

    2023-06-28 15:36:39
  • html+css+js实现别踩白板小游戏

    2023-09-02 10:05:42
  • python中使用paramiko模块并实现远程连接服务器执行上传下载功能

    2021-03-29 07:00:56
  • asp之家 网络编程 m.aspxhome.com