Grunt的监视任务似乎需要很长时间。

9
我正在运行两个简单的任务,每个任务运行时间都不到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上运行。在2012年的Macbook Air(OS X 10.8.5)上运行。


你在sass任务中,是否使用grunt-contrib-sass? - Ben
1
@Ben 不,我使用的是grunt-sass(用Node编写而不是Ruby)。 - DaveJ
@Daveyjoe,你解决问题了吗?我刚从Ruby转到Grunt,但我没有看到任何编译改进。使用grunt-sass。 - TheFrost
@TheFrost:我一直在使用Grunt时遇到性能问题,所以我转换到了Gulp。现在的性能更令人满意了。 - DaveJ
2个回答

2
在文件被修改后,watch会执行任务,但在完成后,watch会重新加载模块,并再次进行监视。
查看详细信息以了解问题:
grunt tasknamewatch --verbose

我尝试在监视任务上使用递归,但没有成功。

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

一个简单有效的解决方案是使用"grunt-este-watch"。您可以在这里阅读所需的步骤:https://stackoverflow.com/a/33920834/2741005


0

是的,contrib-sass 慢了很多,我认为这可能是问题的原因之一。我唯一能建议的就是尽量减少你运行的 watch 目标数量;看起来你正在将 css 从 app 复制到 tmp,然后重新加载它?最好直接使用类似于 sass:dev 任务将你的 sass 保存到 tmp 中,这样你只需要运行两次 watch。这通常是我做的方式:

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

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

我不禁想到,运行复制操作的额外开销是在完全不同的目标中运行,当然你可以在那个任务数组中运行任意多个任务。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接