Хранит ли jQuery.data() ссылку или глубокую копию объекта DOM jQuery?
Я использую jQuery.data() для хранения ссылок на объекты JQuery DOM:
myObj.data('key', $('#element_id'));
Я буду использовать это много (часто для тех же объектов DOM), поэтому мне не хотелось бы занимать слишком много памяти. Сохраняет ли jQuery ссылку или хранит глубокую копию объекта DOM? В этом случае я полагаю, что лучше хранить идентификатор элемента вместо ссылки на элемент.
Ответы
Ответ 1
Объект jQuery, который вы создаете с помощью $('#element_id')
содержит
- ссылка на контекст (здесь документ)
- селектор
- cached: длина (0 или 1 в вашем случае) и ссылки найденного dom-узла
- указатель на прототип (чтобы вы могли вызывать методы)
То, что вы храните в данных (в узле), является объектом jQuery. Этот объект не содержит глубокой копии упомянутого узла DOM, поэтому вы не храните глубокую копию, а только небольшой объект, в основном содержащий строку и несколько указателей.
И по мере того как ссылка узла DOM кэшируется, она более эффективна, чем просто идентификатор (незначительно, поскольку поиск узла по id всегда выполняется быстро, но если у вас был более сложный селектор, это могло бы иметь значение).
Так что, по моему мнению, все хорошо и эффективно.
Ответ 2
Вы всегда можете посмотреть источник напрямую, yay для open source:)
Строки 51 и 52 данных.js имеют полезный комментарий:
//Объект может быть передан в jQuery.data вместо пары ключ/значение; это получает
//неглубоко скопировано в существующий кеш
Поэтому я предполагаю, что это мелкая копия!
обновить 07/14 - эта ссылка была главой: теперь мастер полностью устарел, вот каноническая ссылка на то, о чем я говорил: как у 16ba6ff