хэширование ДОМ обьектов
Щас для курсовой пишу игру (язык дали любой на выбор поэтому решил на js) , пишу на чистом js и решил написать не лиж бы работало(как я всегда делал все курсовые:) ), а по человечески.
И решил учесть проблемы с утечкой памяти что бы их избежать решил сделать что то на подобие хэша jquery. вот как я это понимаю <!DOCTYPE HTML> <html> <head> </head> <body> <div ></div > <script> var hash = []; hash["elem"] = document.body.children[0] var obj = { elem:"elem", innerHTML: function (text) { var elem = hash[this.elem];//обращение к элементу elem.innerHTML = text; elem = null; } }; obj.innerHTML("one"); </script> </body> </html> вспомнил как обьяснялось в учебнике http://learn.javascript.ru/memory-le...течками . Правильно? |
Нафиг так заморачиваться с древними браузерами - это почти не актуально уже. Лучше напиши игру, используя <canvas>. Всяк полезнее, чем лечить болячки динозавров.
|
Цитата:
Цитата:
Цитата:
я сам не пожалел, что начал изучать canvas. классная штука! |
Цитата:
Особенно это видно если на долго оставить социальные сети открытыми(твиттер, вк). Так я и так на canvas делаю. П.с вы наверно не совсем понимаете что такое утечка памяти, вот тут хорошо описанно http://learn.javascript.ru/memory-management. |
А насчет моего вопроса может кто то ответить?
|
cyber, я прекрасно понимаю, что такое утечки памяти в браузерах, но сам подумай, если их так хорошо видно в твиттере и вк, не значит ли, что всем пох на них?:) Тем более, если ты делаешь игру на canvas, значит ты не будешь создавать/удалять DOM-элементы. Так откуда у тебя взяться утечкам?
|
Ну почти), ты на верном пути...=)
Только детальнее и расширенее делай. Чтобы не возникло нюансов. |
Цитата:
А с хэшем я хочу в общем по практиковаться это пригодиться и вдругих проектах. |
Цитата:
|
Цитата:
|
Цитата:
-нужен элемент обращаемся к нему через hash -удаляем его со страници -удаляем с хэша все правильно? |
Цитата:
|
melky,
в данный момент это проблем не вызывает пока пишешь один=) нужно будет как попробывать переписать через prototype методы удаления из дом(я понимаю что такого лучше не делать но все же:)). |
вот как замутил
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; } }; |
Цитата:
главное - цель иметь. если бы я не пытался сделать на нём эту игру, фиг бы у меня что получилось - эти кружочки, квадратики рисовать очень скучно. |
Кстати нашел книгу на канве вроде норм(на англ), если есть желающие могу выложить.
|
Цитата:
|
Цитата:
<!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> |
Цитата:
пора забивать на седня и идти пить пиво=) |
переделал вот так
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] ; } }; |
Цитата:
Array.prototype.each = function (fnc) { var leng = this.length; for(var i = 0;i< leng;i++) { fnc.call(this[i]); } }; писать циклы это скучно:haha: |
Цитата:
|
стоп , есть такой метод each ?
|
наше, http://es5.javascript.ru/x15.4.html#x15.4.4.18 .
Мое оправдание: слово each короче чем forEach :lol: |
так ладно пошел удалять свой маразм=)
<!DOCTYPE HTML> <html> <head> </head> <body> <script> Array.prototype.each = function (fnc) { var leng = this.length; for(var i = 0;i< leng;i++) { fnc.call(this[i]); } }; var arr = []; for(var i = 0; i< 200;i++){ arr.push(i); } function speed(fnc) { var d = new Date(); for(var i = 0;i< 10000;i++)fnc(); return new Date() -d ; } function myEach() { var sum = 0; arr.each(function(){ sum+=this; }); } function es5() { var sum = 0; arr.forEach(function(num){ sum +=num; }); } alert("My "+ speed(myEach)); alert("es5 "+ speed(es5)); </script> </body> </html> |
кстати еще и не плохая кроссбраузерность
https://developer.mozilla.org/en-US/.../Array/forEach |
Часовой пояс GMT +3, время: 19:28. |