source

AngularJs의 $evalAsync와 $timeout의 차이점은 무엇입니까?

ittop 2023. 3. 23. 23:09
반응형

AngularJs의 $evalAsync와 $timeout의 차이점은 무엇입니까?

Angular를 쓰고 있어요.JS는 잠시 동안 $timeout을 가끔 사용해야 한다는 것을 알게 되었습니다(보통 jQuery 플러그인을 초기화하는 것 같습니다).

최근 다이제스트 사이클에 대해 좀 더 깊이 이해하려고 노력하다가 $evalAsync 함수를 발견했습니다.

이 함수는 다음과 같은 결과를 생성하는 것으로 보입니다.$timeout지연을 주지 않는 것 뿐입니다.사용할 때마다$timeout지연이 0으로 되어 있었기 때문에, 지금 생각해 보면$evalAsync대신.

둘 사이에 근본적인 차이가 있나요?어떤 케이스를 다른 케이스보다 먼저 사용하시겠습니까?어떤 것을 언제 사용할지 좀 더 잘 알고 싶습니다.

저는 최근 이 질문에 기본적으로 답했습니다.https://stackoverflow.com/a/17239084/215945 (이 답변은 Misko와의 github 교환 링크)

요약:

  • 명령어의 $evalAsync를 사용하여 코드를 큐잉하는 경우, DOM이 Angular에 의해 조작된 후 브라우저가 렌더링하기 전에 실행해야 합니다.
  • 컨트롤러에서 $evalAsync를 사용하여 코드를 큐잉할 경우 DOM이 Angular에 의해 조작되기 전에(및 브라우저가 렌더링하기 전에) 실행해야 합니다.거의 원하지 않습니다.
  • 코드가 $timeout을 사용하여 큐잉되면 DOM이 Angular에 의해 조작되고 브라우저가 렌더링된 후에 실행됩니다(경우에 따라서는 깜박임이 발생할 수 있음).

복잡한 애플리케이션을 구축하는 경우, 선택한 애플리케이션에 퍼포먼스가 영향을 준다는 점에 유의하십시오.또, Mark answer에 대해서는, 기술적인 상세를 기입해 주세요.

  • $timeout(콜백)은 현재 다이제스트 사이클이 완료될 때까지 기다린 후(즉, 모든 모델과 DOM의 각도 업데이트), 콜백을 실행하여 잠재적으로 각도 모델에 영향을 미칠 수 있음) 전체 콜백을 실행합니다.$apply모든 것을 다시 디다이징할 수 있습니다.

  • 한편 $evalAsync(콜백)는 현재 또는 다음 다이제스트 사이클에 콜백을 추가합니다.즉, 다이제스트 사이클 내에 있는 경우(예를 들어 일부에서 호출된 함수의 경우)ng-clickdirective)는 아무것도 기다리지 않고 코드가 즉시 실행됩니다.비동기 콜(예:setTimeout 다이제스트 Digest Cycle」, 「Digest Cycle ( )$apply 됩니다가 트리거 됩니다.

때문에 퍼포먼스 콜을 하는 .$evalAsync예를 들어 요소 너비 등의 DOM 속성에 액세스해야 하는 경우 등 코드를 실행하기 전에 보기를 최신 상태로 유지하는 것이 중요한 경우를 제외하고.

$1900, $evalAsync, $1900, $1900의 구분에 대해 더 자세히 알고 싶으시면 다른 질문에 대한 답변을 읽어보시기 바랍니다.https://stackoverflow.com/a/23102223/1501926

, 다음의 메뉴얼도 읽어 주세요.

$evalAsync는 식을 언제 실행할지 보증하지 않습니다.단, 다음과 같습니다.

  • 평가를 예약한 기능(가능하면 DOM 렌더링 전) 후에 실행됩니다.
  • 식 실행 후 최소 1개의 $secycle이 수행됩니다.

주의: 이 함수가 $digest 사이클 외부에서 호출되면 새로운 $digest 사이클이 예약됩니다.단, $apply 콜 내에서 모델을 변경하는 코드를 항상 호출하는 것이 좋습니다.여기에는 $evalAsync를 통해 평가된 코드가 포함됩니다.

언급URL : https://stackoverflow.com/questions/17301572/whats-the-difference-between-evalasync-and-timeout-in-angularjs

반응형