хэширование ДОМ обьектов
Щас для курсовой пишу игру (язык дали любой на выбор поэтому решил на 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, время: 17:29. |