我有一个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
答案 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)