-
Notifications
You must be signed in to change notification settings - Fork 654
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
JS: Добавляет недостающие плейсхолдеры про память и многопоточность (#…
…4841) * Добавляет плейсхолдер для `WeakRef` * Добавляет плейсхолдер для `FinalizationRegistry` * Добавляет плейсхолдер для `Atomics`
- Loading branch information
1 parent
80ac278
commit b400228
Showing
4 changed files
with
126 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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` статические. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()` — отменяет регистрацию объекта в реестре. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 есть сильные и слабые ссылки на другие объекты. Наличие сильной ссылки не разрешает сборщику мусора его собрать. Объект со слабой ссылкой можно собрать. |