指南针和手表的咕噜声编译缓慢

时间:2013-12-18 18:59:03

标签: performance gruntjs watch grunt-contrib-watch grunt-contrib-compass

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

});

4 个答案:

答案 0 :(得分:16)

除了Simon提到的关于grunt-contrib-compass watch选项的内容之外,您还可以使用grunt-concurrent来运行两个进程,有效grunt watchcompass watch彼此:

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

如果您想在构建,部署或需要compile而不是watch的任何其他内容时从Grunt运行指南针,则需要进行第二次指南针任务并使用:

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

答案 1 :(得分:5)

好吧,你can watch using the Grunt-contrib-compass watch option。这将产生指南针表,这样你就会有更好的表现。虽然这不允许您观看多种类型的文件(例如,如果您还注意.coffee文件或总是重建js等)。

如果您绝对需要grunt-contrib-watch,请确保使用grunt任务激活sass缓存。从你在这里粘贴的配置看起来就像是。但是缓存问题通常是指南针需要很长时间才能编译的原因;如果我是你,我会仔细查看我的Gruntfile.js。

此外,许多精灵和图像处理方法可能需要很长时间才能处理。

答案 2 :(得分:2)

在这方面可能有点晚了,但如果这有助于任何人:

我发现与grunt-contrib-watch和sass相同的糟糕表现。解决这个问题的最佳方法似乎是使用不同的手表插件。我发现grunt-watch-nospawn(与grunt-contrib-watch插件相对)编译sass的速度要快得多。非常重要 - 我看到大约两秒钟的改进。

如果你想进一步调整速度,可以使用grunt-sass代替使用libsass的grunt-contrib-sass来提高速度。

这与自动修复器结合,例如。 nDmitry(无法链接,没有代表)这应该填补省略指南针留下的功能差距。

希望有所帮助。

答案 3 :(得分:0)

我知道这个问题已经有几年了,但我想我会增加另一个潜在的原因/解决方案。

首先,尝试使用--verbose启动您的grunt服务器,并观察您的sass任务占用大部分时间的位置。有些插件会报告每个部分的时间,但对我来说,只需观察--verbose输出就可以非常清楚延迟的位置。对我来说,这不是真正的sass任务,而是加载不必要的依赖。

正如Grunt的GitHub回购中的this问题所述,某些任务可能需要很长时间才能完成的一个原因是Grunt每次运行时都会加载所有任务。因此,即使grunt-contrib-watch只运行指南针:当您更改sass文件时,dist任务仍然会加载所有任务及其依赖项。

现在有一个名为jit-grunt(或在npm上)的插件可以解决此问题并仅加载运行任务所需的内容。这有助于我的指南针任务完成得更快。

相关问题