2014-02-11 4 views
2

나는 파일 변경을 감지하고 작업을 시작하는 사이에 매우 큰 지연이있는 것으로 보이는 잡아보기 작업이 있습니다. 다음과 같은그란트 시계 - 긴 지연

출력은 일반적입니다 : 여기

>> 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 %>' 
    ] 
    } 
} 

호출 한보고 대상 문제가 표시되지 않습니다, 지연이 항상있다. 지연 시간은 일정하지 않습니다 (5 초에서 60 초 사이 (평균 15-20 초)).

이것은 내 js vibe를 정말 흥분시키고 있습니다. 원인을 디버깅하려면 어떻게해야합니까?

편집 :

감시 당하고 파일의 수는 작은 아니지만, 그것은 거대한에서 멀리이다

:

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

Linux를 사용하십니까? – SomeKittens

+0

그래, 나는 리눅스에서 파이썬으로 변화를 지켜 보는 것과 같은 종류의 지연을 보았다. – jeremyjjbrown

+0

@ SomeKittensUx2666 Mac OS X에 있습니다 –

답변

0

당신이 dtrace을 사용할 수 있습니다 IO 대기 시간을 아래로 추적에 정말 관심이 있다면 , here 좋은 튜토리얼입니다.

1

그런트 작업과 관련된 문제는 대개 특이성의 결여와 관련이 있습니다. 감시 대상 파일에 대해보다 구체적으로 살펴 보거나 시청을 조금 더 분할하여 로딩 문제의 근본 원인을 찾을 수 있습니다.

나는이 패턴을 피할 것

:

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

을 ... 대신이 사용

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

내가 동료 같은 일을했고 그는 3 분까지 기다려야했다 실행할 작업. 그가 두 번째 패턴으로 바꾼 후에는 모두 10 초 이내에 완료되었습니다.

나는 그것이 얼마나 많은 파일을 가지고 있는지에 대한 것이 아니라 정규식의 복잡성이라고 생각한다. 두 번째 패턴과 일치하는 디렉토리의 구조를 안다면 정규 표현식을 복잡하게 만들 필요가 없습니다 ...

또한 js 파일의 위치를 ​​더 구체적으로 지정할 수 있습니다 : 지연을 제거합니다

$ grunt watch:js 
$ grunt watch:livereload 
1

이 :

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

당신이 어디에 문제가 같은 아이디어를 얻을, 더 구체적으로 작업을 실행 노력했다.

options: { 
    spawn: false, 
}