Потеря некоторых циклов процессора, но достаточно чистая.
апотом JQuery использует карту «UUID» (просто счетчик, который он поддерживает какjQuery.uuid
) обойти известные проблемы утечки памяти, которые возникают у браузеров, когда вы присоединяете свойство к тегу в DOM из Javascript. Вместо этого JQuery использует$.data(tag, name, value)
хранить данные на карте, отключенной от uuid (ключ, который можно определить, проверивtag[jQuery.expando]
).
Пока$.data()
Это очень полезно, бывают случаи, когда вы хотите отобразить данные в теги без сброса этих данных в один глобальный сегмент - вам нужен собственный меньший набор данных, который вы можете, например, проверить на длину или выполнить цикл.
В качестве надуманного примера, предположим, что у вас есть значки, которые при нажатии поворачиваются через одно из 4 состояний. Когда кто-то находится в состоянии 2, вы хотите добавить его в массив значков в состоянии 2. Наиболее очевидный способ сделать это - добавить тег в массив; однако это может привести к утечке памяти. Вы могли бы позвонить$.data()
на флажок, но это не совсем то, что вы пытаетесь сделать - вам придется пройти через все флажки проверки$.data()
против них выяснить, которые есть и нет в списке.
Вам нужно хранить некоторую абстракцию тегов в массиве, и это UUIDs в jQuery. Вы можете написать свою собственную функциональность UUID, но в идеале вы просто используете функциональность UUID, уже встроенную в JQuery, как по размеру кода, так и по качеству. Вы можете попросить JQuery неявно присоединить UUID к тегу, вызвав$.data(tag, 'irrelevant', 1)
а затем проверьтеtag[jQuery.expando]
чтобы получить его UUID, и, наконец, использовать его в списке ... но это немного хак. На самом деле, что было бы идеально, это показать следующее в публичном API:
$.getUuid(tag)
: Проверяет и создает UUID, если такового не существует - в идеале метод извлекается из$.data()
и создает или выбирает uuid для переданного тега.
Итак, есть ли причина, по которой это не учитывается в его собственном методе в jQuery? Это как-то вредно? Разве это никогда не казалось чем-то полезным?
Я должен отметить, что я фактически учел это в используемой нами версии jQuery, и это очень полезно. Но, возможно, есть основополагающий риск, который я не использую. Я также знаю о плагине, который вроде бы выполняет это, но он немного сломан - и наличие 2-х путей кода для выполнения той же функциональности UUID является и немного расточительным, и немного ломким.