Skip to content

Commit

Permalink
JS: Добавляет недостающие плейсхолдеры про память и многопоточность (#…
Browse files Browse the repository at this point in the history
…4841)

* Добавляет плейсхолдер для `WeakRef`

* Добавляет плейсхолдер для `FinalizationRegistry`

* Добавляет плейсхолдер для `Atomics`
  • Loading branch information
TatianaFokina authored Nov 15, 2023
1 parent 80ac278 commit b400228
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 0 deletions.
1 change: 1 addition & 0 deletions .yaspeller.json
Original file line number Diff line number Diff line change
Expand Up @@ -576,6 +576,7 @@
"фид(ом|а|у|)",
"фидбек(а|)",
"филдсет(а|ов|ам|)",
"финализатор(ом|)",
"фич(ей|ам|и|у|а|ами|)",
"флекс(ом|ами|ов|ы|ах|)",
"флексбокс(ов|ам|ами|а|ы|е|)",
Expand Down
40 changes: 40 additions & 0 deletions js/atomics/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
title: "`Atomics`"
description: "Специальный объект для хранения функций, которые могут выполняться независимо и параллельно друг с другом."
authors:
- doka-dog
related:
- js/shared-array-buffer
- js/array-buffer
- js/arrays
tags:
- doka
- placeholder
---

## Кратко

Объект, который хранит атомарные операции и функции, которые отправляют примитивные события. Используется вместе с другим объектом [`SharedArrayBuffer`](/js/shared-array-buffer/).

## Пример

```js
const arrayForMultipleThreads = new SharedArrayBuffer(1024)
const threadArrayView = new Uint8Array(sab)

ta[0]
// 0

ta[0] = 5
// 5

Atomics.add(ta, 0, 12)
// 5

Atomics.load(ta, 0)
// 17
```

## Как пишется

В отличие от других объектов, `Atomics` не является конструктором. Его нельзя использовать вместе с оператором `new` или вызывать как функцию. Все свойства и методы `Atomics` статические.
44 changes: 44 additions & 0 deletions js/finalization-registry/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
title: "`FinalizationRegistry`"
description: "Объект, который позволяет регистрировать обработчики сборки мусора на зарегистрированных в нём объектах."
authors:
- doka-dog
related:
- js/collection-weakmap
- js/weak-set
- js/set
tags:
- doka
- placeholder
---

## Кратко

Объект, который управляет обработчиками событий, которые срабатывают, когда сборщик мусора собирает зарегистрированные в нём объекты. Это своеобразный реестр, в котором хранится всё, что нужно сделать с объектами перед их сборкой.

Колбэк очистки (cleanup callback) ещё называют финализатором (finalizer). Это такая функция, которая выполняется, когда зарегистрированный объект собирается сборщиком мусора.

## Пример

Создаём регистр с колбэком `heldValue`:

```js
const registry = new FinalizationRegistry((heldValue) => {
//
})
```

## Как пишется

Чтобы создать `FinalizationRegistry`, обязательно используйте оператор `new`. В скобках в качестве аргумента указывают колбэк очистки.

```js
new FinalizationRegistry(anyCallbackFunction)
```

Старайтесь не полагаться на обработчики событий в объекте `FinalizationRegistry`. Сборка мусора — сложный процесс, и никто не знает, когда эти колбэки сработают и сработают ли вообще.

## Методы

- `.register()` — регистрирует объект в реестре.
- `.unregister()` — отменяет регистрацию объекта в реестре.
41 changes: 41 additions & 0 deletions js/weak-ref/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
title: "`WeakRef`"
description: "Слабая ссылка на объект."
authors:
- doka-dog
related:
- js/collection-weakmap
- js/weak-set
- js/set
tags:
- doka
- placeholder
---

## Кратко

Объект, который хранит слабую ссылку на другой. Это значит, что сборщик мусора может игнорировать эту ссылку когда решает, какие объекты очищать (сборщик мусора не собирает объекты, если на них есть ссылки).

## Пример

```js
class Counter {
constructor(element) {
// Слабая ссылка на какой-то элемент в DOM
this.ref = new WeakRef(element)
this.start()
}
}
```

## Как пишется

Чтобы создать `WeakRef`, обязательно используйте оператор `new`. В скобках в качестве аргумента указывают объект, на который ссылается слабая ссылка.

```js
new WeakRef(anyTargetElement)
```

## Как понять

В JavaScript есть сильные и слабые ссылки на другие объекты. Наличие сильной ссылки не разрешает сборщику мусора его собрать. Объект со слабой ссылкой можно собрать.

0 comments on commit b400228

Please sign in to comment.