[JS] Verschil tussen eval en js-element uitvoer

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07 12:00

MrDummy

Nog steeds gek op anime...

Topicstarter
Ik vraag me af wat de eigenlijke verschil tussen twee mogelijkheden in dynamisch javascript op de website.
De eerste mogelijkheid is met toevoegen van [javascript] velden via AppendChild. Daarmee wordt een blok aan de pagina toegevoegd en uitgevoerd.

De tweede mogelijkheid is uitvoeren van eval() code waarbij de code meteen wordt uitgevoerd.

Ik heb beide getest en werken goed. Maar welke gevolgen zijn er eigenlijk op lange termijn draaien van website, met steeds continu bijwerken van pagina?

Welke gevolgen zijn er met b.v. geheugen, performance en stabiliteit?
Zo wil ik weten wat er gebeurt na vele toegevoegde js-elementen, terwijl bij eval() de code gewoon direct wordt uitgevoerd zonder toe te voegen. Maar heeft eval() verder geen bijzonderheden zoals toename van geheugengebruik of zo op lange termijn gezien?

Er is ook derde optie met innerHTML methode om pagina te veranderen. Dat is alleen htmlcode, en geen executen van andere zaken, zoals variabele waarde veranderen. Dat zal niet veel geheugen verbruiken denk ik.

Acties:
  • 0 Henk 'm!

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 20-08 09:22

Clay

cookie erbij?

't kan ook nog anders:
JavaScript:
1
uitvoerbareFunctie = new Function(arg1, arg2, ... , argN, functionBody);


Alles define je als strings, en de args kan je binnen de functionbody gebruiken. Het resultaat is een uitvoerbare functie die in de scope draait van het ding waar je em aanplakt;

JavaScript:
1
2
3
4
5
6
var test = {
    lorem: new Function('alert(this.ipsum)'),
    ipsum: 'hello world'
}

test.lorem();

[ Voor 56% gewijzigd door Clay op 28-04-2008 09:18 ]

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


Acties:
  • 0 Henk 'm!

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07 12:00

MrDummy

Nog steeds gek op anime...

Topicstarter
Ik ben bezig met de informatie systeem dat met javascript dynamisch ververst wordt om x aantal seconden.
Op dit moment wordt er gebruik gemaakt van appendchild js-elementen.
Ik wil alleen weten welke gevolgen dat heeft als ik boel 3 dagen lang laat draaien. Wat zal er gebeuren? Zit er dan ruim 25.000 toegevoegde js-elementen in de geheugen en kan de zaak sloom maken, of valt dat nog mee?

En als ik 25.000 keer eval() laat uitvoeren, wordt geheugen dan ook net zo vol of is dat gelijkwaardig aan 1 js-element verbruik?

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28
25.000x appendchild zal inderdaad voor 25.000 toegevoegde elementen zorgen. Dat kan behoorlijke invloed hebben op het geheugengebruik.

Eval zou hier geen last van moeten hebben, tenzij je natuurlijk iedere keer een nieuwe interval oid start in de eval.

Clay's methode is de mooiste natuurlijk. Aangezien het binnen z'n eigen scope draait zou je niet of nauwelijks geheugenproblemen moeten krijgen. Browserbugs daargelaten.

Maar ik moet eerlijk zeggen dat dit op theorie gebaseerd is, want heb nog nooit een dergelijke applicatie zo lang laten draaien :P

[ Voor 16% gewijzigd door Bosmonster op 28-04-2008 14:54 ]


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Je zou ook kunnen kijken of je met behulp van removeChild de nodes weer kan verwijderen, nadat je script in de betreffende node is uitgevoerd. Of dat geheugenproblemen oplevert in sommige browsers weet ik niet, in theorie niet in ieder geval.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Memory management in Javascript moet je door een framework af laten handelen als je bang bent voor vage quirks... ;)

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
SchizoDuckie schreef op maandag 28 april 2008 @ 22:43:
Memory management in Javascript moet je door een framework af laten handelen als je bang bent voor vage quirks... ;)
En dan heel dat framework inladen (wat ook weer geheugen inneemt),. omdat je enkel gebruik wilt maken van een bepaalde functie? Ik denk dat je dan beter af kan kijken hoe die functie in het framework werkt en dat toepassen in je eigen code.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • MrDummy
  • Registratie: April 2000
  • Laatst online: 25-07 12:00

MrDummy

Nog steeds gek op anime...

Topicstarter
Ik ga eval() nemen omdat het gewoon execute is van code, en geen boel elementen erin gooit. Dat lijkt me eenvoudiger en ook meer geheugen safe.

Heb zaak al draaiend gekregen en daar ben ik tevreden mee.
Pagina: 1