0

我有这个:

'components'=>array(
  'less'=>array(
    'class'=>'ext.less.components.LessCompiler',
    'forceCompile'=> true, //YII_DEBUG, // indicates whether to force compiling
    //'compress'=>false, // indicates whether to compress compiled CSS
    //'debug'=>false, // indicates whether to enable compiler debugging mode
    'paths'=>array(
      'less/style.less'=>'css/style.css',
    ),
  ),

如果我启用 forceCompile,我的网站会非常慢。我会想象,因为它会在每个页面加载时重新生成 css。我的问题是禁用它。如果我禁用它:

  1. 我对 style.less 所做的任何更改都不会反映在浏览器中吗?
  2. 如果是这样,Less 的意义何在?那么它肯定不能实际用于生产吗?或者您是否禁用 forceCompile 以便它只生成一次?

任何关于 forceCompile 的澄清将不胜感激!

(是的,我一直在寻找一个明确的解释……我能找到的最好的就是这个)。

4

1 回答 1

1

首先让我告诉你less有什么意义:

  1. less 是一种元语言,因此总的来说,使用 less 可以帮助您编写易于维护的 css,尽管使用的“语言”语法较少。作为一个常见示例,您可以在 less 中定义变量,这些变量根据您的 less 文件中的其他语句编译为 css 值。或者,您可以像在大多数其他支持 OOP 的语言中一样使用混合、嵌套、继承概念。

  2. 因此,您编写可理解、可读的 伪/元 css代码,并在编译时转换为实际 css。


现在扩展:

即使您禁用forceCompile,在style.less中所做的更改也应该反映出来,因为扩展程序会检查文件是否被修改(来自LessCompiler.php的以下行应该让您相信这一点):

if ($this->forceCompile || $this->hasChanges())
    $this->compileAll();

// ...

/**
 * Returns whether any of files configured to be compiled has changed.
 * @return boolean the result.
 */
protected function hasChanges() {
    // ...
        $compiled = $this->getLastModified($destination);
    // ...
        $modified = $this->getLastModified($dir);
    // ...
}

/**
 * Returns the last modified for a specific path.
 * @param string $path the path.
 * @return integer the last modified (as a timestamp).
 */
protected function getLastModified($path){ 
    //...
}

因此forceCompile将始终编译您在 中指定的文件paths,并且您不应在生产中启用它。该hasChanges调用应该处理较少的已修改文件,并编译它们,正如您在上面看到的那样,扩展程序会自动完成。

于 2012-11-28T09:49:47.287 回答