关于优化 的速度,云顶国际-yd77699云顶国际发过「 实现 html5 预加载方法」、「给 侧边栏 添加缓存」、「优化 速度,异步加载js代码分享」,本文再分享个技巧 开启 304 not modified header,提高 效率
什么 304 not modified header?
客户端(一般是浏览器)发送了一个带条件的 get 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回 304 not modified 这个状态码。
浏览器在请求一个文件的时候,发现自己缓存的文件有 last modified ,那么在请求中会包含 if modified since ,这个时间就是缓存文件的 last modified 。因此,如果请求中包含 if modified since,就说明已经有缓存在客户端,只要判断这个时间和当前请求的文件的修改时间就可以确定是返回 304 还是 200。
中如何开启 304 not modified header
作为一个 cms 系统,如果每天更新的内容不多,对于未登录的用户来说,每次访问同一个页面,如果浏览器中已经有缓存,其实服务器无需再次生成一次页面,直接返回 304 not modified header,让用户直接查看浏览器中缓存即可。
那么在 中如何给未登录用户开启 304 not modified header 呢?
「后台」→「外观」→「编辑」 「functions.php」文件,把以下的内容添加进去:
add_filter('wp_headers','wpjam_headers',10,2);
function wpjam_headers($headers,$wp){
if(!is_user_logged_in() && empty($wp->query_vars['feed'])){
$headers['cache-control'] = 'max-age:600';
$headers['expires'] = gmdate('d, d m y h:i:s', time() 600) . " gmt";
$wpjam_timestamp = get_lastpostmodified('gmt')>get_lastcommentmodified('gmt')?get_lastpostmodified('gmt'):get_lastcommentmodified('gmt');
$wp_last_modified = mysql2date('d, d m y h:i:s', $wpjam_timestamp, 0).' gmt';
$wp_etag = '"' . md5($wp_last_modified) . '"';
$headers['last-modified'] = $wp_last_modified;
$headers['etag'] = $wp_etag;
// support for conditional get
if (isset($_server['http_if_none_match']))
$client_etag = stripslashes(stripslashes($_server['http_if_none_match']));
else $client_etag = false;
$client_last_modified = empty($_server['http_if_modified_since']) ? '' : trim($_server['http_if_modified_since']);
// if string is empty, return 0. if not, attempt to parse into a timestamp
$client_modified_timestamp = $client_last_modified ? strtotime($client_last_modified) : 0;
// make a timestamp for our most recent modification...
$wp_modified_timestamp = strtotime($wp_last_modified);
$exit_required = false;
if ( ($client_last_modified && $client_etag) ?
(($client_modified_timestamp >= $wp_modified_timestamp) && ($client_etag == $wp_etag)) :
(($client_modified_timestamp >= $wp_modified_timestamp) || ($client_etag == $wp_etag)) ) {
$status = 304;
$exit_required = true;
}
if ( $exit_required ){
if ( ! empty( $status ) ){
status_header( $status );
}
foreach( (array) $headers as $name => $field_value ){
@header("{$name}: {$field_value}");
}
if ( isset( $headers['last-modified'] ) && empty( $headers['last-modified'] ) && function_exists( 'header_remove' ) ){
@header_remove( 'last-modified' );
}
exit();
}
}
return $headers;
}
开启 304 not modified header 后,因为读取的是缓存文件,所以最新评论,可能会看不见,文章阅读次数不会更新,大家根据自己网站情况,决定开不开启这个功能吧。
# 更多技巧,请关注「专题」
方法来源: