9

グランはCSSファイルをコンパイルするのにかなり時間がかかりますが、これは正常ですが普通のコンパスの時計には約5秒かかりますかわかりません。コンパスと時計でグランツが遅くコンパイル

グランツのコンパイル時間を短縮する方法があるのか​​、それともコンパスの時計をつけるだけの方がいいですか?

Running "compass:dist" (compass) task 
♀unchanged images/sprite-sf580a96666.png 
overwrite stylesheets/app.css (3.263s) 
unchanged images/sprite-sf580a96666.png 
overwrite stylesheets/app_fr.css (3.289s) 
Compilation took 11.116s 

Running "watch" task 
Completed in 13.974s at Wed Dec 18 2013 13:53:05 GMT-0500 (Eastern Standard Time- Waiting... 
OK 
>> File "scss\_core.scss" changed. 

Gruntfile.js:

compass: { 
     dist: { 
      options: { 
      config: 'config.rb' 
      } 
     } 
    }, 

    watch: { 
     sass: { 
      files: ['scss/*.scss'], 
      tasks: ['compass:dist'], 
      options: { 
       spawn: false, 
      } 
     }, 
     scripts: { 
      files: ['js/*.js'], 
      tasks: ['concat', 'uglify'], 
      options: { 
       spawn: false, 
      } 
     } 
    } 

}); 

答えて

16

うなり声からコンパス、構築、展開、またはcompileの代わりwatchを必要と何かするとき、あなたは二コンパスタスクを作成し、それを使用する必要があります:

compass: { 
    // Compass grunt module requires a named target property with options. 
    compile: { 
     options: {} 
    } 
} 
+0

これは変更されたクライアントサイドファイルをリロードするために機能しますが、watchタスク内にある場合はexpressjをリロードできません。 – gerasalus

+0

@gerasalus 'watch'タスクにオプションとして' livereload:true'を追加する必要があると思います。 https://github.com/gruntjs/grunt-contrib-watch#optionslivereloadをご覧ください。 –

5

さて、あなたcan watch using the Grunt-contrib-compass watch option。それはあなたがより良いパフォーマンスを持つようにコンパスの時計を生成します。これにより、複数の種類のファイルを見ることはできません(たとえば、.coffeeファイルを監視したり、常にjsなどを再構築している場合など)。

grunt-contrib-watchが絶対に必要な場合は、gruntタスクを使用して擬似キャッシュがアクティブになっていることを確認してください。ここに貼り付けた設定から、そのように見えます。しかし、コンパイルにコンパイルに時間がかかる理由は、通常はキャッシュの問題です。だから私はGruntfile.jsをダブルチェックします。

また、多くのスプライトおよび画像操作方法は、処理するのにかなり時間がかかることがあります。

concurrent: { 
    watch: { 
     tasks: ['watch', 'compass:watch'], 
     options: { 
      logConcurrentOutput: true 
     } 
    } 
}, 
compass: { 
    watch: { 
     options: { 
      watch: true 
     } 
    } 
} 

を実行したい場合:サイモンは作男-contribのコンパスのwatchオプション、あなたが互いに並んで、二つのプロセス、効果的grunt watchcompass watchを実行するためにgrunt-concurrentを使用することができますについて言及するものと一緒に

2

これでパーティーに少し遅れたかもしれませんが、これが誰にも役立つ場合は:

私はgrunt-contrib-watchとsassで同じ性能を見いだしました。これを回避する最善の方法は、別の時計プラグインを使用することです。私はgrunt-watch-nospawn(grunt-contrib-watchプラグインとは対照的に)が草をコンパイルするのがはるかに高速であることを発見しました。かなり大幅に - 私は約2秒の改善を見ている。

速度をさらに微調整したい場合は、grunt-contrib-sassの代わりにgrunt-sassを使用して、libsassを使用して速度を増やすことができます。

これは自動プレフィクサーと組み合わせられます。 nDmitry(リンクすることはできません、Repなし)は、コンパスを省略することから残された機能のギャップを埋めるはずです。

希望に役立ちます。

+2

このパーティーにも後で[grunt-contrib-watchにはスポーンオプションがあります](https://github.com/gruntjs/grunt-contrib-watch#optionsspawn)。 falseに設定しても、grunt-watch-nospawnと全く同じですが、似ていると100%確信しません。 –

+1

'grunt-contrib-watch'で' spawn:false'を追加すると、平均コンパイル時間が '4-5'秒から' 0.05'秒になりました。 –

+0

はい、このオプションを使用するとファイルの変更が速くなり、ファイルを高速に処理するように見えます – cincplug

0

私はこの時点で数年前ですが、別の潜在的な原因/解決策を追加すると思いました。

最初に、--verboseを使用してgruntサーバーを起動して、あなたのsassタスクがほとんどの時間を費やしている場所を見てみてください。味の各部分がかかる時間を報告するプラグインがありますが、私にとっては、--verboseの出力を見れば、遅延がどこにあるかが非常に明確になりました。私のために、それは実際の悲鳴のタスクではなく、それは読み込みの不要な依存性でした。

GruntのGitHubリポジトリのthis号に記載されているように、特定のタスクの完了に時間がかかる理由の1つは、Gruntが実行するたびにすべてのタスクを読み込むことです。だから、grunt-contrib-watchは、あなたがあなたのsassファイルを変更したときにcompass:distタスクを実行しているだけで、まだすべてのタスクとそれらの依存関係をロードしています。

jit-grunt(またはnpm)というプラグインがあり、これに対処し、タスクを実行するために必要なものだけを読み込みます。これにより、私のコンパスの作業はずっと速く完了しました。

関連する問題