Вы должны избавиться от объектов jQuery? - PullRequest
8 голосов
/ 05 января 2012

Мой коллега всегда устанавливает для своих переменных jQuery значение null, чтобы эффективно распоряжаться ими, как только они закончат, например:

var bigThing = $(body);
// ...
// Do some stuff
// ...
bigThing = null;

Это действительно необходимо?

Ответы [ 5 ]

7 голосов
/ 05 января 2012

Если вы инкапсулируете свой код в функции, которые не нужны, так как после завершения функции локальные переменные будут уничтожены в любом случае, если никакая ссылка на них не используется в другом месте.

Удержание селектора / переменной (кэширование) может иметь некоторый положительный эффект, если вам нужно выбирать одно и то же снова и снова, а не выбирать его только один раз и сохранять переменную.

3 голосов
/ 05 января 2012

Краткий ответ: нет, это вряд ли когда-либо понадобится, если вы используете jQuery.

Это зависит от того, что вы сделали с ним. Если вы не подключили обработчики событий к узлу DOM, сборщик мусора очистит его, когда на него больше не будет ссылаться.

Но даже если вы подключили обработчики событий, jQuery позаботится о них в таких функциях, как .remove () и .empty () , отсоединив для вас все обработчики событий. Поэтому, пока вы используете jQuery для взаимодействия с DOM, вы в безопасности.

Без jQuery, если вы подключили обработчик событий к узлу, GC не очистит его, даже после того, как вы удалили узел из дерева DOM и у вас больше нет ссылок на него. Это связано с тем, что DOM-узел содержит ссылку на объект JavaScript (то есть обработчик события) и наоборот. Это создает циклическую ссылку в двух отдельных системах; У большинства сборщиков мусора есть проблемы.

Для дальнейшего чтения я укажу вам статью Дугласа Крокфорда об утечках памяти .

2 голосов
/ 05 января 2012

Нет необходимости, но есть хорошая привычка удалять ссылки и освобождать память

0 голосов
/ 05 января 2012

Javascript имеет свой собственный сборщик мусора.Таким образом, кажется, что вам не нужно явно уничтожать объекты.

Но по разным причинам, например, из-за плохой реализации сборщика мусора и т. Д., Может случиться так, что это утечка памяти.*

Явно обнуляя их, вы указываете браузеру, что эта память должна быть очищена при следующей сборке мусора.

В заключение, хотя в этом нет необходимости, это будет хорошей практикой.аннулировать объекты JQuery / javascript.

0 голосов
/ 05 января 2012

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

Однако в вашем примере объект $ (body) (расширенный объект jquery, а не объект тела DOM) будет очищен, если вы установите bigThing на что-либо другое (необязательно нулевое)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...