使用ob系列函数实现PHP网站页面静态化
作者:hebedich 发布时间:2023-11-15 03:26:05
将PHP的执行页面预先转换成HTML,是所谓的PHP静态化方法之一。
其他还有模板替换法,opcache等方法。
静态化的作用:
提高网站的响应速度,降低服务器的负载;
用于搜索引擎的SEO;
利用PHP输出buffer直接写成html,定时后台定时扫一遍网站,是比较容易实现的网页静态化。
静态化之前:
<?php
for($i=0;$i<1000;$i++){
echo "bull<br>";
}
?>
静态化:
<?php
ob_start();
for($i=0;$i<1000;$i++){
echo "bull<br>";
}
$str = ob_get_contents();
ob_end_clean();
$fp = fopen("test.html","w");
fwrite($fp,$str);
fclose($fp);
echo "<div>success write</div>";
?>
该段代码就会预先形成一个test.html,说白了其实就是用空间换取时间,像新闻类网站,发布的内容基本上写完是不会变了,比较适合静态化成html。
用户访问的时候就direct到这个html页面上就可以了。
简单的用apache benchmark测试一下效果:
ab.exe -n1000 -c10
两者在90%以上的连接中,至少相差150ms。相对于复杂的php来说,html节约下来的运算量还是不少的。
另附相关函数简介
1、Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。
2、ob_start :打开输出缓冲区
函数格式:void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
3 、ob_get_contents :返回内部缓冲区的内容。
使用方法:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE 。
4、ob_get_length:返回内部缓冲区的长度。
使用方法:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活。则返回 FALSE。
5、ob_end_flush :发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区。
使用方法:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)。
6、ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
使用方法:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除!
7、ob_implicit_flush:打开或关闭绝对刷新
使用方法:void ob_implicit_flush ([int flag])
说明:使用过Perl的人都知道$|=x的意义,这个字符串可以打开/关闭缓冲区,而ob_implicit_flush函数也和那个一样,默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()。


猜你喜欢
- 当我们使用 tensorflow 训练神经网络的时候,模型持久化对于我们的训练有很重要的作用。如果我们的神经网络比较复杂,训练数据比较多,那
- 使用tf.keras.MaxPooling1D出现错误错误如下ValueError: Negative dimension size cau
- Pytorch提取模型特征向量# -*- coding: utf-8 -*-"""dj""
- 在Python的学习过程中,肯定会遇到很多安装模块的地方,可以使用easy_install安装,但是easy_install相对于pip而言
- MySQL、SQL Server和mSQL都是绝佳的SQL工具,可惜,在ASP的环境下你却用不着它们来创建实用的SQL语句。不过,你可以利用
- 1. 概述在看代码的时候发现基本上都是用 querySelector() 和 querySelectorAll() 来获取元素,疑惑为什么不
- 技术背景GPU的加速技术在深度学习、量子计算领域都已经被广泛的应用。其适用的计算模型是小内存的密集型计算场景,如果计算的模型内存较大,则需要
- 关于这篇文章有几句话想说,首先给大家道歉,之前学的时候真的觉得下述的是比较厉害的东西,但是后来发现真的是基础中的基础,内容还不是很完全。再看
- 图片缩放会失真是真理,在浏览器里也一样,貌似使用传说中的双三次插值可以让失真看起来比较不明显,但是真的想不通IE7已经实现了,却不默认打开,
- 文章主要讲术了一些SQL Server新的Bug,帮您认识这些被忽略的SQL Server注入技巧。1.关于Openrowset和Opend
- Python socket C/S结构的聊天室应用服务端:#!/usr/bin/env python#coding:utf8 import
- python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供
- 本文实例为大家分享了小程序实现横向滑动日历效果的具体代码,供大家参考,具体内容如下<scroll-view class="s
- 本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法。分享给大家供大家参考,具
- 在 Python 中,你可以使用 sorted() 方法或 sort() 方法对数据进行排序。在本文中,我将提供 sorted() 和 so
- var声明变量的作用域限制在其声明位置的上下文中var x = 0; // x是全局变量,并且赋值为0。console.log(typeof
- 本文实例讲述了js实现的xml对象转json功能。分享给大家供大家参考,具体如下:支持无限级别xml结构对象转json,并且支持任意标签属性
- 一.权限表mysql数据库中的3个权限表:user 、db、 host权限表的存取过程是:1)先从user表中的host、 user、 pa
- 引言所有的层都具有的参数,如name, type, bottom, top和transform_param请参看我的前一篇文章:Caffe卷
- 创建多个交易各个客户进行的交易在系统中排队;矿工从这个队列中获取交易并将其添加到块中.然后他们将挖掘区块,获胜的矿工将有权将区块添加到区块链