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. もしそうなら、レスのポイントは何ですか?実際に本番環境で使用することはできませんか?または、一度だけ生成するように forceCompile を無効にしますか?

forceCompile に関する明確な説明をいただければ幸いです。

(そして、はい、私は明確な説明をすべて探しました...私が見つけることができる最高のものはこれでした)。

4

1 に答える 1

1

最初に、 lessのポイントを教えてください。

  1. less はメタ言語であるため、一般的に言えば、使用する「言語」はより少ない構文ですが、less を使用すると保守が容易な cssを作成するのに役立ちます。一般的な例として、less ファイルの他のステートメントに従って css 値にコンパイルされる変数を less で定義できます。または、OOP をサポートする他のほとんどの言語と同様に、ミックスイン、ネスト、継承の概念を使用できます。

  2. したがって、コンパイル時に実際の css に変換される、理解可能で読み取り可能な 擬似/メタ cssコードを記述します。


今拡張子:

を無効にしても、拡張子がファイルが変更されたかどうかをチェックするため、style.less で行われた変更が反映されるはずです (LessCompiler.php の次の行は、それforceCompileについて納得させるはずです)。

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 に答える