这是从我为类似需求编写的内容派生出来的。
empty( $_GET[\'my-css-var\'] ) || add_action( \'plugins_loaded\', \'wpse_59089_css\' );
function wpse_59089_css()
{
header( \'Content-Type: text/css\' );
// Aggressive caching to save future requests from the same client.
$etag = \'"\' . md5( __FILE__ . $_GET[\'my-css-var\'] ) . \'"\';
header( \'ETag: \' . $etag );
header( \'Expires: \' . gmdate( \'D, d M Y H:i:s\', time() + 31536000 ) . \' GMT\' );
header( \'Cache-Control: public, max-age=31536000\' );
if ( empty( $_SERVER[\'HTTP_IF_NONE_MATCH\'] ) || $etag != stripslashes( $_SERVER[\'HTTP_IF_NONE_MATCH\'] ) ) {
// Set all your variables here.
$my_height = 100;
// Render your CSS with a heredoc!
$content = <<<CSS
#my_id {
height: $my_height;
}
CSS;
header( \'Content-Length: \' . strlen( $content ) );
echo $content;
} else {
// Not modified!
status_header( 304 );
}
// We\'re done!
exit;
}
而资源链接就是:
http://example.com/?my-css-var=20120719_or_static_hash.css
每当更改CSS时(通常在设置更新之后),更改URL中的日期戳/哈希以强制刷新。
如果已在服务器级别关闭ETag,则需要发送并检查“上次修改”。
Update:
不要使用链接。额外的http请求是有害的。将动态CSS内联。真正地甚至谷歌也推荐它。
这要看情况而定。除非CSS的重量很小,或者它只适用于重复访问量很低的一次性页面,那么是的,内联可能是一种方式。
但积极缓存的外部样式表只会在第一次访问时触发请求(对于大多数客户机*)。
网站的每一位新访问者都必须以某种方式下载CSS。但是,内联样式将为每个后续视图发送,而外部样式将命中本地缓存。
以1000名访客为例,每个点击10次,500字节的CSS。内联将使带宽增加约4MB**。可能看起来不太多,但增加CSS大小或每个访问者的点击率,它将继续蔓延。
就像我刚说的,这要看情况而定!CSS有多大?在哪里使用?你的新访客和忠实访客比例高吗?(*你的大多数观众都支持代理吗?)(**您是否在HTML上实现了“未修改”)
我想我要说的是,“HTTP请求是邪恶的”并不是福音,即使它是从谷歌口中说出来的;)
我仍然认为,任何超过几行的内容都属于外部样式表,再加上一组紧凑的缓存规则,但这适合我,而不是所有人!