Kružne reference na DOM objekte na HTML stranici izazivaju osipanje memorije

Prijevod članka Prijevod članka
ID članka: 830555 - Pregledajte proizvode na koje se odnosi ovaj članak.
Proširi sve | Sažmi sve

Na ovoj stranici

SIMPTOMI

Osipanje memorije događa se pri osvježavanju HTML stranice koja koristi Microsoft JScript kod s kružnim referencama na objekte u dokumentnom objektnom modelu (DOM-u) programa Microsoft Internet Explorer.

UZROK

Do tog osipanja memorije dolazi jer DOM objekti nisu JScript objekti. DOM objekti nisu u shemi zbirke smeća za označivanje i brisanje u JScriptu. Stoga se kružne reference između DOM objekata i rukovatelja JScriptom neće prekinuti dok preglednik potpuno ne prebriše stranicu. To osipanje memorije dogodit će se ako preglednik otvori novu web-stranicu ili ako se zatvori prozor preglednika.

RJEŠENJE

Da biste riješili taj problem, u Jscript kodu izbjegavajte kružne reference na DOM objekte programa Internet Explorer. Da biste zaobišli taj problem u primjeru koda pridodanom ovome članku u odjeljku "Dodatne informacije", unesite ovu promjenu:
function hookup(element)
{
    element.attachEvent( "onmouseover", mouse);
}
function mouse () 
{
}
Uz tu promjenu funkcija mouse nije objekt zatvaranja koji vodi do kružne reference.

STATUS

Microsoft je potvrdio da se ta programska pogreška pojavljuje u Microsoftovim proizvodima navedenima u odjeljku "Odnosi se na".

DODATNE INFORMACIJE

Koraci za ponavljanje postupka koji je doveo do problema

  1. Zalijepite sljedeći kod u program Notepad (Blok za pisanje), a zatim spremite datoteku kao Test.htm:
    <HTML>
    <HEAD>
    <script language="javascript">
    function initpage()
    {
    window.setTimeout("window.location.reload()", 500, "javascript");
    }
    </script>
    </HEAD>
    <body onload="initpage()" >
    <div class='menu' id='menu'></div>
    <script language='javascript'>
    hookup(document.getElementById('menu'));
    function hookup(element)
    {
    element.attachEvent( "onmouseover", mouse);
    	function mouse () 
    	{
    	}
    }
    </script>
    </body>
    </HTML>
    U tom kodu rukovatelj (funkcija mouse) ugniježđen je u poveznicu (funkcija hookup). Tim se rasporedom označava da se rukovatelj zatvara u djelokrugu pozivatelja (taj se raspored naziva i "zatvaranje"). Rukovatelj zadržava referencu na varijabilni element. U tom je slučaju varijabilni element HTML element div s parametrom ID koji je postavljen na menu. No element div poziva se na rukovatelj. Ta je referenca kružna.
  2. U programu Internet Explorer otvorite Test.htm.

    Obratite pozornost na to da se iskorištenost memorije u programu Windows Task Manager (Windows upravitelj zadataka) povećava svaki put kada se stranica osvježi.

REFERENCE

Dodatne informacije o primjerima osipanja memorije u programu Internet Explorer potražite na web-mjestu mreže Microsoft Developer Network (MSDN):
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ietechcol/dnwebgen/ie_leak_patterns.asp

Svojstva

ID članka: 830555 - Posljednja izmjena: 23. travnja 2007. - Revizija: 3.1
ODNOSI SE NA:
  • Microsoft Internet Explorer (Programming) 6.0
  • Microsoft Internet Explorer 5.5
  • Microsoft Internet Explorer 5.01
Ključne riječi: 
kbfix kbbug KB830555
Odricanje od odgovornosti za sadržaj zastarjelog članka baze znanja
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Pošaljite povratne informacije

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com