Skip to content

Commit 0dfb2cd

Browse files
authored
Apply suggestions from code review
1 parent dbeccd2 commit 0dfb2cd

File tree

1 file changed

+14
-14
lines changed
  • 1-js/99-js-misc/07-weakref-finalizationregistry

1 file changed

+14
-14
lines changed

1-js/99-js-misc/07-weakref-finalizationregistry/article.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ user = null;
2222

2323
// посилання втрачається і об'єкт буде видалено з пам'яті
2424

25+
```
26+
27+
Або схожий, але трохи складніший код із двома сильними посиланнями:
2528

2629
```js
2730
// у змінній user знаходиться сильне посилання на об'єкт
@@ -39,31 +42,30 @@ user = null;
3942
```
4043
Об'єкт `{ name: "John" }` видалиться з пам'яті тільки в разі відсутності сильних посилань на нього (якби ми також перепризначили значення змінної `admin`).
4144

42-
У JavaScript існує концепція під назвою `WeakRef`, яка поводиться трохи інакше в цьому випадку.
45+
У JavaScript існує концепція під назвою `WeakRef`, яка працює трохи інакше в цьому випадку.
4346

4447
````smart header="Терміни: \"Сильне посилання\", \"Слабке посилання\""
45-
**Сильне посилання** - це посилання на об'єкт або значення, яке запобігає їх видаленню збирачем сміття.
46-
При цьому, зберігаючи об'єкт або значення в пам'яті, на які воно вказує.
48+
**Сильне посилання** - це посилання на об'єкт або значення, яке запобігає їх видаленню збирачем сміття. При цьому, зберігаючи об'єкт або значення в пам'яті, на які воно вказує.
4749
4850
Це означає, що об'єкт або значення залишаються в пам'яті й не видаляються збирачем сміття доти, доки на них є активні сильні посилання.
4951
5052
У JavaScript стандартні посилання на об'єкти є *сильними* посиланнями. Наприклад:
53+
5154
```js
5255
// змінна user містить сильне посилання на цей об'єкт
5356
let user = { name: "John" };
5457
```
55-
5658
**Слабке посилання** - це посилання на об'єкт або значення, яке *не* запобігає їх видаленню збирачем сміття. Об'єкт або значення можуть бути видалені збирачем сміття у випадку, якщо на них існують тільки слабкі посилання.
5759
````
5860

5961
## WeakRef
6062

63+
6164
````warn header="Застереження"
62-
Перш ніж ми перейдемо до вивчення, варто зазначити, що правильне застосування структур,
63-
про які йтиметься в цій статті, вимагає дуже ретельного обмірковування, і якщо це можливо, їхнього використання краще уникати.
65+
Перш ніж ми перейдемо до вивчення, варто зазначити, що правильне застосування структур з цієї статті, вимагає дуже ретельного обмірковування, і якщо це можливо, їхнього використання краще уникати.
6466
````
6567

66-
`WeakRef` - це об'єкт, що містить слабке посилання на інший об'єкт, який називається `target` або `referent`.
68+
`WeakRef` - це об'єкт, що містить слабке посилання на інший об'єкт, який називається `target` або `referent`.
6769

6870
Особливість `WeakRef` полягає в тому, що він не перешкоджає збирачеві сміття видаляти свій об'єкт-референт. Іншими словами, він просто не утримує його "в живих".
6971

@@ -82,7 +84,7 @@ let admin = new WeakRef(user);
8284
*/!*
8385
```
8486

85-
На схемі нижче зображено два типи посилань: сильне посилання з використанням змінної `user` і слабке посилання з використанням змінної `admin`:
87+
На схемі нижче зображено два типи посилань: сильне посилання з використанням змінної `user` і слабке посилання з використанням змінної `admin`:
8688

8789
![](weakref-finalizationregistry-01.svg)
8890

@@ -94,17 +96,15 @@ user = null;
9496
```
9597

9698
Слабкого посилання на об'єкт недостатньо, щоб зберегти його "в живих".
97-
Коли єдиними зоставшимися посиланнями на об'єкт-референт, є слабкі посилання, збирач сміття має право знищити цей об'єкт і використовувати його пам'ять для чогось іншого.
9899

99100
Однак доти, доки об'єкт фактично не знищено, слабке посилання може повернути його, навіть якщо на цей об'єкт більше немає сильних посилань.
100-
Тобто наш об'єкт стає своєрідним "[котом Шредінгера](https://uk.wikipedia.org/wiki/%D0%9A%D1%96%D1%82_%D0%A8%D1%80%D0%B5%D0%B4%D1%96%D0%BD%D0%B3%D0%B5%D1%80%D0%B0)" - ми не можемо знати точно, "живий" він чи "мертвий":
101+
Тобто наш об'єкт стає своєрідним "[котом Шредінгера](https://uk.wikipedia.org/wiki/Кіт_Шредінгера)" - ми не можемо знати точно, "живий" він чи "мертвий":
101102

102103
![](weakref-finalizationregistry-02.svg)
103104

104-
На цьому етапі, щоб отримати об'єкт із екземпляра `WeakRef`, ми скористаємося його методом `deref()`.
105+
На цьому етапі, щоб отримати об'єкт з екземпляру `WeakRef`, ми використаємо його `deref()` метод.
105106

106-
Метод `deref()` повертає об'єкт-референт, на який посилається `WeakRef`, якщо об'єкт все ще перебуває в пам'яті.
107-
Якщо об'єкт було видалено збирачем сміття, - метод `deref()` поверне `undefined`:
107+
Метод `deref()` повертає об'єкт-референт, на який посилається `WeakRef`, якщо об'єкт все ще перебуває в пам'яті. Якщо об'єкт було видалено збирачем сміття, - метод `deref()` поверне `undefined`:
108108

109109
```js
110110
let ref = admin.deref();
@@ -118,7 +118,7 @@ if (ref) {
118118

119119
## Варіанти використання WeakRef
120120

121-
`WeakRef` зазвичай використовується для створення кешів або
121+
`WeakRef` зазвичай використовується для створення кешу або [асоціативних масивів](https://uk.wikipedia.org/wiki/Асоціативний_масив), де зберігаються великі об'єкти.
122122
[асоціативних масивів](https://uk.wikipedia.org/wiki/%D0%90%D1%81%D0%BE%D1%86%D1%96%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%B8%D0%B9_%D0%BC%D0%B0%D1%81%D0%B8%D0%B2), де зберігаються ресурсомісткі об'єкти.
123123
Це дозволяє уникнути перешкоджанню видаленню цих об'єктів збирачем сміття тільки на основі їхньої присутності в кеші або асоціативному масиві.
124124

0 commit comments

Comments
 (0)