2012-04-11 6 views
1

wandert dir vor, wenn es sinnvoll ist, zu verwenden, wenn Aussagen wie unten in jquery Dokument-Ready-Funktion wird nur, wenn auf einer bestimmten Seite gefeuert Skript, um sicherzustellen, ..Ist es sinnvoll, if-Anweisungen zu verwenden, um seitenabhängigen Code mit jQuery zu trennen?

if(window.location.href.indexOf("our-team")>= 0){ 
      if(window.location.hash) { 
       var hash = window.location.hash; 
       $('#teamMembers div:not('+hash+')').hide(); 
       $("#teamMenu .imgHolder").removeClass('active'); 
       $('a[href='+hash+']').closest(".imgHolder").addClass('active'); 
      } 
      else { 
       $('#teamMembers div:not(#member1)').hide(); 
      } 
     } 

Dies ist wahrscheinlich nicht sehr effizient, aber die if-Anweisung erforderlich, um das Ausführen des Skripts zu stoppen, wenn die aktuelle Seite unser Team nicht in der URL enthält.

Irgendwelche Ideen Leute?

Antwort

1

Sie erhalten die beste Leistung, wenn Sie auf Seiten, auf denen diese Elemente nicht vorhanden sind, nicht viele Selektoroperationen ausführen. Wenn es also leicht ist, diese Selektoroperationen durch Überprüfen der URL oder einer anderen schnellen Überprüfung herauszufiltern, kann dies aus Leistungsgründen wünschenswert sein.

Persönlich bevorzuge ich Seitenarten mit einem Klassennamen auf dem Body-Tag zu identifizieren, anstatt die URL zu untersuchen. Das bedeutet, dass Sie eher nach dem erwarteten Inhalt als nach dem Inhalt suchen. Wenn jemand, der die Website verwaltet, beschließt, das URL-Layout oder die URLs zu ändern, hängt Ihr Code nicht davon ab.

if ($(document.body).hasClass("ourteam")) { 
    if (window.location.hash) { 
     var hash = window.location.hash; 
     $('#teamMembers div:not('+hash+')').hide(); 
     $("#teamMenu .imgHolder").removeClass('active'); 
     $('a[href='+hash+']').closest(".imgHolder").addClass('active'); 
    } else { 
     $('#teamMembers div:not(#member1)').hide(); 
    } 
} 

Technisch gesehen, die erste if-Anweisung ist nicht erforderlich, wenn keiner der Wähler Sie in Seiten existieren verwenden, die Sie nicht wollen, zu verarbeiten. Es ist jedoch nicht effizient, 4-5 zusätzliche Selektoroperationen auf vielen Seiten auszuführen, auf die sie nicht angewendet werden. Und wenn jede Seite diese Art von Code im allgemeinen JS hat und somit 4-5 Operationen * 50 Seiten hat, dann wäre das eine Menge verschwendeter Selektoroperationen und könnte die Seitenleistung wirklich beeinflussen. Je mehr Seiten Sie haben, desto größer ist die Wahrscheinlichkeit, dass Sie einen Selektor auf einer anderen Seite wiederholen und feststellen, dass sich der JS von einer Seite aus auch auf eine andere Seite auswirkt.

+0

Vielen Dank, dies hat ein paar Dinge für mich geklärt, ich habe alternative Methoden wie verwendet. 'Code'if (. $ ('# Div') Länge) { jQuery ('# div') functionName- ({ // Stuff hier }). } 'code' ... Würde' code' if ($ (document.body) .hasClass ("someClass")) 'code' Diese Anweisung wäre effizienter? – madmatuk

+0

'if ($ (document.body) .hasClass ("ourteam"))' sehr effizient ist, weil es keine Wähler Operationen sind. 'document.body' ist ein bekanntes Objekt, so dass nur eine Eigenschaft von diesem bekannten Objekt abgerufen wird. 'If ​​($ (‚# div‘). Länge)' weil intern wahrscheinlich nicht schlecht, es wird ein 'document.getElementById („div“)' sein, die eine Auswahloperation, sondern ist einer der schneller diejenigen. Wenn Sie die Leistung der beiden vergleichen möchten, müssen Sie eine Reihe von Browsern vergleichen, um sie zu messen. – jfriend00

+0

Großartig, danke für Ihre Erklärung. – madmatuk

Verwandte Themen