服务器并发太高,服务器资源和带宽资源不足时,请记住伟大的浏览器缓存吧!也许你依然不以为然,觉得提高服务器的吞吐量有很多办法,比如在服务器端做缓存,把页面静态化,等等。但是我相信有一个东西你应该会在意,没错,就是带宽,在意吧?如果能利用好浏览器缓存,将可以降低你的宽带资源,这样不是很好吗。
请大家点评一下这个php浏览器缓存类!!!
public static function browser_http_cache( $type = 'nocache' , $interval =0, $mktime = '' , $etag = '' ){
if ( $type == 'nocache' ){
header('Expires: -1' );
header('Pragma: no-cache' );
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0' );
}else {
if (isset( $_SERVER['HTTP_IF_NONE_MATCH']) && $etag && $_SERVER ['HTTP_IF_NONE_MATCH'] == $etag ){
header('HTTP/1.1 304 Not Modfied');
}elseif (isset( $_SERVER [ 'HTTP_IF_MODIFIED_SINCE' ]) && $mktime && $_SERVER ['HTTP_IF_MODIFIED_SINCE'] == gmdate('r',$mktime ).'GMT'){
header('HTTP/1.1 304 Not Modfied');
}else {
if ($mktime){
$gmtime = gmdate('r',$mktime + $interval).'GMT';
header('Expires:'.$gmtime); //本地缓存目录中,文件过期的时间(由服务器指定具体的时间)
}
if ($type == 'public' ){ //public可以在任何地方缓存
header('Cache-Control: public,max-age='.$interval ); // max-age内容能够被缓存的时间
}elseif ( $type == 'private' ){ //private只能被浏览器缓存
header('Cache-Control: private,max-age='.$interval.',s-maxage=0' );
}elseif ( $type == 'none'){
header('must-revalidate,proxy-revalidate'); //告诉浏览器当前页面不进行缓存,每次访问的时间必须从服务器上读取最新的数据
}
}
if($type='cachetime'){
$cache_time = $interval; //十分钟缓存
$modified_time = @$_SERVER['HTTP_IF_MODIFIED_SINCE'];
if( strtotime($modified_time)+$cache_time > time() ){
header("HTTP/1.1 304 Not Modfied");
exit;
}
header("Last-Modified: ".gmdate("D, d M Y H:i:s", time() )." GMT");
}
$mktime && header( 'Last-Modified: ' . gmdate ( 'r' , $mktime ) . ' GMT' );
$etag && header( 'ETag: ' . $etag );
}
}