Задачи часов Grunt, похоже, занимают очень много времени

Я запускаю две простые задачи, каждая из которых выполняется в течение ‹100 мс, но при запуске под командой watch две объединенные задачи занимают в общей сложности ~ 8 секунд (кажется, накладные расходы составляют 3,5 секунды на задачу). Я использую его с живой перезагрузкой для разработки, и я нахожу это очень разочаровывающим. Я попытался установить spawn в false, но это, похоже, сломало его, и ни одна из связанных задач не была запущена.

Вот пример вывода при изменении файла sass.

>> File "app/styles/main.scss" changed.

File "app/styles/main.css" created.

Done, without errors.

Elapsed time
loading tasks   4ms  ▇▇▇▇▇ 9%
sass            1ms  ▇▇ 2%
sass:dist      39ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 89%
Total 44ms
Completed in 3.862s at Mon Nov 18 2013 17:05:57 GMT+0000 (GMT) - Waiting...
OK
>> File "app/styles/main.css" changed.

Running "copy:styles" (copy) task
Copied 1 files

Done, without errors.

Elapsed time
loading tasks   4ms  ▇▇▇▇▇▇▇▇▇▇▇▇ 24%
copy:styles    13ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 76%
Total 17ms
Completed in 3.704s at Mon Nov 18 2013 17:06:01 GMT+0000 (GMT) - Waiting...
OK
>> File ".tmp/styles/main.css" changed.

... Reload .tmp/styles/main.css ...
... Reload .tmp/styles/main.css ...
Completed in 0.000s at Mon Nov 18 2013 17:06:01 GMT+0000 (GMT) - Waiting...

Использование grunt 0.4.1 (и grunt-cli 0.1.11) на node.js 0.10.20. Работает на Macbook Air 2012 года (OS X 10.8.5)


person DaveJ    schedule 21.11.2013    source источник
comment
Для задачи sass вы используете grunt-contrib-sass?   -  person Ben    schedule 21.11.2013
comment
@ Бен Нет, я использую grunt-sass (написано на Node вместо Ruby).   -  person DaveJ    schedule 21.11.2013
comment
@Daveyjoe ты решил проблему? Я только что перешел с Ruby на Grunt и не вижу никаких улучшений при компиляции. Использование хрюкающего дерзости.   -  person TheFrost    schedule 14.09.2014
comment
@TheFrost: я продолжал сталкиваться с проблемами производительности с Grunt, поэтому я переключился на Gulp. Теперь гораздо более доволен производительностью.   -  person DaveJ    schedule 14.09.2014


Ответы (2)


После изменения файла наблюдайте за выполнением задач, а по завершении наблюдайте за перезагрузкой модулей (!) и снова наблюдайте.

Подробно, чтобы увидеть проблему:

grunt tasknamewatch --verbose

Я пробовал рекурсию на задачу просмотра, но безуспешно.

watch: {
    ...,
    tasks: ['sometask', 'watch']
}

Простое решение, которое хорошо сработало, заключалось в использовании «ворчания-эсте-часы». Вы можете прочитать необходимые шаги здесь: https://stackoverflow.com/a/33920834/2741005

person Community    schedule 26.11.2015

Да, contrib-sass намного медленнее, думал, что это могло способствовать возникновению проблемы. Единственное, что я мог бы предложить, это свести к минимуму количество используемых вами целей наблюдения; похоже, вы копируете css из app в tmp, а затем перезагружаете его? Возможно, было бы лучше сохранить ваш sass прямо в tmp с чем-то вроде задачи sass:dev, таким образом вы только дважды запускаете watch. Вот как я обычно это делаю:

watch: {
    sass: {
        files: [
            'styles/**/*.scss'
        ],
        tasks: ['sass', 'copy:dev', 'cssmin']
    },

    css: {
        options: {
            livereload: true
        },
        files: [
            'dist/css/master.css'
        ],
        tasks: []
    }
}

Я не могу не думать, что это дополнительные накладные расходы на запуск копии в другой цели, конечно, вы можете запускать столько задач, сколько хотите, в этом массиве задач. :)

person Ben    schedule 21.11.2013