随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化。
一般情况下会从以下方面来做优化
- 动态页面静态化
- 优化数据库
- 使用负载均衡
- 使用缓存
- 使用CDN加速
什么是静态化?
静态化是解决减轻网站压力,提高网站访问速度的常用方案.包括:纯静态和伪静态。两者的区别在于PHP生成静态页面的处理机制不同。
①纯静态:将PHP程序生成静态的HTML文件,保存到服务器的磁盘中。客户端访问的时候直接输出。不用脚本解释。在流量非常大的时候(比如每天有上百万的访问量的时候)会起到很好的效果。也就是说服务器端实实在在的存在这个HTML页面。
原理:在用户访问PHP程序时,首先检测静态的HTML文件是否存在,如果存在直接输出静态文件,如果静态文件不存在,查询数据库,生成静态文件,并输出。
html静态页(真静态)的好处有三点:一是减少服务器对数据响应的负荷,二是加载不用调动数据库,响应速度快。三是便于优化引擎。
缺点也有三点:一是维护不方便,每次都要手动生成。三是空间占用比较大。三是生成的文件多了,服务器对html文件的响应负担也较重。
②伪静态:没有静态文件的静态化
url 重写(伪静态)的好处:一,可以方便的实现对化化引擎的优化,并且比生成静态更加方便。二、占空间比较小。三、首页每天都自动变化,不用维护。网站首页一 般都有热点排行之类的,你可以设为,24小时排行,一周排行,再加上最新文章,最新点评等。这样首页天天是有变化的。四,便于广告的轮显。比如:你可以把 art1234.aspx,这个虚成n个页,如art_1234.aspx,news_1234.aspx,top_1234.aspx,在不同的页面放 不同的广告.总之是动态的,你就可以随意动。
url重写的缺点:我看只有一个,那就是效率不如生成html的,因为它不是真正意义上的静态页,每次请求是要读取数据库的。但你可以用缓存技术来补偿一下。
主要函数:
ob_start()函数:打开输出缓冲区.函数格式
void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。
ob_get_contents :返回内部缓冲区的内容。
函数格式:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE.
ob_get_length:返回内部缓冲区的长度。
函数格式:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活,则返回 FALSE.
ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
函数格式:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除
ob_end_flush: 发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区
函数格式:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)
ob_implicit_flush:打开或关闭绝对刷新
函数格式:void ob_implicit_flush ([int flag])
说明:默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()
ob_start(); //打开输出缓冲区
$cacheTime = 10; //设置缓存页面过期时间(以秒为单位)
$cacheDir = 'obtest.html'; //设置缓存页面文件目录
//判断文件是否存在或过期重新生成缓存文件
if(!is_file($cacheDir) || time()-filemtime($cacheDir)> $cacheTime){
echo "this's a test file";
$content = ob_get_contents(); //取得php页面输出的全部内容
$fp = fopen($cacheDir, "w"); //输出内容写入文件
fwrite($fp, $content);
fclose($fp);
}else{
echo "Cache: ";
echo file_get_contents($cacheDir);
}
伪静态的实现可以参考链接: http://blog.csdn.net/myhuashengmi/article/details/52002554