Зробити додаток Angular без зон

pic

Чому без зон?

  1. Покращена продуктивність: Zone.js виконує перевірку змін і повторно рендерить подання більше разів, ніж потрібно. Адже зона насправді не знає, що саме змінилося.
  2. Менший розмір пакету: Оскільки код, пов'язаний з zone.js, видаляється з фінального пакету.
  3. Швидше завантаження додатку: Немає потреби завантажувати zone.js.
  4. Більше не буде помилки "Expression changed after it is checked".

Ми розглянемо наступне.

  1. Код Angular з використанням zone.js.
  2. Як перейти на режим без зон.
  3. Як Angular поводиться без zone.js.
  4. Як знову зробити код функціональним.

Код Angular з zone.js.

Для початку перевіримо, чи є у нас залежність zone.js. Спробуйте вивести Zone у вашій консолі.

pic

Простий лічильник:

//HTML  

Counter: {{ counter }}
Increment      //TS   counter = 0;   incrementCounter() {    this.counter += 1;   } ```  ![pic](https://drive.javascript.org.ua/4ba29955be1_nD_ACd1ZtZXkHy7REa4L7g_gif)  **Просте асинхронне встановлення властивості через setInterval:**  ``` //HTML   
Simple property set asynchronously
Tick: {{ tick }}
      //TS   tick = 0;      setInterval(() => {    this.tick += 1;   },1000); ```  ![pic](https://drive.javascript.org.ua/f90e300a181__JYxb82tsgqh73RllPyslw_gif) {    
{{ member.name }}
   }       //TS   members = [];   this.getData().subscribe(    m => this.members = m   );   getData() {    return this.http.get("https://jsonplaceholder.typicode.com/users")   } ```  ![pic](https://drive.javascript.org.ua/4cccd3d8951_BSs1phBx_Uwe3qwKRdaiDg_png)  **Дані, отримані через HTTP з async pipe:**  ``` //HTML       
{{ member.name }}
      //TS   members$ = this.getData();   getData() {    return this.http.get("https://jsonplaceholder.typicode.com/users")   } ```  ![pic](https://drive.javascript.org.ua/e1036ce4e21_IBUWaTVKsxTu4nSPVjTM1w_png)  **Використання сигналів замість markForCheck:**  Коли подання читає сигнал, Angular реєструє сигнал як залежність подання.
Коли сигнал змінюється, подання отримує сповіщення і оновлює змінене значення.

//HTML

Simple property set asynchronously using signal
Tick: {{ tick() }}
//TS tick = signal(0); setInterval(() => { this.tick.update(c => c += 1); },1000); ``` pic, щоб дізнатися більше про Angular та JS!

Перекладено з: Making Angular Application Zoneless

Leave a Reply

Your email address will not be published. Required fields are marked *