【问题标题】:What is the fastest method to filter out duplicate CSS Rule using PHP?使用 PHP 过滤掉重复 CSS 规则的最快方法是什么?
【发布时间】:2012-03-23 13:38:12
【问题描述】:

例如,我有以下规则的 test.css

.fs24 { font-size: 24px; }
.fc77777 { color: #777777; }
.fs24 { font-size: 20px; }
.fc77777 { color: #787878; }

我想要的是一个能够接受这个输入和输出的php方法

.fs24 { font-size: 24px; }
.fc77777 { color: #777777; }

如您所见,我想通过他们的 selector 检测并过滤出重复的 css 规则。 3个处所必须持有:

  1. 过滤后的 css 规则可以是 1 liner / multi line ,只要他们的 selector 之前存在,就必须过滤掉!
  2. 为此有很多字符串操作技术,我试图找出最快的方法来做到这一点,原因是我在生产中拥有的 CSS 应该很大(我们正在尝试将所有 CSS 文件合并到一个并过滤掉所有重复的排除)
  3. LIFO,后进先出,也就是不会被过滤的是第一个 CSS 规则,任何其他具有重复 选择器 的 CSS 规则都将被完全删除:|

【问题讨论】:

  • 1.不同的选择器可以指向同一个元素 2. 你有没有尝试过或者你只是想让我们做你的工作?
  • 您最好使用现有的浏览器开发工具,该工具已具备所有这些功能。 CSS 中的级联可不是小菜一碟(这就是它名副其实的原因)。
  • @Zerkms,我想要实现的是将 10 个 css 文件缩小为 1 个 css 文件,我希望减少服务器上的重复选择器...

标签: php css string preg-replace string-matching


【解决方案1】:

我的方法是解析输入文件并使用选择器作为字典键构建规则字典。对于每个规则,检查选择器是否已经在字典中。如果是则丢弃该规则,否则将新规则添加到字典中。

完成对输入的解析后,根据字典的内容创建新的 .css 文件。

您需要小心具有多个选择器的规则。我可能会为每个选择器创建一个字典条目,但如果没有一些额外的处理,你最终会在输出文件中出现重复的代码。

【讨论】:

  • 非常感谢您的意见 :) 。出现了一个问题,将输入解析为字典的最快方法是什么?除了使用 Preg_match 之外,您会建议任何其他方法吗? (除了使用 preg_match 之外,还有其他方法可以做到这一点吗?):P
  • 使用 Preg Match,我可以使用以下 $pattern = '/(?P.*) {([^{}]*)}/';输出正确的数组 preg_match_all($pattern, $input, $matches);以后可以用来创建字典...但是主要问题仍然很清楚,这真的是最快的方法吗?我真的很担心这一点,因为在我的项目中需要将 CSS 解析为单个 CSS 文件的数量是巨大的,我的任务是找到最有效的方法(阅读:最快)来处理这个问题 :) ...请加入任何你认为可能比我更快的东西:D
【解决方案2】:

使用这个:

.fs24 { font-size: 24px !important;}
.fc77777 { color: #777777 !important;}

【讨论】:

  • 不......它根本不修剪css......我想让css尽可能小,所以消除服务器上的重复很重要:)
【解决方案3】:

这是否可行: http://code.google.com/p/cssmin/?

【讨论】:

    猜你喜欢
    • 2018-07-13
    • 2015-02-27
    • 2010-12-03
    • 2019-08-07
    • 1970-01-01
    • 2015-12-09
    • 2020-02-02
    • 2013-02-24
    • 1970-01-01
    相关资源
    最近更新 更多