Toon posts:

[JS]Veel if's vervangen door iets sneller?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben momenteel bezig met een onsubmit functie. Deze werkt met 7 ifs om te checken of een waarde niet leeg is, en wel zo:
code:
1
2
3
4
    if(document.getElementById('nickname').value == ""){
        data_true = false;
        error = "Nickname not filled out.";
    }

Dit een 7-tal keer. Nu dat werkt allemaal lekker op dit 2.4GHz bakje, maar werkt dit niet ongelofelijk traag op een 500MHz bak? Waarschijnlijk wel, maar is dit ook op te lossen :? :x

PS sorry voor het noob-JS :$

  • André
  • Registratie: Maart 2002
  • Laatst online: 11-02 14:19

André

Analytics dude

7 if statements nemen echt hooguit een paar milliseconden in, dus dit hoeft je echt niet te optimaliseren ;) Zelfs een oude 8086 zou ze in een paar milliseconden uitvoeren.

Check voor de grap deze dingen eens, daar worden honderden berekeningen uitgevoerd in korte tijd:
http://www.xs4all.nl/~peterned/examples/dna.html
http://www.xs4all.nl/~peterned/examples/rotator.html
http://andrescholten.nl/dhtml/slideletters.html

En er is ooit een gek geweest :P die Lemmings heeft nagemaakt met javascript.

[ Voor 73% gewijzigd door André op 05-08-2006 21:53 ]


Verwijderd

Topicstarter
Ow ok, want bij php neemt dat wel wat serverload in. Natuurlijk is dat 'n ander verhaal door meerdere gebruikers enzo, maar toch maar even checken voor de veiligheid :) .Bedankt :) .

  • André
  • Registratie: Maart 2002
  • Laatst online: 11-02 14:19

André

Analytics dude

Als php aardig wat serverload vraagt op 7 if statements zou ik echt gaan kijken wat er mis is met je server.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Ik doe weinig met javascript, dus onderstaande kan foutjes bevatten. :P Als je checks er allemaal hetzelfde uitzien kun je zoiets proberen:
JavaScript:
1
2
3
4
5
6
7
var jouwArray = new Array("nickname", "password", "email" ..., "veldX");
for (i = 0; i < jouwArray.length; i++) {
  if(document.getElementById(jouwArray[i]).value == ""){
      data_true = false;
      error = jouwArray[i] + " not filled out.";
  }
}

Dat lost trouwens jouw "load" probleem niet op, maar het maakt wel je code een stuk korter. En zoals André al zegt bestaat dat probleem ook helemaal niet. :P Ook in PHP zou een simpel stel ifjes geen probleem moeten zijn, tenzij je heel erg gekke dingen doet. :o

[ Voor 3% gewijzigd door NMe op 05-08-2006 21:57 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Waarom gebruik je daar eigenlijk document.getElementById voor? :?
Je kant toch (en dat lijkt me logischer) het volgende doen?
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function checkForm()
{
    var nickname = document.naamform.nickname.value;
    if(nickname = '')
    {
        alert('Je hebt geen nickname ingevult');
        return false;
    }
    else
    {
        return true;
    }
}

  • André
  • Registratie: Maart 2002
  • Laatst online: 11-02 14:19

André

Analytics dude

De manier maakt niet zoveel uit. Waarom zou het niet met getElementById kunnen? In feite kan het op veel meer manieren.
JavaScript:
1
2
3
document.forms["naamform"].elements["nickname"].value;
document.getElementById("nickname").value;
document.getElementById("naamform").elements["nickname"].value;

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
@GJ-tje, wat is er mis met getElementById :?

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
function checkForm()
{
    var nickname = document.naamform.nickname.value;
    if (nickname == '')
    {
        alert('Je hebt geen nickname ingevult');
        return false;
    }

    return true;
}


= moet == zijn ;)

March of the Eagles


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Ik was de == idd even vergeten, typte het wat snel...

Ik zeg ook niet dat het niet (zou) werken, het lijkt mij alleen logischer om het op een andere manier te doen, waaronder de manier die ik bood... :)
JavaScript:
1
document.forms["naamform"].elements["nickname"].value; 
Zou ik dus uit logisch oogpunt eerder gebruiken dan getElementById... ;)

