#javascript
#javascript
Вопрос:
//Following function add new table entry to table
//and return interface which has function which uses closure to access and update the table
var _newRow = (function(){
var _interface = {
updateName: null,
updateProgress: null,
actionLinkButton : null,//<a> tag used for user aciton to perform on UI like delete, hide, show etc.
..
..
..
};
var tr = createTr();
var tdName = createTd();
_inteface.updateName = function(newName){
tdName.innerHTML = newName;
}
..
..
..
..
..
return _interface;
})(tblObject);
//maintaining the array of all the rows as per row number
rowArray[rowNo] = _newRow;
..
..
//using the row array to update the entries
rowArray[rowNo].updateProgress('read');
Выше приведен шаблон, который я использовал для обновления динамически добавляемых строк на стороне клиента. Что я делаю, так это при добавлении строки в таблицу создаю _interface, возвращаю его и сохраняю в соответствии с номером строки.
Однако для этого я использовал закрытие, означающее множество живых объектов. Я хотел бы знать, это правильный способ? Есть ли лучший подход, чем этот? Какие инструменты профилирования я могу использовать, чтобы узнать, сколько памяти использует этот код? Как я могу гарантировать, что закрытия очищаются должным образом, когда они не нужны?
Комментарии:
1. Взгляните на getfirebug.com который является плагином для FireFox или встроенным профилировщиком в любом браузере Webkit (Google Chrome, Safari).
2. Да, я его использую. Но это не указывает на объем памяти, размер кучи и прочее. Также нет указаний на неправильные методы или увеличение объема памяти. Есть ли какой-нибудь другой инструмент?
Ответ №1:
В JavaScript есть сборщик мусора, который будет собирать посторонние объекты и автоматически освобождать их для вас. Нет способа контролировать, когда и как.
Что может помешать сборке мусора из объектов / замыканий, так это когда у вас есть глобально доступные объекты, ссылающиеся на функции с лексической областью видимости. Убедитесь, что вы отсоединили все значения, которые вы не используете (например, удалите их из DOM). Если вы уверены, что нет способа получить доступ к значениям, они в конечном итоге будут собраны мусором.
Для выявления утечек памяти важно не оптимизировать преждевременно, вы можете отслеживать использование памяти вашим веб-браузером. Если это там не заметно, то вам, вероятно, не нужно беспокоиться об этом. Возможно, вам захочется смоделировать множество операций в вашем приложении, чтобы увидеть, как может выглядеть состояние после того, как приложение было запущено в течение длительного времени.
Но, как правило, не беспокойтесь об использовании памяти. По моему опыту, это очень редко проблема.