복잡한 응용 프로그램을 구축하는 경우 선택한 성능에 영향을 미칩니다. 또한 기술적 인 세부 사항으로 Mark 답변을 작성하고 싶습니다.
$ timeout (callback) 은 현재 다이제스트주기가 완료 될 때까지 기다립니다 (즉, 모든 모델 및 DOM의 각도 업데이트). 그러면 콜백 (각도 모델에 영향을 줄 수 있음)을 실행 한 다음 $apply
루트 $ scope에서 전체를 시작하고 다시 시작합니다. 모두.
반면 $ evalAsync (callback) 은 콜백을 현재 또는 다음 다이제스트 사이클에 추가합니다. 즉, 다이제스트주기 (예 : 일부 ng-click
지시문 에서 호출 된 함수 )에 있으면 아무것도 기다리지 않고 코드가 즉시 실행됩니다. 비동기 호출 (예 : a) 내에있는 경우 setTimeout
새 다이제스트주기 ( $apply
)가 트리거됩니다.
따라서 성능 측면에서는 $evalAsync
코드를 실행하기 전에 뷰를 최신 상태로 유지하는 것이 중요하지 않은 경우 (예를 들어 요소 너비 등과 같은 일부 DOm 속성에 액세스해야하는 경우가 아니라면 ) 항상 호출하는 것이 좋습니다 .
: 당신이 $ 제한 시간의 차이, $ evalAsync, $, $ 적용, 소화에 대한 자세한 내용을 원하는 경우에 나는 다른 질문에 대한 내 대답 읽는 당신을 초대합니다 https://stackoverflow.com/a/23102223/1501926을
또한 설명서 를 읽으십시오 .
$ evalAsync는 표현식이 언제 실행 될지 보장하지 않습니다.
- 평가를 예약 한 기능 후에 (바람직하게는 DOM 렌더링 전에) 실행됩니다.
- 식 실행 후 적어도 하나의 $ 다이제스트주기가 수행됩니다.
참고 : 이 기능을 $ digest주기 외부에서 호출하면 새로운 $ digest주기가 예약 됩니다. 그러나 $ apply 호출 내에서 모델을 변경하는 코드를 항상 호출하는 것이 좋습니다. 여기에는 $ evalAsync를 통해 평가 된 코드가 포함됩니다.