"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Angular zone.js)에서 Angular(provideExperimentalZonelessChangeDetection)로 변경 감지의 진화

Angular zone.js)에서 Angular(provideExperimentalZonelessChangeDetection)로 변경 감지의 진화

2024-11-08에 게시됨
검색:355

The Evolution of Change Detection from Angular zone.js) to Angular (provideExperimentalZonelessChangeDetection)

변경 감지는 Angular의 기본 측면으로, 데이터 수정이나 사용자 상호작용에 따라 변경된 DOM 부분을 식별하고 업데이트하는 역할을 담당합니다. 이 프로세스를 통해 UI가 기본 데이터와 일관되게 유지되어 사용자 경험과 애플리케이션 성능이 향상됩니다.

Zone.js의 역할

역사적으로 Angular는 변경 감지 메커니즘을 Zone.js에 의존해 왔습니다. Zone.js는 비동기 작업을 가로채서 Angular가 변경 사항을 모니터링하고 그에 따라 업데이트를 트리거할 수 있도록 하는 JavaScript 라이브러리입니다. 그러나 Zone.js를 포함하면 특히 비동기 활동이 빈번한 시나리오에서 애플리케이션에 오버헤드가 추가될 수 있습니다.

변경 감지 전략

Angular는 두 가지 주요 변경 감지 전략을 제공합니다.

  • 기본값: 변경 감지는 ngOnInit 또는 ngAfterViewInit와 같은 모든 수명 주기 후크 후에 트리거됩니다. 이 전략은 간단하지만 특히 대규모 애플리케이션에서 불필요한 DOM 업데이트로 이어질 수 있습니다.
@Component({
  selector: 'app-my-component',
  template: `
    

{{ message }}

` }) export class MyComponent { message = 'Hello, world!'; }

Angular는 대부분의 변경 감지 로직을 자동으로 처리하므로 이 전략을 구현하기가 더 쉽습니다.
이 변경 감지 전략의 가장 큰 과제는 대규모 애플리케이션에 매우 중요한 불필요한 DOM 업데이트가 발생한다는 것입니다.

  • OnPush: 변경 감지는 입력 속성이나 비동기 관찰 가능 항목이 변경될 때만 트리거됩니다. 이 전략은 데이터가 자주 업데이트되는 복잡한 구성 요소의 경우 더 효율적이지만 수동 관리가 더 많이 필요합니다.
@Component({
  selector: 'app-my-component',
  template: `
    

{{ message }}

`, changeDetection: ChangeDetectionStrategy.OnPush }) export class MyComponent { message = 'Hello, world!'; }

onPush 변경 감지 전략은 불필요한 DOM 조작을 최소화했지만 onPush 변경 전략의 가장 큰 과제는 개발자가 더 많은 수동 관리를 수행하고 변경 사항을 수동으로 트리거해야 한다는 것입니다. 데이터가 간접적으로 변경되거나 변경 가능한 객체를 사용하는 경우와 같은 특정 시나리오에서는changeDetectorRef.DetectChanges()를 사용하여 변경 감지를 명시적으로 처리해야 했습니다.

Angular 18 및 하이브리드 변경 감지: 영역 없는 접근 방식

Zone.js와 관련된 문제를 해결하기 위해 Angular 18은 하이브리드 변경 감지라는 실험적 기능을 도입했습니다. 이 접근 방식은 변경 사항을 감지하고 DOM을 조작하는 새로운 변경 감지 메커니즘을 사용하여 Zone.js를 완전히 제거하는 것을 목표로 합니다.

하이브리드 변경 감지 활성화:

하이브리드 변경 감지를 활성화하려면 다음 코드를 사용할 수 있습니다.

bootstrapApplication(RootCmp,
{ providers: [provideExperimentalZonelessChangeDetection()] 
}
);

이렇게 하면 다음 시나리오에서 변경 감지가 실행됩니다.

  • 신호가 업데이트되었습니다.
  • changeDetectorRef.markForCheck()가 호출됩니다.
  • AsyncPipe를 구독한 관찰 가능 항목은 새로운 값을 받습니다.
  • 구성요소가 연결되거나 분리됩니다.
  • 입력이 설정되었습니다.

하이브리드 변경 감지가 활성화되면 애플리케이션의 폴리필에서 Zone.js를 안전하게 제거할 수 있습니다.

 "polyfills": [
              "zone.js" //remove this line
            ],

