Почему JQuery не раскрывает свою функциональность UUID?

Под капотом JQuery использует карту «UUID» (просто счетчик, который он поддерживает как jQuery.uuid ), чтобы обойти хорошо известные проблемы с утечкой памяти, которые возникают у браузеров при присоединении свойства к тегу в DOM из Javascript. Вместо этого JQuery использует $. Data (tag, name, value) для хранения данных на карте с ключом uuid (ключ, который можно определить, проверив tag [ jQuery.expando] ).

Хотя $. data () очень полезен, бывают случаи, когда вы хотите сопоставить данные с тегами, не сбрасывая эти данные в одну глобальную корзину - вам нужен ваш иметь меньший объем данных, который вы можете, например, проверить длину или просмотреть.

В качестве надуманного примера предположим, что у вас есть значки, которые при нажатии меняют одно из 4 состояний. Когда один из них находится в состоянии 2, вы хотите добавить его к массиву значков в состоянии 2. Наиболее очевидный способ сделать это - добавить тег в массив; однако это приведет к утечке памяти. Вы можете вызвать $. Data () для флажка, но это не совсем выполняет то, что вы пытаетесь сделать - вам придется пройти через все флажки, проверяя $. Data () против них, чтобы выяснить, какие из них есть в списке, а какие нет.

Вам нужно сохранить некоторую абстракцию тегов в массиве, и это UUID jQuery. Вы можете написать свою собственную функциональность UUID, но в идеале вы просто используете функциональность UUID, уже встроенную в JQuery, как по соображениям размера кода, так и по соображениям качества. Вы можете попросить JQuery неявно присоединить UUID к тегу, вызвав $. Data (tag, 'неуместно', 1) , а затем проверив tag [jQuery.expando] , чтобы получить его UUID и, наконец, используйте его в списке ... но это своего рода взлом. На самом деле, было бы идеально, если бы в общедоступном API было представлено следующее:

$. GetUuid (tag) : проверяет и создает UUID, если таковой не существует - в идеале метод выводится из $ .data () и создает или получает uuid для переданного тега.

Итак, есть ли причина, по которой это не учитывается в собственном методе jQuery? Это чем-то вредно? Разве это никогда не казалось чем-то полезным?

Я должен отметить, что я фактически учел это в версии jQuery, которую мы используем, и это очень полезно. Но, возможно, есть скрытый риск, которому я не подвержен при использовании. Я также знаю плагин, который вроде как выполняет это, но он немного сломан, а наличие двух кодовых путей для выполнения одной и той же функциональности UUID является немного расточительным и немного хрупким.

6
задан Brian Tompsett - 汤莱恩 20 December 2015 в 22:43
поделиться