Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Cтереть объект (освободить от него RAM), теоретический вопрос 
V
    Опции темы
Michael.de
Дата 6.11.2008, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: 2
Всего: 9



Всем привет smile

Написал код для пояснения моего вопроса:
Код

<html>
<head>
<script type='text/javascript'>
var object, b, i=0;
var t=['Create & Append element','Remove element','Deleted ?','Try to delete'];
function init(){
 b=document.getElementById('b');
 set(t[i],create_and_append);
}
function set(text,onclick){
 b.innerHTML=t[i];
 b.onclick=onclick;
 i++;
}

function create_and_append(){
 object=document.createElement('table');
 object.style.cssText='position:absolute;left:200px;top:200px;background-color:#EEC;border:1px solid #00F';
 object.insertRow(0).insertCell(0).innerHTML='Bla bla';
 document.body.appendChild(object);
 set(t[i],remove);
}
function remove(){
 document.body.removeChild(object);
 set(t[i],is_deleted);
}
function is_deleted(){
 document.body.appendChild(object);
 set(t[i],try_to_delete);
}
function try_to_delete(){
 alert('Result: '+delete object);
}
</script>
</head>
<body onload='init();'>
<button id='b'></button>
</body>
</html>

removeChild
() удаляет объект из DOM-дерева, но не стирает его. delete стирает не все. В моей книжке об этом говорится следующее (перев. с нем.):
Код

...Тем не менее, Вы не можете удалить предопределенные свойства объекта и объекты...
Собственно вопрос: а чем их удалять из памяти? Мне пока пришла в голову только одна мысль object=null; А "поизящнее" ничего нет? smile

PM MAIL   Вверх
Zeroglif
Дата 6.11.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Michael.de @  6.11.2008,  02:17 Найти цитируемый пост)
delete стирает не все

'delete' удаляет свойство, если у этого свойства нет атрибута 'DontDelete', в вашем случае такой атрибут есть, т.к. 'object' - переменная при-var-енная к глобальному объекту.

Цитата(Michael.de @  6.11.2008,  02:17 Найти цитируемый пост)
а чем их удалять из памяти?

Сборщик в идеале сам удалит, наша задача - не удерживать в свойствах те значения, что нам больше не нужны (отсюда кратковременные значения должны жить в функциях плюс ненужные свойства можно удалять плюс ненужные значения можно переопределять). В реальной жизни на любом движке сборщик  может тупить, многие leaks известны , алгоритм работы стараются улучшить...

Цитата(Michael.de @  6.11.2008,  02:17 Найти цитируемый пост)
Мне пока пришла в голову только одна мысль object=null;

Правильная мысль, даём новое значение, старое забыто (если не зацепилось за память в другом месте)...

PM MAIL WWW   Вверх
Michael.de
Дата 6.11.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: 2
Всего: 9



Zeroglif, спасибо за ответ smile

Цитата(Zeroglif @  6.11.2008,  12:31 Найти цитируемый пост)
в вашем случае такой атрибут есть, т.к. 'object' - переменная при-var-енная к глобальному объекту.

Цитата(Zeroglif @  6.11.2008,  12:31 Найти цитируемый пост)
кратковременные значения должны жить в функциях

А как (например в моём случае) избавляться от глобальной переменной? И есть ли какие-либо стандартные "уловки"?

P.S. В принципе ответ на вопрос дан, но тему закрою попозже, т.к. хотелось бы получить ответ на доп. вопрос smile
PM MAIL   Вверх
Zeroglif
Дата 6.11.2008, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Michael.de @  6.11.2008,  18:17 Найти цитируемый пост)
А как (например в моём случае) избавляться от глобальной переменной?

Вы сами ответили - object=null;
PM MAIL WWW   Вверх
Michael.de
Дата 6.11.2008, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: 2
Всего: 9



Zeroglif, я не точно выразился - имелось в виду не значение переменной (с этим мы уже разобрались), а отказ от использования глобальной переменной (замена её чем-либо другим) smile
PM MAIL   Вверх
IDVsbruck
Дата 7.11.2008, 04:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



А зачем?
Или назначь другое значение - переменные в js нетипизированы, или присвой null - она ничего весить не будет.
Гарбедж Коллектор ее не удалит, так как она находится в scope объекта window.
Можно вовсе отказаться от глобальных переменных, используя обертки-замыкания, но это не очень удобно да и зачем?
PM MAIL   Вверх
Michael.de
Дата 7.11.2008, 04:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: 2
Всего: 9



Цитата(IDVsbruck @  7.11.2008,  04:04 Найти цитируемый пост)
Можно вовсе отказаться от глобальных переменных, используя обертки-замыкания
Вот с этого момента поподробнее, плиз smile
smile с closure в связке с глоб. переменной smile

P.S. Собственно говоря это уже другой вопрос (я мог бы другой топик создать), но у меня они оба в одном и том же скрипте возникли...

P.P.S. Никто не ответил... этот вопрос снимаю, тема помечена как "решённая" smile

Это сообщение отредактировал(а) Michael.de - 11.11.2008, 22:59
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0722 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.