9

Grunt dauert ziemlich lange, um die CSS-Datei zu kompilieren, ich bin mir nicht sicher, ob das normal ist, aber regelmäßige Kompassuhr dauert etwa 5 Sekunden.Grunt mit Kompass und Uhr kompiliert langsam

Die Frage ist also, ob es irgendeinen Weg gibt, die Kompilierungszeit mit Grunt zu beschleunigen oder ist es besser, einfach mit der Kompassuhr zu bleiben?

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, 
      } 
     } 
    } 

}); 

Antwort

16

Zusammen mit dem, was Simon erwähnt über die watch Option Grunzen-contrib-Kompass können Sie grunt-concurrent verwenden zwei Prozesse zu laufen, effektiv grunt watch und compass watch, nebeneinander:

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

Wenn Sie ausführen möchten Kompass von Grunt beim Aufbau, Implementierung, oder irgendetwas anderes, das compile statt watch erfordert, benötigen Sie eine zweite Kompass Aufgabe zu machen und verwenden Sie diese:

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

Während dies funktioniert, um geänderte clientseitige Dateien erneut zu laden, kann expressjs nicht erneut geladen werden, wenn Sie es in Ihrer Überwachungsaufgabe haben. – gerasalus

+0

@gerasalus Ich denke, du musst 'Liveload: true' als Option zur' watch' Aufgabe hinzufügen. Siehe https://github.com/gruntjs/grunt-contrib-watch#optionslivereload. –

5

Nun, Sie can watch using the Grunt-contrib-compass watch option. Das wird Kompassuhr spawnen, so dass Sie eine bessere Leistung haben. Dies erlaubt Ihnen zwar nicht, mehrere Dateitypen anzusehen (zB wenn Sie auch nach einer .coffee-Datei suchen oder js usw. immer neu erstellen).

Wenn Sie unbedingt grunt-contrib-watch benötigen, dann stellen Sie sicher, Sass-Caching ist mit dem Grunt-Task aktiviert. Von Ihrer hier eingefügten Konfiguration sieht es so aus. Das Cacheproblem ist normalerweise der Grund dafür, dass der Kompiliervorgang sehr lange dauert. also würde ich meine Gruntfile.js überprüfen, wenn ich du wäre.

Auch viele spritting und Bildmanipulation Methode kann eine Weile dauern, um zu verarbeiten.

2

Vielleicht ein bisschen spät auf die Party, aber für den Fall, dass dies jemand hilft:

Ich habe die gleiche schlechte Leistung mit Grunt-Contrib-Watch und Sass gefunden. Der beste Weg, dies zu umgehen, scheint ein anderes Watch-Plugin zu sein. Ich habe festgestellt, dass grunt-watch-nospawn (im Gegensatz zu grunt-contrib-watch-Plugin) viel schneller ist, um Sass zu kompilieren. Ziemlich deutlich - ich sehe Verbesserungen von etwa zwei Sekunden.

Wenn Sie die Geschwindigkeit weiter optimieren möchten, können Sie grunt-sass anstelle von grunt-contrib-sass verwenden, die libsass verwendet, um eine weitere Geschwindigkeitssteigerung bereitzustellen.

Dies kombiniert mit einem Autoprefixer, z. nDmitry's (kann nicht verlinkt werden, kein rep) Dies sollte Lücken füllen, die beim Auslassen von Compass entstehen.

Hoffe, dass hilft.

+2

Noch später zu dieser Party, aber [grunt-contrib-watch hat eine Spawn-Option] (https://github.com/gruntjs/grunt-contrib-watch#optionsspawn). Nicht 100% sicher, wenn es auf false gesetzt wird, ist genau dasselbe wie grunt-watch-nospawn, klingt aber ähnlich. –

+1

Das Hinzufügen von 'spawn: false' mit' grunt-contrib-watch' funktionierte für mich, wobei die durchschnittliche Kompilierzeit von '4-5' Sekunden auf' 0,05' Sekunden reduziert wurde. –

+0

Ja, es reagiert mit dieser Option schneller auf Dateiänderungen und scheint auch Dateien schneller zu verarbeiten – cincplug

0

Ich weiß, dass diese Frage zu diesem Zeitpunkt ein paar Jahre alt ist, aber ich dachte, ich würde eine weitere mögliche Ursache/Lösung hinzufügen.

Versuchen Sie zuerst, Ihren Grunt-Server mit --verbose zu starten und sehen Sie, wo Ihre Sass-Aufgabe die meiste Zeit benötigt. Es gibt Plugins, die die Zeit melden, die jeder Teil des Tasts dauert, aber für mich einfach zu sehen, --verbose Ausgang machte es sehr deutlich, wo die Verzögerung war. Für mich war das nicht die eigentliche Sass-Aufgabe, es war das Laden unnötiger Abhängigkeiten.

Wie in this Problem auf Grunt's GitHub Repo beschrieben, ein Grund, dass bestimmte Aufgaben eine lange Zeit dauern können, ist, dass Grunt alle Aufgaben bei jeder Ausführung lädt. Obwohl grunt-contrib-watch nur den Kompass ausführt: dist-Task Wenn Sie Ihre sass-Dateien ändern, lädt grunt immer noch alle Aufgaben und deren Abhängigkeiten.

Es gibt jetzt ein Plugin namens jit-grunt (oder npm), das dies anspricht und nur lädt, was notwendig ist, um Ihre Aufgabe auszuführen. Dies half meiner Kompassaufgabe viel schneller abzuschließen.