【问题标题】:Minify dynamic php stylesheets缩小动态 php 样式表
【发布时间】:2011-09-28 20:02:10
【问题描述】:

所以我一直在使用Minify 来压缩我的 JS 和 CSS,在我需要压缩一些动态 php 样式表之前,这一切都很顺利。

我试图用 htaccess 让它误以为它是一个 css 文件,但后来我意识到它使用了不受 mod_rewrite 影响的绝对文件路径

无论如何,每当我将它指向一个 php 文件时,它总是返回“400 Bad Request”。除了编写我自己的压缩脚本之外,关于如何解决这个问题的任何想法?

【问题讨论】:

  • 什么是动态php样式表?
  • 所以你想使用一个可以处理平面文件的工具来压缩动态创建的东西。这听起来是不是有点……对你来说不可能? :)
  • 我将其添加为评论,因为它是在黑暗中刺伤:尝试制作一个静态 css 文件,然后在其中包含带有 @import 语句的动态文件,然后缩小静态文件。如果可行,请告诉我,我会将其添加为答案;)顺便说一句,我知道您应该避免使用@import,但是嘿。
  • 是的 def 试图避免 @import,有太多的 http 请求 atm

标签: php css dynamic stylesheet minify


【解决方案1】:

我发现处理缩小和压缩样式表的最佳方法是自己动手。看看这段代码:

<?php
header("Content-Type: text/css");
header("Last-Modified: ".gmdate('D, d M Y H:i:s', filemtime($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']))." GMT");
header("Expires: ".gmdate('D, d M Y H:i:s', (filemtime($_SERVER['DOCUMENT_ROOT'].$_SERVER['PHP_SELF']) + 691200))." GMT");

//This GZIPs the CSS for transmission to the user
//making file size smaller and transfer rate quicker
ob_start("ob_gzhandler");
ob_start("compress");

//Function for compressing the CSS as tightly as possible
function compress($buffer) {
    //Remove CSS comments
    $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
    //Remove tabs, spaces, newlines, etc.
    $buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $buffer);
    return $buffer;
}

//Main style
require_once($_SERVER['DOCUMENT_ROOT']."/templates/style/style.css");

//Other style
if($php_variable) {
    require_once($_SERVER['DOCUMENT_ROOT']."/templates/style/other.css");
}

ob_end_flush();
ob_end_flush();
?>

这里发生了很多事情,所以让我解释一下。

标题

  • 将文件类型设置为 CSS。
  • 为缓存控制设置Last-Modified 和Expires 标头(设置为一周多一点,您可以更改此设置)。

缩小和 GZIP

  • 使用ob_start,我们告诉它GZIP这个文件以及运行一个自定义函数compress。
  • compress 在发送到浏览器时删除所有 CSS cmets 和空白。这意味着您可以在源文件中以您喜欢的方式保留所有 cmets 和间距,以便于编辑,但只将最少的部分发送到浏览器。

风格

  • 使用require 导入样式表。对尽可能多的样式表执行此操作;它们都将通过一个 HTTP 请求传递给用户。

使用您的新文件

您将像调用普通 CSS 文件一样调用该文件。

<style type="text/css" src="/path/to/css-script.php"></style>

结论

使用这种方法,您正在做一些很棒的事情。

  • 为缓存提供正确的标头,让您的网站快速回访。
  • 缩小所有内容以不包含额外的空格或 cmets。
  • 使用 GZIP 压缩文件以减小文件大小。
  • 在一个 HTTP 请求中包含所有样式表,非常适合优化。
  • 避免使用@import 语句...这本身就很棒。
  • 允许您保留多个样式表并使用 PHP 逻辑来包含或不包含它们。
  • 让您可以根据需要保持源样式表的间距和注释,而不会对访问者造成任何影响。

您也可以对 JavaScript 使用相同的方法,尽管上面的 compress 函数严格用于 CSS,所以我会省略它。

将此技术与此缓存控制技术结合使用,您已经为自己构建了一个很棒的 CSS/JS 处理程序:How to force browser to reload cached CSS/JS files?

【讨论】:

  • 我必须自己调整一下。使用 CSS,Minify 真的很慢。
  • 哈完美的答案,不错的一个小伙子:) 希望我能给你过度使用“真棒”这个词的奖励点:P
  • 请注意,由于缺乏 gzip 支持,因此无法与 safari 一起使用
猜你喜欢
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2014-04-29
  • 1970-01-01
相关资源
最近更新 更多