Misschien ben ik nu een topic-kaper, maar vraag het me gewoon af...
Wat is 'de' manier om het met DOM te doen dan?

[ Voor 39% gewijzigd door CH4OS op 05-08-2006 22:30 ]


  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Mag ik even weten waarom dat volgens jou logischer is?

/edit
Ok, vlug je post editen :p

[ Voor 25% gewijzigd door XWB op 05-08-2006 22:31 ]

March of the Eagles


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Hacku schreef op zaterdag 05 augustus 2006 @ 22:30:
Mag ik even weten waarom dat volgens jou logischer is?

/edit
Ok, vlug je post editen :p
Waarom het volgens mij logischer is? Zou zeggen kijk eens naar de code... ;) Dan geef je toch (min of meer) aan wat het doet? :) Weet dus gelijk dat het een waarde van het formulier is en is het dus makkelijker te debuggen, weet je gelijk waar je zijn moet... :)

  • Jimbolino
  • Registratie: Januari 2001
  • Laatst online: 13-02 16:07

Jimbolino

troep.com

als je
document.getElementById('nickname').value
vervangt door een variable, kan dat snelheidswinst opleveren.
Omdat je dan niet elke keer de getElementById functie uit hoeft te voeren.

The two basic principles of Windows system administration:
For minor problems, reboot
For major problems, reinstall


  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
GJ-tje schreef op zaterdag 05 augustus 2006 @ 22:32:
[...]

Waarom het volgens mij logischer is? Zou zeggen kijk eens naar de code... ;) Dan geef je toch (min of meer) aan wat het doet? :) Weet dus gelijk dat het een waarde van het formulier is en is het dus makkelijker te debuggen, weet je gelijk waar je zijn moet... :)
Een id is uniek, dus even ctrl + f en je hebt hem ook ? :p Maakt eigenlijk weinig uit (zoals reeds gezegd), ieder zijn manier :)

March of the Eagles


Verwijderd

Met mooiste vind ik zelf altijd om gewoon het form object mee te geven aan de validatie functie:

code:
1
2
function checkForm(frm) {
}

met
code:
1
<form onsubmit="checkForm(this);">


Dan kan er weinig mis gaan.

[ Voor 4% gewijzigd door Verwijderd op 05-08-2006 22:40 ]


  • Victor
  • Registratie: November 2003
  • Niet online
GJ-tje schreef op zaterdag 05 augustus 2006 @ 21:59:
Waarom gebruik je daar eigenlijk document.getElementById voor? :?
Je kant toch (en dat lijkt me logischer) het volgende doen?
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function checkForm()
{
    var nickname = document.naamform.nickname.value;
    if(nickname = '')
    {
        alert('Je hebt geen nickname ingevult');
        return false;
    }
    else
    {
        return true;
    }
}
Dat gaat sowieso al niet werken in een XHTML DOM.

Verder is getElementById() een hele geschikte methode om snel een element binnen je DOM te vinden, zeker één die aan veel verandering onderheving is. Niets mis mee dus.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat ik altijd grappig vindt aan dit soort 'checks' is dat ze (bijv.) een spatie, of enkel een "hyphen" (-) al pikken als "geldige" invoer. Trim op z'n minst de invoer van voorloop spaties en spaties aan de achterkant en kijk dan pas of er nog een bepaalde minimum lengte in de invoer zit en keur 'm op basis daarvan voorlopig goed. Vervolgens doe je een final check server-side. Hiermee voorkom je dat grapjassen die je JS omzeilen alsnog vage zooi in je DB jassen. En als je dan toch server-side checks doet kun je net zo goed de hele JS checks achterwege laten op enkele basics na. Onder basics versta ik dingen als effe vlug controleren of er een keuze is gemaakt voor (bijv.) een bepaald abonnement door een radio/checkbox aan te vinken en dat soort dingen.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

* crisp agrees with roonaan

door in je onsubmit handler alvast een reference mee te geven naar je formulier bespaar je je al een lookup en kan je in je handler je lookups verder beperken tot je formulier door gebruik te maken van de elements collectie.

Intentionally left blank

Pagina: 1