Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   хэширование ДОМ обьектов (https://javascript.ru/forum/events/32666-khehshirovanie-dom-obektov.html)

cyber 25.10.2012 16:31

Цитата:

Сообщение от melky (Сообщение 212249)
при удалении со страницы ссылка на элемент остаётся -> он не убирается сборщиком мусора -> утечка памяти.

это я понимаю и поэтому :
-нужен элемент обращаемся к нему через hash
-удаляем его со страници
-удаляем с хэша
все правильно?

melky 25.10.2012 16:49

Цитата:

Сообщение от cyber
все правильно?

ровно до того момента, как кто-то удалит элемент не через сеттер, который снесёт кэш \ хэш, а через низкоуровневые методы, которые поставляются с DOM.

cyber 25.10.2012 16:53

melky,
в данный момент это проблем не вызывает пока пишешь один=)
нужно будет как попробывать переписать через prototype методы удаления из дом(я понимаю что такого лучше не делать но все же:)).

cyber 25.10.2012 20:01

вот как замутил
var CacheOperat = {



        Add: function (selcector,name) {


            cache[name] = document.querySelectorAll(selector);
        },

        remove:function (name) {
    
            var rem = cache[name];
            rem.parentNode.removeChild(rem);
            cache[name] = null;
        
        }


    };

melky 25.10.2012 20:37

Цитата:

Сообщение от Дзен-трансгуманист
Будь добр, скажи это еще раз - для меня. И я начну его мусолить как только появится время.

я тоже собирался "начать" в течение 3х месяцев :) но наткнулся на конкурс, где надо сделать игруху на канвасе, и я решил научиться этому мастерству.

главное - цель иметь. если бы я не пытался сделать на нём эту игру, фиг бы у меня что получилось - эти кружочки, квадратики рисовать очень скучно.

cyber 25.10.2012 20:42

Кстати нашел книгу на канве вроде норм(на англ), если есть желающие могу выложить.

cyber 25.10.2012 20:42

Цитата:

Сообщение от melky (Сообщение 212302)
главное - цель иметь. если бы я не пытался сделать на нём эту игру, фиг бы у меня что получилось - эти кружочки, квадратики рисовать очень скучно.

У меня цель добровольно принудительная=)

cyber 25.10.2012 21:06

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 212310)
querySelectorAll возвращает NodeList, поэтому удалять нужно через цикл по индексам.

эм..
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>

    <div>  </div>
      <div>  </div>
      <div>  </div>
      <div>  </div>
      <div>  </div>  <div>  </div>
      <div>  </div>
    
    <script>

 var cache = [];
      
   cache["div"] = document.querySelectorAll("div");
      
   alert( cache["div"]);
      
  cache["div"] = null;
   alert( cache["div"]);
   
    </script>

  </body>
</html>

cyber 25.10.2012 21:35

Цитата:

Сообщение от Дзен-трансгуманист (Сообщение 212318)
cyber,
Да нет же.))

var CacheOperat = {

  add: function (selector, name) {

    return !cache.hasOwnProperty(name)?
      (cache[name] = document.querySelectorAll(selector)): null;
  },

  remove: function (name) {

    if (cache.hasOwnProperty(name)) {

      var rem = cache[name], i;
      for (i in rem) {
        rem[i].parentNode.removeChild(rem[i]);
      }
      delete cache[name];
    }
  }
};

вот блин, точно, лоханулся=)
пора забивать на седня и идти пить пиво=)

cyber 25.10.2012 22:01

переделал вот так
function CacheObj(){



        this.Add = function (selcector, name) {


            cache[name] = document.querySelectorAll(selector);
        }
        

       this.remove = function (name) {
    
           var removeElems = cache[name];

            removeElems.eache(function () {// each - метод добавленный через прототип 

                this.parentNode.removeChild(this);
            });

           delete cache[name] ;
        
        }


    };


Часовой пояс GMT +3, время: 15:47.