Chrome Dev Tools에서 여러 개의 긴 프레임이 표시되는 이유를 이해하려고합니다. 불꽃 차트Chrome Dev Tools 타임 라인 이해
첫 번째 행 (호출 스택의 상단) $(function(){ });
준비 funcs의 무리를 실행 jQuery.Deferred()
들에 의해 촉발 Timer Fired
이벤트가 대부분이다. 내가 jQuery를 소스에 파고 requestAnimationFrame
으로 setTimeout
의 사용을 교체 할 경우
불꽃 차트가 많이 변경 나던, 나는 아직도 긴 프레임을 (개발 도구에 의해보고 된) 하나의 프레임 내에서 발사 RAF가 많이 얻을. ID는 아래의 의사 코드를 수행 할 것으로 예상됩니다.
window.requestAnimationFrame(function() {
// do stuff
});
window.requestAnimationFrame(function() {
// do more stuff
});
두 개의 서로 다른 애니메이션 프레임에서 실행해야합니다. 그렇지 않은가요?
실행되는 JS 모두 필요하지만 I는 setTimeout
및 rAF
이 달성 보이지 않을 때 (암시하지만, 여기서 https://developers.google.com/web/fundamentals/performance/rendering/optimize-javascript-execution 설명하지) "마이크로 작업"으로 실행하는 일을한다.
업데이트 Heres는
나던 긴 프레임 중 하나의 샷 확대는 어떤 리플 로우 (강제 또는 기타)을 갖고있는 것 같다. 여기에있는 모든 rAF 콜백이 한 프레임에서 실행되는 이유는 무엇입니까?
덕분에
분명히 첫 번째 rAF가 프레임 예산을 초과하여 브라우저가 긴 프레임으로 전환하고 두 번째 rAF를 실행했습니다. 아마 하나의 rAF를 사용하십시오 : [Multiple requestAnimationFrame performance] (// stackoverflow.com/a/17103945) 마이크로 타스크의 경우, 예를 들어 MutationObserver를 사용하여 트리거 할 수 있습니다. 속성 : 일부 보이지 않는 노드에서 true를 누른 다음 속성을 변경합니다. – wOxxOm
@wOxxOm 고마워요, 이론적으로는 의미가 있습니다 만, 제 2 스크린 샷에서 특히 그런 일이 실제로 일어나는 것을 볼 수는 없습니다^ –