Grunt手表 - 长时间延迟

时间:2014-02-11 01:44:08

标签: javascript gruntjs grunt-contrib-watch

我有一个Grunt监视任务,在检测文件更改和开始工作之间似乎有很大的延迟。

以下输出很常见:

>> File "src/static/app/brandManager/addChannel.html" changed.

Running "html2js:main" (html2js) task
Successfully converted 13 html templates to js.

Done, without errors.


Execution Time (2014-02-11 01:38:27 UTC)
loading tasks  101ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 17%
html2js:main   495ms  ▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 83%
Total 597ms
... Reload src/static/app/brandManager/addChannel.html ...
Completed in 14.469s at Tue Feb 11 2014 12:38:28 GMT+1100 (EST) - Waiting...

在这里,我们发现实际工作只花了597ms,但14.469s的总任务正在运行。

以下是我的Gruntfile中的相关片段:

src: {
  js: ['src/static/app/**/*.js', '!src/static/app/**/*.spec.js'],
},

watch: {
  js: {
    files: ['<%= src.js %>'],
    tasks: ['fileblocks','newer:jshint:all'],
    options: {
      livereload: false
    }
  },
  livereload: {
    options: {
      livereload: '<%= connect.options.livereload %>'
    },
    files: [
      '<%= src.html %>',
      '.tmp/styles/{,*/}*.css',
      '<%= src.assets %>'
    ]
  }
}

调用哪个监视目标似乎并不重要,总是存在延迟。 延迟时间不一致 - 在5s到60s之间(平均而言,大约15-20s)。

这真是让我震惊的js氛围。 我该如何调试原因?

修改

正在观看的文件数量并不少,但它远非庞大:

--- static/app ‹master› find -f . | wc -l      
    >>  51

3 个答案:

答案 0 :(得分:1)

加载Grunt任务的问题通常与缺乏特异性有关。尝试更具体地了解应该观看的文件,或者将观看分开一些,以便找到加载问题的根本原因。

我会避免这种模式:

'.tmp/styles/{,*/}*.css',

...而是使用它:

'.tmp/styles/**/*.css',

我有一位同事在做同样的事情,他不得不等待3分钟才能完成任务。在他改为第二种模式之后,所有这些都在10秒内完成。

我认为这不是关于有多少文件,而是正则表达式的复杂性。如果您知道目录的结构与第二个模式匹配,则不需要使正则表达式过于复杂......

此外,是否可以更具体地说明js文件的位置,例如:

src: {
    js: [
        'src/static/app/js/**/*.js',
        '!src/static/app/js/**/*.spec.js'
    ]
},

您是否尝试过更具体地运行任务,以了解问题所在,例如:

$ grunt watch:js
$ grunt watch:livereload

答案 1 :(得分:1)

这将消除延迟。

db.collectionName.distinct("name")

答案 2 :(得分:0)

如果您真的对追踪IO延迟感兴趣,可以使用dtracehere是一个不错的教程。