动态页面
静态页面
关于优化页面响应时间
- 动态页面静态化
- 优化数据库
- 使用负载均衡
- 使用缓存
动态页面静态化不适用于内容经常变动的应用,例如微博…
动态程序
- 连接数据库服务器或者缓存服务器
- 获取数据
- 填充到模板
- 呈现给用户
关于动态URL地址设置静态形式
- c代表控制器
- a代表index的方法
- 加载之后仍然是动态页面,伪静态
纯静态化案例实现
buffer其实就是缓冲区,一个内存地址空间,主要用于存储数据区域
输出流程
//php.ini
ob_start();//开启缓冲区,当php.ini中output_buffering未开启的时候,可以采用这种方法
output_buffering = 4096
ob_get_contents();//获取缓冲区的内容
php如何实现页面纯静态化
- file_put_contents()函数
- fwrite—写入文件
- 使用PHP内置缓存机制实现页面静态化-output_buffering
- ob
ob_start //打开输出控制缓冲
ob_get_contents //返回输出缓冲区内容
ob_clean //清空(擦掉)输出缓冲区
ob_get_clean //得到当前缓冲区的内容并删除当前输出缓冲区
file_put_contents('生成文件名称(自定义)','写入内容');
纯静态
//1.连接数据库,然后从数据库里面获取数据
//2.把获取到的数据填充到模板文件里面
//3.需要把动态的页面转化为静态页面,生成纯静态化文件
单例模式连接数据库
- 构造函数需要标记为非public,防止外部使用new操作符创建对象,单例类不能在外部实例化,只能在内部,这样进行访问控制
- 拥有一个保存类的实例的静态成员变量
- 拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)
<?php
/**
* 数据库链接封装
* 代码注释(done)
*/
class Db {
// 存储类的实例的静态成员变量
static private $_instance;
// 数据库链接静态变量
static private $_connectSource;
// 链接数据库配置
private $_dbConfig = array(
'host' => '127.0.0.1',
'user' => 'root',
'password' => '',
'database' => 'cms',
);
private function __construct() {
}
/**
* 实例化
*/
static public function getInstance() {
// 判断是否被实例化
// 访问实例的公共的静态方法
if(!(self::$_instance instanceof self)) {
//本类的属性$_instance是否是本类的实例
//self指的是本类
self::$_instance = new self();
}
return self::$_instance;
}
/**
* 数据库链接
*/
public function connect() {
if(!self::$_connectSource) {
// 数据库链接
self::$_connectSource = @mysql_connect($this->_dbConfig['host'], $this->_dbConfig['user'], $this->_dbConfig['password']);
//@符号为阻止警告输出
if(!self::$_connectSource) {
// 抛出异常处理
throw new Exception('mysql connect error ');
}
// 选择一款数据库
mysql_select_db($this->_dbConfig['database'], self::$_connectSource);
// 设置字符编码
mysql_query("set names UTF8", self::$_connectSource);
}
// 返回资源链接
return self::$_connectSource;
}
}
//test
/**
$connect = Db::getInstance()->connect();
$sql = "select * from 表名";
$result = mysql_query($sql,$connect);
echo mysql_num_rows($result);
var_dump($result);
*/
//1.链接数据库,从数据库里面获取数据
//2.把获取到的数据填充到模板文件里面
//3.需要把动态的页面转化为静态页面,生成纯静态化文件
<ul>
<?php foreach($news as $k = >$v)
如何出发系统生成纯静态化页面
静态文件.shtml
页面添加缓存时间
filemtime()获取文件修改时间
time()-filemtime()<设定时间
手动触发
crontab定时扫描程序
important
局部动态化案例
ajax技术
- 编写接口(api)
- ajax请求接口操作
//jquery方式调用ajax
$.ajax({
url:'',
type: 'get',
dataType:'json',
error:function(){
},
success:function(result){
},
});
伪静态
PHP处理伪静态
/*
通过正则表达式去分析伪静态URL地址
eg:
http://state.com/newsList.php?type=2&category id=1
伪静态地址
http://state.com/newsList.php/2/1.html
2=》type=2 1=>category_id=1
*/
//正则表达式
preg_match('/^\/(\d+)\/(\d+).html/',,)
Web服务器rewrite配置
- 虚拟域名配置
- httpd_vhosts.conf配置文件配置相关信息
AllowOverride None
修改为
AllowOverride ALL
- 终端执行sudo a2enmod rewrite
- 或者使用 ln 命令
sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
- 最后重启Apache服务器
//伪静态配置方案
RewriteEngine on
/*
1.d代表目录,f代表文件
2.该设定是在网站文件目录下,如果有相同的目录,访问存在目录,而不是访问伪静态文件
*/
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}!-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}!-f
Rewrite ^/detail/([0-9]*).html$/detail.php?id=$1