# 1. Обходной путь из-за отсутствия свойства .size
?
В JavaScript я никогда раньше не использовал ни WeakSet
, ни WeakMap
, и я не очень разбираюсь в сборке мусора в В общем (я PHP + JS разработчик, так что я впервые подумал о сборке мусора). Но я думаю, что сейчас у меня есть хороший вариант использования WeakMap
. Поэтому я хотел бы, по крайней мере, начать экспериментировать с этим.
Главное, что я хочу подтвердить в своих экспериментах, - это автоматическое удаление c объектов, когда они были собраны в мусор. Это было бы легко проверить, если бы я мог просто получить доступ к свойству WeakSet.size
/ WeakMap.size
в экземплярах, чтобы проверить их размер, но они не существуют в "слабых" версиях.
Если возможно, Я предполагаю, что результаты могут отличаться, учитывая, что размер будет зависеть от того, запущен ли сборщик мусора. Но это нормально, так как ни один из этого экспериментального кода не будет использоваться в производстве ... Я просто хочу подтвердить, что я действительно понимаю, как работает сборка мусора и WeakSet / WeakMap. Идея использования этой функции без возможности тестирования (и, следовательно, полного понимания) меня очень беспокоит, и я обеспокоен тем, что в конечном итоге узнаю об утечках памяти, когда будет слишком поздно (в производстве).
Существуют ли какие-либо обходные пути или альтернативы для решения проблемы отсутствия WeakSet.size
и WeakMap.size
... хотя бы только для целей отладки / тестирования / обучения?
Если не .size
обходной путь, есть ли способ проверить использование памяти моими WeakMap
экземплярами коллекции? Это было бы так же полезно, так как именно в этом и заключается основная проблема.
Единственное, о чем я могу думать сейчас, это проверка памяти всего процесса Node.js, который выглядит не очень надежный для меня.
# 2. Что такое .length для?
Кроме того, я немного запутался, почему существует свойство .length
в прототипе конструктора / экземпляра класса как WeakSet
, так и WeakMap
(не включен ваши экземпляры их).
Согласно:
... на обеих страницах написано, что .length
это:
The value of the length property is 0.
Они буквально жестко запрограммированы на число 0 во все времена? Какой в этом смысл?
Поиск в Google «WeakSet.length» или «WeakMap.length» (включая двойные кавычки для точных результатов) не дает никакой дополнительной информации, только около 20 результатов для каждого, которые являются лишь зеркалами MDN. стр.