页面静态化技术

由于在向服务器访问一个资源文件的时候,静态页面要远比动态页面的效率要高。因为动态文件需要脚本执行,或者数据库的读取开销(磁盘IO开销);

因此,就需要将动态网站的数据变成静态化,更加提升网站的整体性能。(用户体验),要保证用户在最短的时间内最高效的在浏览器端展示出页面。

页面静态化分为:

1、真静态:形成真正的静态html文件;

2、伪静态:在URL地址上做出一个类似静态URL的地址 形式上 好 并且利于(SEO);利用apache中的重写功能;

真静态

主要就是利用一个叫ob缓存的技术来实现,一般一个php脚本在请求的时候,需要完成三个缓存,

1. ob缓存(php自带,默认是关闭的),如果开启的话,程序在执行过程中,会把输出的内容先放到ob缓存中(遇到响应头,放入程序缓存中)

2. 程序缓存(是必须开启的,响应头和响应主体),如果ob缓存没有开启,数据就直接到程序缓存中,在php5.3之前的版本,在响应头之前是不可以有输出内容的,不然会报错,但php5.3之前就不会,因为在程序缓存输出给浏览器时,会对缓存中的数据与响应头做相应的调整;

3. 浏览器缓存

现实ob缓存的相关函数:


ob_start() ob缓存开启

ob_get_contents() 获取ob缓存里面的内容(但ob缓存中的数据还在,相当于复制一份)

ob_clean() 清空ob缓存的内容,但是不关闭ob缓存

ob_end_clean() 清空ob缓存的内容,并关闭ob缓存

ob_flush() 将ob缓存的内容输出到程序缓存,但是不关闭ob缓存(相当于直接把ob缓存中数据剪切到程序缓存中)

ob_end_flush 将ob缓存的内容输出到程序缓存,并关闭ob缓存

具体实现小案例:

先建立一个index.php文件在前端现实简单数据

主要是循环输出一些信息,然后有个链接可以点击跳转;


<?php
	
	//连接数据库
	mysql_connect('localhost','root','mysql');
	mysql_query('set names utf8');
	mysql_query('use blog');
	
	$sql = 'select * from bl_article';
	$result = mysql_query($sql);
	
	$data = array();
	while($row = mysql_fetch_assoc($result)){
		$data[]  = $row;
	}
	
?>	
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
	<title>页面静态化</title>
	<meta name="keywords" content="关键字列表" />
	<meta name="description" content="网页描述" />
	<link rel="stylesheet" type="text/css" href="" />
	<style type="text/css"></style>
	<script type="text/javascript"></script>
</head>
<body>
	<ul>
		<?php foreach ($data as $v){ ?>
			<li><?php echo $v['id'],'|',$v['a_title'],'|',"<a href='detal.php?id={$v['id']}'>详情</a>"; ?>></li>
		<?php }?>
	<ul>
</body>
</html>
然后再接受处理:


主要实现,就是为了,当第一次访问的时候,开启了ob缓存,并把ob缓存里面的数据,写入到一个静态html文件中,当下次访问中,就先判断是否有该静态文件了,如果有就直接读取静态文件,终止脚本结束;没有就在生成;


<?php

//接受id
$id = isset($_GET['id'])?intval($_GET['id']):1;

//判断是否有静态文件
if(file_exists("./static/{$id}.html")&& (filemtime("./static/{$id}.html")+30>time())){
	include_once "./static/{$id}.html";exit;
}
//连接数据库
mysql_connect('localhost','root','mysql');
mysql_query('set names utf8');
mysql_query('use blog');

$sql = "select * from bl_article where id ={$id}";
$result = mysql_query($sql);

$data = mysql_fetch_assoc($result);

//开启ob缓存
ob_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn">
<head>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
	<title>页面静态化</title>
	<meta name="keywords" content="关键字列表" />
	<meta name="description" content="网页描述" />
	<link rel="stylesheet" type="text/css" href="" />
	<style type="text/css"></style>
	<script type="text/javascript"></script>
</head>
<body>
	<?php echo $data['id']; ?>
</body>
</html>
<?php 
	//从ob缓存中获取数据
	$data = ob_get_contents();
	//保存静态数据到静态文件中
	file_put_contents("./static/{$id}.html",$data);
?>


伪静态

实际访问的是一个动态php脚本文件,但在地址栏上显示的是.html后缀的文件,因为这样有利于seo;


实现原理:利用Apache提供的Rewrite模块,将URL地址重写

1. 开启Apache配置文件httpd.conf文件中的Rewrite模块,然后需要重启Apache


# 开启重写模块
LoadModule rewrite_module modules/mod_rewrite.so



2. 需要将当前虚拟主机的一个配置改掉

<VirtualHost *:80>
             ServerName  www.servername.com 
             DocumentRoot "D:/Web/www.xxx.com"
             <Directory "D:/Web/www.xxx.com">
                    DirectoryIndex  index.php index.html
                    Options indexes
                    #将这里的nong改为all
                    AllowOverride  all
                    Order deny,allow
                    allow from all
              </Directory>
</VirtualHost>
3、在当前站点根目录下,创建一个.htaccess的文件,注意请使用编辑器来创建该文件,不然会创建不成功;

    然后再该文件中编辑如下代码:

# 表示开启重写功能
RewriteEngine on
# 重写的规则 这里可以使用正则来匹配
RewriteRule index.html index.php


以上纯属个人学习理解,如有不对,来访者请指正。谢谢!








你可能感兴趣的:(ob缓存)