笨拙的加载任务

时间:2013-11-08 10:06:44

标签: loading gruntjs watch

有没有人可以告诉我如何让更快的任务加载。 我真的想减少加载时间,因为大多数任务需要1秒才能加载。

特别是'观察'任务。当我在观察变化时,我真的想更快地编译sass。

有什么想法吗?

感谢名单

5 个答案:

答案 0 :(得分:28)

你真的在寻找这个:jit-grunt

不是每次都加载所有任务,jit-grunt只会加载那些必要的任务。

答案 1 :(得分:8)

与OP有同样的问题: grunt watch 编译.less文件和liveReload非常慢,所以这就是我的所作所为:

  1. 安装time-grunt以显示每项任务的执行时间:

    $ npm install --save-dev time-grunt
    

    然后在module-exports之后放置这一行:

    module.exports = function(grunt) {
    require('time-grunt')(grunt);
    

    在运行grunt之后,您会注意到哪些任务比其他任务花费的时间更长。在我的情况下,它是在每个文件更改加载所有依赖项,所以我找到了这个解决方案:

  2. 安装jit-grunt以按需加载依赖项,而不是每次grunt执行任务时加载所有这些依赖项。

    $ npm install jit-grunt --save-dev
    

    并替换gruntfile中的初始加载器

    require('load-grunt-tasks')(grunt); 
    

    require('jit-grunt')(grunt);
    
  3. 这为.css更新节省了我的liveReload时间,从~1600ms到~250ms。

    PS: @curist 也提出了jit-grunt,但我认为更多细节可能会对任何人有所帮助。

答案 2 :(得分:1)

这听起来像你的电脑是问题,除了升级之外,你没有多少选择。

我唯一能想到的就是并发任务,如果你可以同时运行任务,你可能需要休息一段时间。

您可以在回购邮件中使用grunt-concurrent

  

同时运行Coffee和Sass等慢速任务可能会显着缩短您的构建时间。如果您需要运行多个阻塞任务(如nodemon)并立即观看,此任务也很有用,如示例配置中所示。

您也可以仅在需要时使用this trick加载任务。

答案 3 :(得分:1)

如果您的grunt位于Vagrant虚拟框中,您可以通过nfs进行同步,这比默认共享快一点。 (但仍然比原生文件系统慢)

在您的Vagrantfile中:

config.vm.synced_folder ".", "/vagrant", type: "nfs"

在我的机器上,grunt加载任务的时间(使用ssd):

native:                  ~1s
nfs:                     ~4s
default Vagrant sharing: ~16s

答案 4 :(得分:1)

这里的问题相同,在更改并执行任务后,所有模块都重新加载。

但我在github上找到了一个非常好的解决方案 (https://github.com/steida/grunt-este-watch

官方grunt-contrib-watch出了什么问题?

由于历史原因,它使用fs.fileWatch和fs.watch组合,因此速度慢而且有问题。从节点0.9.2+开始,fs.watch就可以了。

怎么办?

  1. 安装grunt-este-watch

    npm install grunt-este-watch --save-dev
    
  2. 更改contrib watch

    grunt.loadNpmTasks('grunt-contrib-watch');
    

    este watch

    grunt.loadNpmTasks('grunt-este-watch');
    
  3. 更改任务

    watch: {
      javascript: {
          files: 'src/js/**/*',
          tasks: ['uglify']
      }
    }
    

    esteWatch: {
       options: {
          dirs: ['../src/**/*']
       },
       'js': function(filepath) { return 'uglify' }
    }