diff --git a/.yaspeller.json b/.yaspeller.json index e2ae49e212..cb87e928a9 100644 --- a/.yaspeller.json +++ b/.yaspeller.json @@ -576,6 +576,7 @@ "фид(ом|а|у|)", "фидбек(а|)", "филдсет(а|ов|ам|)", + "финализатор(ом|)", "фич(ей|ам|и|у|а|ами|)", "флекс(ом|ами|ов|ы|ах|)", "флексбокс(ов|ам|ами|а|ы|е|)", diff --git a/js/atomics/index.md b/js/atomics/index.md new file mode 100644 index 0000000000..3ef9af4160 --- /dev/null +++ b/js/atomics/index.md @@ -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` статические. diff --git a/js/finalization-registry/index.md b/js/finalization-registry/index.md new file mode 100644 index 0000000000..3ca7f700e4 --- /dev/null +++ b/js/finalization-registry/index.md @@ -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()` — отменяет регистрацию объекта в реестре. diff --git a/js/weak-ref/index.md b/js/weak-ref/index.md new file mode 100644 index 0000000000..d5a7875e96 --- /dev/null +++ b/js/weak-ref/index.md @@ -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 есть сильные и слабые ссылки на другие объекты. Наличие сильной ссылки не разрешает сборщику мусора его собрать. Объект со слабой ссылкой можно собрать.