CSS minifier的选择

时间:2011-12-16 17:03:47

标签: php css minify

我正在寻求升级到更新的CSS minifier,它可以在PHP中缩小CSS。我目前正在使用旧版https://github.com/mrclay/minify

但是,我还发现http://code.google.com/p/cssmin/似乎更频繁地更新,并且经常被提及。

对于速度和兼容性以及较新的CSS3规则和htc文件,您对这两个库有什么经验?

我已经发现Minify必须在我的情况下进行编辑才能在我的网站上工作,因为当放在另一个目录中时,包含似乎不能很好地工作,这可以通过更换文件来更轻松地进行更新工作。 / p>

缩小的CSS将存储在CSS文件中一次,直到原始CSS文件更新为止,因此缩小器将不会经常运行。但是,我不希望访问者在CSS更新后第一次访问网站时必须等待太长时间。

提前致谢!

7 个答案:

答案 0 :(得分:6)

我通常也会使用自己的缩小器:

<?php
function compress ($code) {
    $code = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $code);
    $code = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $code);
    $code = str_replace('{ ', '{', $code);
    $code = str_replace(' }', '}', $code);
    $code = str_replace('; ', ';', $code);

    return $code;
}

但最近已切换到SASS所以现在我使用它的--style = compressed。

我也尝试过CSSTidy,它不仅仅是简化并且可以与PHP一起使用:

<?php
include DOCROOT . 'Lib/CSSTidy/class.csstidy.php';

$cssTidy = new csstidy();

$cssTidy->parse($CSSCode);
$cssTidy->set_cfg('remove_last_;', true);

echo $cssTidy->print->plain();

答案 1 :(得分:1)

YUI compressor。您甚至可以创建一个ANT任务来在CSS上运行它,同时生成可部署的版本和内容

答案 2 :(得分:0)

虽然这不是一个编程问题,但我实际上使用了我自己的,非常简单的缩小器:

public static function CompressCssFile($file) {
    ob_start(array(self::GetInstance(), 'compressCss'));

    header('Cache-Control: max-age='.(3600 * 24).', must-revalidate');
    header('Content-type: text/css');
    header('Expires: ' . gmdate('D, d M Y H:i:s', time() + (3600 * 168)) . ' GMT');
    header('Last modified: ' . (file_exists($file) ? filemtime($file) : gmdate('D, d M Y H:i:s', time())) . ' GMT');

    include_once $file;
    ob_end_flush();
}

private function compressCss($buffer) {
    // Remove comments:
    $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
    // Remove tabs, excessive spaces and newlines
    $buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '   '), '', $buffer);

    return $buffer;
}

非常适合我。

答案 3 :(得分:0)

http://code.google.com/p/minify/

我在所有项目中使用它。它很容易设置:只需将“min”目录放在根文件夹中,然后转到http://yourserver.com/min将文件添加到minify URL。

它的主要优点是生产,但是在开发中使用它可能会令人沮丧,因为文件被缓存(因此,如果您的CSS文件不断变化,这不是您的最佳选择)。但是,它非常强大,可以组合多个CSS或多个JS文件,并缓存组合的缩小文件,以显着优化加载时间。


P.S。

我将此与lessphp https://github.com/leafo/lessphp结合使用 这个较少的PHP实现仍然有一些关于解析百分比的错误,但除此之外就像魅力一样。

答案 4 :(得分:0)

这非常好:https://github.com/leafo/lessphp 您可以在PHP脚本中将其用作类,也可以从命令行执行它。它将Less编译成CSS并且还可以缩小它。即使你不使用Less,它仍然可以缩小普通的旧CSS。

答案 5 :(得分:0)

作为https://packagist.org/packages/tubalmartin/cssmin的作者,我建议你试一试吗?它是一个最初基于YUI压缩器的PHP端口。如果你问我,它应该覆盖CSS3就好了;)

答案 6 :(得分:0)

article也有一些示例代码,并带有解释。我发现此代码块比此处的其他代码更完整,更易于阅读:

function minimizeCSS($css){
    $css = preg_replace('/\/\*((?!\*\/).)*\*\//', '', $css); // negative look ahead to remove comments
    $css = preg_replace('/\s{2,}/', ' ', $css); // remove extra whitespace
    $css = preg_replace('/\s*([:;{}])\s*/', '$1', $css); // remove unneeded whitespace
    $css = preg_replace('/;}/', '}', $css); // remove last semicolon
    return $css;
}

一个测试是:

/* crazy ** /** test */ body { /* who would write css 
 like this? */background:    white   !important;}
a
{
color :blue
;
}

哪个会成为:

body{background:white !important}a{color:blue}

对以下情况进行正确处理的测试:

  1. 一行上有两个注释
  2. 评论中的星号和斜杠
  3. 不可删除的必要空白
  4. 多行注释