하이브리드 변경 감지의 이점

  • 성능 향상: Zone.js를 제거하면 오버헤드가 줄어들어 특히 비동기 작업이 많은 애플리케이션에서 성능이 향상됩니다.

  • 향상된 개발자 환경: 수동 변경 감지 기능이 제거되어 개발이 단순화되고 오류 가능성이 줄어듭니다.

  • 더 작은 애플리케이션 크기: Zone.js는 일반적으로 애플리케이션 크기에 약 13KB를 추가합니다. 이를 제거하면 번들이 더 작아질 수 있습니다.

릴리스 선언문 이 기사는 https://dev.to/this-is-angular/the-evolution-of-change-Detection-from-angular-2-zonejs-to-angular-18-provideexperimentalzonelesschangeDetection-4f77?1에서 재현됩니다. 침해가 있는 경우, 삭제하려면 [email protected]으로 문의하시기 바랍니다.
최신 튜토리얼 더>
  • Golang에서 Google 드라이브 다운로더 구축(1부)
    Golang에서 Google 드라이브 다운로더 구축(1부)
    소개 이 튜토리얼에서는 Google 드라이브 및 기타 클라우드 제공업체에서 파일을 다운로드할 수 있는 강력한 다운로더를 구축하겠습니다. Golang의 효율적인 동시성 패턴을 사용하면 여러 다운로드를 동시에 관리하고, 대용량 파일을 스트리밍하고, 진행 상...
    프로그램 작성 2024-11-08에 게시됨
  • 4에서 PHP의 신속한 배포
    4에서 PHP의 신속한 배포
    Servbay는 개발 환경을 효율적으로 구성하기 위한 최고의 도구로 부상했습니다. 이 가이드에서는 PHP 8.1을 빠르고 안전하게 배포하는 과정을 안내하고 배포 단순화를 위한 Servbay의 노력을 보여줍니다. 전제 조건 머신에 Servbay가 설치되어 ...
    프로그램 작성 2024-11-08에 게시됨
  • 리캡차를 우회하는 방법
    리캡차를 우회하는 방법
    No matter how many times people wrote that the captcha has outlived itself long time ago and no longer works as effectively as its developers would ha...
    프로그램 작성 2024-11-08에 게시됨
  • super를 사용하여 슈퍼클래스 생성자 호출
    super를 사용하여 슈퍼클래스 생성자 호출
    하위 클래스는 super(parameter-list); 형식을 사용하여 상위 클래스에 의해 정의된 생성자를 호출할 수 있습니다. parameter-list는 슈퍼클래스 생성자에 필요한 매개변수를 지정해야 합니다. 하위 클래스의 생성자 내에서 실행되는 첫 번째 문은 항...
    프로그램 작성 2024-11-08에 게시됨
  • C++에서 다른 컨테이너의 반복자를 비교할 수 있습니까?
    C++에서 다른 컨테이너의 반복자를 비교할 수 있습니까?
    다른 컨테이너의 반복자 비교: 주의 사항C에서 반복자는 컬렉션 순회를 위한 강력한 메커니즘을 제공합니다. 그러나 다른 컨테이너의 반복자를 사용할 때는 제한 사항을 인식하는 것이 중요합니다.다른 컨테이너의 반복자를 비교하는 것이 합법적인지에 대한 질문이 자주 발생합니다....
    프로그램 작성 2024-11-08에 게시됨
  • FastAPI 돕기: 문서 번역에 기여하는 방법
    FastAPI 돕기: 문서 번역에 기여하는 방법
    One of the great features of FastAPI is its great documentation ?. But wouldn't it be better if more people around the world had access to this docume...
    프로그램 작성 2024-11-08에 게시됨
  • CSS와 AngularJS를 사용하여 수직 HTML 테이블을 만드는 방법은 무엇입니까?
    CSS와 AngularJS를 사용하여 수직 HTML 테이블을 만드는 방법은 무엇입니까?
    세로 HTML 테이블세로 행이 있는 HTML 테이블을 생성하면 행 머리글이 위쪽이 아닌 왼쪽이요. 이를 달성하려면 CSS 스타일을 적용하여 테이블 구조를 변환할 수 있습니다.CSS 스타일링테이블 행을 세로 열로 렌더링하려면 다음 CSS 규칙을 따르세요. 사용할 수 있습...
    프로그램 작성 2024-11-08에 게시됨
  • 커스텀 후크를 사용하여 React에서 로직 재사용: 실용 가이드
    커스텀 후크를 사용하여 React에서 로직 재사용: 실용 가이드
    사용자 정의 후크는 React 내장 후크와 달리 보다 구체적인 목적으로 사용되는 React의 강력한 기능이며, 공통 기능을 독립적인 기능으로 캡슐화하여 수행됩니다. 사용자 정의 후크는 재사용성을 촉진하고 구성 요소 구성을 개선하며 전반적으로 코드 유지 관리성을 향상시킵...
    프로그램 작성 2024-11-08에 게시됨
  • ReactJS로 무료 AI 이미지 생성기 구축
    ReactJS로 무료 AI 이미지 생성기 구축
    안녕하세요 개발자 여러분, 오늘은 ReactJS를 사용하여 이미지 생성기를 만드는 방법을 보여 드리겠습니다. Black Forest Labs와 Together AI 덕분에 모두 무료로 사용할 수 있습니다. 1단계: 프로젝트 설정 이 튜토리얼에서는 Vit...
    프로그램 작성 2024-11-08에 게시됨
  • 문자열의 연결 또는 중괄호: 성능과 미학을 최적화하는 접근 방식은 무엇입니까?
    문자열의 연결 또는 중괄호: 성능과 미학을 최적화하는 접근 방식은 무엇입니까?
    문자열의 변수 연결과 중괄호: 성능 및 미학 평가문자열 조작 영역 내에서 개발자는 종종 딜레마에 직면합니다. 문자열 내에서 변수를 연결해야 합니까, 아니면 대신 중괄호를 선택해야 합니까? 각 방법에는 고유한 장점과 단점이 있으므로 정보에 입각한 결정을 내리기 위해 자세...
    프로그램 작성 2024-11-08에 게시됨
  • 나는 Granite를 시험해 보았다.
    나는 Granite를 시험해 보았다.
    화강암 3.0 Granite 3.0은 다양한 엔터프라이즈 수준 작업을 위해 설계된 가벼운 오픈 소스 생성 언어 모델 제품군입니다. 다국어 기능, 코딩, 추론, 도구 사용을 기본적으로 지원하므로 기업 환경에 적합합니다. 이 모델을 실행하여 어떤 작업을 처...
    프로그램 작성 2024-11-08에 게시됨
  • JavaScript 기능 익히기: 개발자를 위한 종합 가이드
    JavaScript 기능 익히기: 개발자를 위한 종합 가이드
    JavaScript Functions A JavaScript function is a block of code designed to perform a particular task. A JavaScript function is executed when "...
    프로그램 작성 2024-11-08에 게시됨
  • Go의 확률적 조기 만료
    Go의 확률적 조기 만료
    캐시 스탬피드 정보 이런 저런 것을 캐시해야 하는 상황에 자주 직면하게 됩니다. 종종 이러한 값은 일정 기간 동안 캐시됩니다. 당신은 아마도 패턴에 익숙할 것입니다. 캐시에서 값을 얻으려고 시도하고, 성공하면 이를 호출자에게 반환하고 하루를 호출합니다....
    프로그램 작성 2024-11-08에 게시됨
  • Next.js 캐싱: 효율적인 데이터 가져오기로 앱 속도 향상
    Next.js 캐싱: 효율적인 데이터 가져오기로 앱 속도 향상
    Next.js의 캐싱은 단지 시간을 절약하는 것이 아닙니다. 중복된 네트워크 요청을 줄이고, 데이터를 최신 상태로 유지하며, 앱이 최고의 성능을 발휘하도록 만드는 것입니다. 데이터를 더 오랫동안 캐시된 상태로 유지하거나 필요에 따라 새로 고치려는 경우 Next.js는...
    프로그램 작성 2024-11-08에 게시됨
  • My Go 템플릿 조건부 확인이 실패하는 이유는 무엇입니까?
    My Go 템플릿 조건부 확인이 실패하는 이유는 무엇입니까?
    Go 템플릿: 조건부 검사 문제 해결Go 템플릿 렌더링에서 구조체 필드에 대한 조건부 검사가 때때로 예상대로 작동하지 않을 수 있습니다. bool 필드 isOrientRight가 올바르게 평가되지 않는 다음 예를 고려하십시오.type Category struct { ...
    프로그램 작성 2024-11-08에 게시됨

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3