Skip to content

Commit 6057278

Browse files
authored
Отступы
1 parent f62436a commit 6057278

File tree

1 file changed

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

1 file changed

+0
-14
lines changed

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

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -387,49 +387,35 @@ const getCachedImg = weakRefCache(fetchImg);
387387
388388
![](weakref-finalizationregistry-demo-02.png)
389389
390-
<br>
391390
Предположим, что нам нужно создать коллаж из 4 фотографий: мы выбираем их, после чего нажимаем кнопку "Create collage".
392391
На этом этапе уже известная нам функция <code>weakRefCache</code> проверяет, есть ли нужное изображение в кеше. Если нет, то скачивает его из облака и помещает в кеш для возможности дальнейшего использования. И так происходит для каждого выбранного изображения:
393-
</br><br>
394392
395393
![](weakref-finalizationregistry-demo-03.gif)
396394
397-
</br>
398-
399395
Обратив внимание на вывод в консоли можно увидеть, какие из фотографий были загружены из облака - на это указывает <span style="background-color:#133159;color:white;font-weight:500">FETCHED_IMAGE</span>. Так как это первая попытка создания коллажа, это означает, что на данном этапе "слабый кеш" ещё был пуст, а все фотографии были скачаны из облака и помещены в него.
400396
401397
Но, наряду с процессом загрузки изображений, происходит ещё и процесс очистки памяти сборщиком мусора. Это означает, что хранящийся в кеше объект, на который мы ссылаемся используя слабую ссылку, удаляется сборщиком мусора. И наш финализатор выполняется успешно, тем самым удаляя ключ, по которому изображение хранилось в кеше. Об этом нас уведомляет <span style="background-color:#901e30;color:white;font-weight:500;">CLEANED_IMAGE</span>:
402398
403399
![](weakref-finalizationregistry-demo-04.jpg)
404400
405-
<br>
406401
Далее мы понимаем, что нам не нравится получившийся коллаж, и решаем изменить одно из изображений и создать новый. Для этого достаточно снять выделение с ненужного изображения, выбрать другое, и ещё раз нажать на кнопку "Create collage":
407-
</br><br>
408402
409403
![](weakref-finalizationregistry-demo-05.gif)
410404
411-
<br>
412405
Но, на этот раз не все изображения были скачаны из сети, и одно из них было взято из слабого кеша: об этом нам говорит сообщение <span style="background-color:#385950;color:white;font-weight:500;">CACHED_IMAGE</span>. Это означает, что на момент создания коллажа сборщик мусора ещё не удалил наше изображение, и мы смело взяли его из кеша,
413406
тем самым сократив количество сетевых запросов и ускорив общее время процесса создания коллажа:
414-
</br><br>
415407
416408
![](weakref-finalizationregistry-demo-06.jpg)
417409
418-
<br>
419410
Давайте ещё немного "поиграем", заменив одно из изображений ещё раз и создав новый коллаж:
420-
</br><br>
421411
422412
![](weakref-finalizationregistry-demo-07.gif)
423413
424-
<br>
425414
На этот раз результат ещё более внушительный. Из 4 выбранных изображений, 3 из них были взяты из слабого кеша, и только одно пришлось скачать из сети.
426415
Снижение нагрузки на сеть составило около 75%. Впечатляет, не правда ли?
427-
</br><br>
428416
429417
![](weakref-finalizationregistry-demo-08.jpg)
430418
431-
</br>
432-
433419
Конечно, не следует забывать, что такое поведение не является гарантированным, и зависит от конкретной реализации и работы сборщика мусора.
434420
435421
Исходя из этого, сразу же возникает вполне логичный вопрос: почему бы нам не использовать обычный кеш, где мы можем сами управлять его сущностями, а не полагаться на сборщик мусора? Всё верно, в большинстве случаев нет необходимости использовать `WeakRef` и `FinalizationRegistry`.

0 commit comments

Comments
 (0)