Grunt с компасом и часами компилируется медленно

Grunt довольно долго компилирует файл css, я не уверен, что это нормально, но обычные часы компаса занимают около 5 секунд.

Итак, вопрос в том, есть ли способ ускорить время компиляции с помощью Grunt или лучше просто придерживаться компаса?

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

});

person xphong    schedule 18.12.2013    source источник


Ответы (4)


Наряду с тем, что Саймон упомянул об опции watch grunt-contrib-compass, вы можете использовать grunt-concurrent для запуска двух процессов. , фактически grunt watch и compass watch рядом друг с другом:

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

Если вы хотите запускать компас из Grunt при сборке, развертывании или чем-то еще, что требует compile вместо watch, вам нужно создать вторую задачу компаса и использовать ее:

compass: {
    // Compass grunt module requires a named target property with options.
    compile: {
        options: {}
    }
}
person Henry Blyth    schedule 10.02.2014
comment
Хотя это работает для перезагрузки измененных файлов на стороне клиента, он не может перезагрузить экспресс-файлы, если они есть в вашей задаче наблюдения. - person gerasalus; 14.11.2014
comment
@gerasalus Я думаю, вам нужно добавить livereload: true в качестве опции к задаче watch. См. github.com/gruntjs/grunt-contrib-watch#optionslivereload. - person Henry Blyth; 15.11.2014

Что ж, вы можете смотреть, используя опцию Grunt-contrib-compass watch. Это создаст часы с компасом, так что у вас будет лучшая производительность. Хотя это не позволит вам просматривать несколько типов файлов (например, если вы также просматриваете файл .coffee или всегда перестраиваете js и т. д.).

Если вам абсолютно необходимо grunt-contrib-watch, убедитесь, что кеширование sass активировано с помощью задачи grunt. Из вашего конфига, вставленного сюда, похоже, что это так. Но проблема с кешем обычно является причиной того, что компасу требуется много времени для компиляции; поэтому я бы на вашем месте перепроверил свой Gruntfile.js.

Кроме того, обработка большого количества спрайтов и методов обработки изображений может занять довольно много времени.

person Simon Boudrias    schedule 18.12.2013

Может быть, немного опоздал на вечеринку по этому поводу, но на случай, если это кому-нибудь поможет:

Я обнаружил такую ​​​​же плохую производительность с grunt-contrib-watch и sass. Кажется, лучший способ обойти это — использовать другой плагин для часов. Я обнаружил, что grunt-watch-nospawn (в отличие от grunt-contrib -watch plugin) гораздо быстрее компилирует sass. Довольно значительно - я вижу улучшения примерно на две секунды.

Если вы хотите дополнительно настроить скорость, вы можете использовать grunt-sass вместо grunt-contrib-sass. который использует libsass, чтобы обеспечить еще одно увеличение скорости.

Это в сочетании с автопрефиксером, например. nDmitry (не может связать, нет репутации) это должно заполнить пробелы в функциональности, оставшиеся после исключения Compass.

Надеюсь, это поможет.

person liam    schedule 22.11.2014
comment
Даже позже этой вечеринки, но у grunt-contrib-watch есть опция появления . Не уверен на 100%, что установка значения false точно такая же, как grunt-watch-nospawn, но звучит похоже. - person Paul Sham; 31.01.2015
comment
Добавление spawn: false с grunt-contrib-watch сработало для меня, увеличив среднее время компиляции с 4-5 секунд до 0.05 секунд. - person Ian Dunn; 16.05.2015
comment
Да, с этой опцией он быстрее реагирует на изменение файла и, кажется, тоже быстрее обрабатывает файлы - person cincplug; 21.02.2017

Я знаю, что этому вопросу уже несколько лет, но я подумал, что добавлю еще одну возможную причину/решение.

Во-первых, попробуйте запустить свой grunt-сервер с помощью --verbose и посмотрите, где ваша задача sass занимает большую часть времени. Существуют плагины, которые будут сообщать о времени, которое занимает каждая часть вкуса, но для меня простое наблюдение за выводом --verbose ясно дало понять, где была задержка. Для меня это была не настоящая задача sass, а загрузка ненужных зависимостей.

Как указано в этой проблеме в репозитории Grunt на GitHub, одна из причин, по которой некоторые задачи могут занять долгое время для завершения заключается в том, что Grunt загружает все задачи каждый раз при запуске. Таким образом, несмотря на то, что grunt-contrib-watch запускает только задачу compass:dist, когда вы меняете файлы sass, grunt по-прежнему загружает все задачи и их зависимости.

Теперь есть плагин под названием jit-grunt (или на npm), который решает эту проблему и загружает только то, что необходимо для выполнения вашей задачи. Это помогло моей задаче с компасом выполниться намного быстрее.

person graywithanA    schedule 06.07.2015