Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Apply suggestions from code review
  • Loading branch information
dolgachio authored Feb 28, 2024
commit c17f7206e04ed932e0223a34f6f83304796a1fe1
16 changes: 8 additions & 8 deletions 1-js/99-js-misc/07-weakref-finalizationregistry/article.md
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ const getCachedImg = weakRefCache(fetchImg);

Після того як елемент буде видалено з DOM, логер це побачить і припинить надсилати повідомлення.

Тепер давайте розглянемо вихідний код детальніше (вкладка `index.js`):
Тепер давайте розглянемо вихідний код детальніше (*вкладка `index.js`*):

1. Отримуємо DOM-елемент кнопки "Почати відправку повідомлень".
2. Отримуємо DOM-елемент кнопки "Закрити".
Expand All @@ -235,10 +235,11 @@ const getCachedImg = weakRefCache(fetchImg);

Ми не можемо контролювати цей процес безпосередньо з коду. Але, незважаючи на це, у нас все ще є можливість виконати примусовий збір сміття з браузера.

У Google Chrome, наприклад, для цього потрібно відкрити інструменти розробника (`key:Ctrl` + `key:Shift` + `key:J` на Windows/Linux або `key:Option` + `key:⌘` + `key:J` на macOS), перейти до вкладки "Продуктивність (Performance)" та натиснути на кнопку з іконкою урни – "Зібрати сміття (Collect garbage)":
У Google Chrome, наприклад, для цього потрібно відкрити інструменти розробника (`key:Ctrl` + `key:Shift` + `key:J` на Windows/Linux або `key:Option` + `key:⌘` + `key:J` на macOS), перейти до вкладки "Performance" та натиснути на кнопку з іконкою урни – "Collect garbage":

![](google-chrome-developer-tools.png)
![](google-chrome-developer-tools.png)

<br>
Даний функціонал підтримується у більшості сучасних браузерів. Після виконаних дій <code>alert</code> спрацює невідкладно.
Comment thread
dolgachio marked this conversation as resolved.

## FinalizationRegistry
Expand All @@ -247,15 +248,14 @@ const getCachedImg = weakRefCache(fetchImg);

**Колбек очищення (фіналізатор)** - це функція, яка виконується у випадку, якщо об'єкт, зареєстрований в `FinalizationRegistry`, видаляється з пам'яті збирачем сміття.

Його мета – надати можливість виконання додаткових операцій, пов'язаних з об'єктом, після його остаточного видалення з пам'яті.
Його мета - надати можливість виконання додаткових операцій, пов'язаних з об'єктом, після його остаточного видалення з пам'яті.

**Реєстр** (або `FinalizationRegistry`) - це спеціальний об'єкт у JavaScript, який керує реєстрацією та скасуванням реєстрації об'єктів та їх колбеків очищення.
**Registry** (або `FinalizationRegistry`) - це спеціальний об'єкт у JavaScript, який керує реєстрацією та скасуванням реєстрації об'єктів та їх колбеків очищення.

Цей механізм дозволяє зареєструвати об'єкт для відстеження і пов'язати з ним колбек очищення.
По суті, це структура, яка зберігає інформацію про зареєстровані об'єкти та їх колбеки очищення, а потім автоматично викликає ці колбеки при видаленні об'єктів з пам'яті.

Для створення екземпляра реєстру `FinalizationRegistry`, необхідно викликати його конструктор,
який приймає єдиний аргумент - колбек очищення (фіналізатор).
Для створення екземпляра реєстру `FinalizationRegistry`, необхідно викликати його конструктор, який приймає єдиний аргумент - колбек очищення (фіналізатор).

Синтаксис:

Expand All @@ -277,7 +277,7 @@ const registry = new FinalizationRegistry(cleanupCallback);

- `register(target, heldValue [, unregisterToken])` - використовується для реєстрації об'єктів у реєстрі.

`target` - об'єкт, що реєструється для відстеження. Якщо `target` буде видалено збирачем сміття, колбек очищення буде викликано з `heldValue` як аргумент.
`target` - об'єкт, що реєструється для відстеження. Якщо `target` буде видалено збирачем сміття, колбек очищення буде викликано з аргументом `heldValue`.

Опціональний `unregisterToken` - токен скасування реєстрації. Може бути переданий для скасування реєстрації до видалення об'єкта збирачем сміття. Зазвичай як `unregisterToken` використовується об'єкт `target`, що є стандартною практикою.
Comment thread
dolgachio marked this conversation as resolved.
Outdated
- `unregister(unregisterToken)` - метод `unregister` використовується для скасування реєстрації об'єкта в реєстрі. Він приймає один аргумент - `unregisterToken` (токен скасування реєстрації, який був отриманий під час реєстрації об'єкта).
Expand Down