Заголовок документа



бет21/26
Дата15.03.2024
өлшемі465.78 Kb.
#495676
1   ...   18   19   20   21   22   23   24   25   26
JAVA SCRIPT-ОБЪЕКТІГЕ БАҒЫТТАЛҒАН СКРИПТІК БАҒДАРЛАМАЛАУ ТІЛІ-оқулық

Жадының жылыстауы


Тұйықталуда бір жағымсыз жанама әсер бар — олармен өте қарапайым Internet Explorer–та жадының жылыстауын алуға болады. JavaScript-та жадны босату "қоқыс жинаушының" көмегі арқылы жүреді — әрбір объектіні құру кезінде физикалық жад көлемі бөлінеді және бұл жад браузермен объектіге бірде-бір сілтеме қалмаған кезде босатылады. Объектілер орындау ортасында құрылғандар, осы ортамен өңделеді.
Браузердің HTML парақтарды тудыратын көптеген үлкен объектілермен ісімен бар - DOM объектілері ретінде. Браузер міндеті жүктелген жадты бөлу және босату.
Осы үшін Internet Explorer браузер өз қоқыс құрастырушысын пайдаланады, ол JavaScript құрастырушы емес. Сәйкес келмейтін екі құрастырушылардың жұмысында жадтың жылыстауын туындатуы мүмкін. Қашанда JavaScript объектісі арасындағы циклдық сілтеме және меншікті браузер объектісі пайда болған сайын,IE-да жадының
жылыстауы пайда болады. Мысалы:
function leakMemory() {
var el = document.getElementById('el'); var o = { 'el': el };
el.o = o;
}
Мысалда циклдік сілтеме жадының жылыстауына әкеледі. Браузер әзірге толық жүктелгенше, IE el және o-мен бөлінген жадыны босатпайды.
Жоғарыдағы мысалдың кодын, тіпті нақты жобада пайдаланылуға болады. Өйткені, жадының жылыстауы мәселесі қосымшалардың орындалуының үлкен мерзімімен және қосымшалардың жұмыс істейтін үлкен құрылымдар деректері немесе циклдарымен неғұрлым өзекті.
Әдетте, жылыстау соншалықты анық емес. Тұйықталу мүмкін жад жылыстауын байқаусызда тудыруы мүмкін:
function addHandler() {
var el = document.getElementById('el'); el.onclick = function() {
this.style.backgroundColor = 'red';
}
}
Бұл код клике кезінде элементтің түсін қызылға өзгертеді. Және жадының жылыстауын жасайды. Неге? el сілтемелері, байқамай жасырын ішкі функциямен құрылған тұйықталуға түскен. Бұл JavaScript (функциясы) объектісі және браузер объектісі (el) арасында циклдік сілтемені жасайды.
Осы қатені айналып өтудің бірнеше жолдары бар. Ең қарапайым бұл el айнымалыны мүлдем пайдаланбау:
function addHandler(){ document.getElementById('el').onclick = function(){
this.style.backgroundColor = 'red';
}
}
Мәселені шешу тәсілдерінің бірі, тұйықталудың басқа тұйықталуда болуы:
function addHandler() {
var clickHandler = function() { this.style.backgroundColor = 'red';
};
(function() {
var el = document.getElementById('el'); el.onclick = clickHandler;
})();
}
Ішкі функция бірден орындалады және clickHandler функциясының тұйықталуынан өз контексін жасырады.


Достарыңызбен бөлісу:
1   ...   18   19   20   21   22   23   24   25   26




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет