Ich starte ein Projekt mit jQuery.
Welche Fallstricke / Fehler / Missverständnisse / Missbräuche / Missbräuche hatten Sie in Ihrem jQuery-Projekt?
javascript
jquery
Flybywire
quelle
quelle
Antworten:
Sich des Leistungseinbruchs nicht bewusst sein und Selektoren überbeanspruchen, anstatt sie lokalen Variablen zuzuweisen. Beispielsweise:-
Eher, als:-
Oder noch besser mit Verkettung : -
Ich fand dies der aufschlussreiche Moment, als mir klar wurde, wie die Anrufstapel funktionieren.
Bearbeiten: Vorschläge in Kommentare aufgenommen.
quelle
var $label = $('#label');
Verstehen Sie, wie Sie den Kontext verwenden. Normalerweise durchsucht ein jQuery-Selektor das gesamte Dokument:
Sie können die Dinge jedoch beschleunigen, indem Sie in einem Kontext suchen:
quelle
[0]
.$('.myClass', ct);
oder wenn Sie wissen, dass ct eine Instanz von jQuery ist, können Sie findct.find(".myClass")
Verwenden Sie keine bloßen Klassenselektoren wie diese:
Dies wird am Ende jedes einzelne Element untersuchen, um festzustellen, ob es eine Klasse von "Schaltflächen" hat.
Stattdessen können Sie helfen, wie:
Das habe ich letztes Jahr aus Rebecca Murphys Blog gelernt
Update - Diese Antwort wurde vor über 2 Jahren gegeben und ist für die aktuelle Version von jQuery nicht korrekt . Einer der Kommentare enthält einen Test, um dies zu beweisen. Es gibt auch eine aktualisierte Version des Tests , die die Version von jQuery zum Zeitpunkt dieser Antwort enthält.
quelle
$('.b')
verwendet werden,document.getElementsByClassName('b')
wenn der Browser dies unterstützt. Wenn Sie dies jedoch tun,$('a.b')
werden alle übereinstimmenden Elemente mit der Klasseb
abgerufen und anschließend bestätigt, dass es sich um Anker in einem zweistufigen Vorgang handelt. Letzteres klingt für mich nach mehr Arbeit. Versuchen SieVersuchen Sie, anonyme Funktionen aufzuteilen, damit Sie sie wiederverwenden können.
quelle
(anonymous)
. Lesen Sie mehr über diesen Tipp hier: stackoverflow.com/questions/182630/jquery-tips-and-tricks/…Ich habe Hunderte von Codezeilen in der doc ready-Anweisung gesehen. Hässlich, unlesbar und unmöglich zu pflegen.
quelle
Wenn Sie die
$.ajax
Funktion für Ajax- Anforderungen an den Server verwenden, sollten Sie vermeiden, dascomplete
Ereignis zum Verarbeiten von Antwortdaten zu verwenden. Es wird ausgelöst, ob die Anforderung erfolgreich war oder nicht.Anstatt zu
complete
verwendensuccess
.Siehe Ajax-Ereignisse in den Dokumenten.
quelle
Animationsereignisse mit Callbacks "verketten".
Angenommen, Sie möchten einen Absatz animieren, der beim Klicken verschwindet. Sie wollten das Element anschließend auch aus dem DOM entfernen. Sie denken vielleicht, Sie können die Methoden einfach verketten:
In diesem Beispiel wird .remove () aufgerufen, bevor .fadeOut () abgeschlossen ist, wodurch Ihr allmählicher Fading-Effekt zerstört wird und das Element einfach sofort verschwindet. Wenn Sie einen Befehl erst nach Abschluss des vorherigen Befehls auslösen möchten, verwenden Sie stattdessen die folgenden Rückrufe:
Der zweite Parameter von .fadeOut () ist eine anonyme Funktion, die ausgeführt wird, sobald die .fadeOut () -Animation abgeschlossen ist. Dies führt zu einem allmählichen Ausbleichen und einem anschließenden Entfernen des Elements.
quelle
Wenn Sie dasselbe Ereignis mehrmals binden (), wird es mehrmals ausgelöst. Normalerweise gehe ich immer
unbind('click').bind('click')
nur, um in Sicherheit zu seinquelle
Missbrauche Plug-Ins nicht.
Meistens benötigen Sie nur die Bibliothek und möglicherweise die Benutzeroberfläche. Wenn Sie es einfach halten, ist Ihr Code auf lange Sicht wartbar. Nicht alle Plug-Ins werden unterstützt und gewartet, die meisten jedoch nicht. Wenn Sie die Funktionalität mithilfe von Kernelementen nachahmen können, empfehle ich sie dringend.
Plug-Ins lassen sich leicht in Ihren Code einfügen, sparen Zeit, aber wenn Sie etwas extra benötigen, ist es eine schlechte Idee, sie zu ändern, da Sie die möglichen Updates verlieren. Die Zeit, die Sie zu Beginn sparen, verlieren Sie später beim Ändern veralteter Plug-Ins.
Wählen Sie die Plug-Ins mit Bedacht aus. Abgesehen von Bibliothek und Benutzeroberfläche verwende ich ständig $ .cookie , $ .form , $ .validate und Thickbox . Im Übrigen entwickle ich meistens meine eigenen Plugins.
quelle
Fallstricke: Verwenden von Schleifen anstelle von Selektoren.
Wenn Sie nach der jQuery-Methode '.each' greifen, um über DOM-Elemente zu iterieren, fragen Sie sich, ob Sie stattdessen einen Selektor verwenden können, um die Elemente abzurufen.
Weitere Informationen zu jQuery-Selektoren:
http://docs.jquery.com/Selectors
Fallstricke: NICHT mit einem Tool wie Firebug
Firebug wurde praktisch für diese Art des Debuggens entwickelt. Wenn Sie mit Javascript im DOM herumspielen wollen, benötigen Sie ein gutes Tool wie Firebug, um sichtbar zu werden.
Weitere Informationen zu Firebug: http://getfirebug.com/
Weitere großartige Ideen finden Sie in dieser Episode des polymorphen Podcasts: (jQuery Secrets mit Dave Ward) http://polymorphicpodcast.com/shows/jquery/
quelle
Missverständnis der Verwendung dieser Kennung im richtigen Kontext. Zum Beispiel:
Und hier eines der Beispiele, wie Sie es lösen können:
quelle
Vermeiden Sie es, das gesamte DOM mehrmals zu durchsuchen. Dies kann Ihr Skript wirklich verzögern.
Schlecht:
Gut:
Schlecht:
Gut:
quelle
Speichern Sie $ (this) immer in einer aussagekräftigen Variablen, insbesondere in einer .each ()
So was
quelle
$self
oder,$this
wenn Sie zu faul sind, um an einen guten Variablennamen zu denken.Ähnlich wie Repo Man, aber nicht ganz.
Bei der Entwicklung von ASP.NET-Winforms mache ich das oft
das # Zeichen vergessen. Die richtige Form ist
quelle
Veranstaltungen
Klont keines der Ereignisse - Sie müssen alle neu binden.
Gemäß JP beginnen - clone () die Ereignisse neu, wenn Sie true übergeben.
quelle
Vermeiden Sie die mehrfache Erstellung derselben jQuery-Objekte
quelle
$this = $(this);
in einer separaten Zeile zu haben. Wenn Sie können (ohne$this
$(this).fadeIn().fadeIn();
Ich sage dies auch für JavaScript, aber jQuery, JavaScript sollte NIEMALS CSS ersetzen.
Stellen Sie außerdem sicher, dass die Site für jemanden mit deaktiviertem JavaScript verwendbar ist (heute nicht mehr so relevant wie früher, aber immer schön, eine vollständig nutzbare Site zu haben).
quelle
Zu viele DOM-Manipulationen vornehmen. Obwohl die Methoden .html (), .append (), .prepend () usw. aufgrund der Art und Weise, wie Browser Seiten rendern und neu rendern, großartig sind, führt eine zu häufige Verwendung zu Verlangsamungen. Oft ist es besser, das HTML als Zeichenfolge zu erstellen und es einmal in das DOM aufzunehmen, als das DOM mehrmals zu ändern.
Anstatt:
Versuche dies:
Oder auch dies ($ wrapper ist ein neu erstelltes Element, das noch nicht in das DOM eingefügt wurde. Das Anhängen von Knoten an dieses Wrapper-Div führt nicht zu Verlangsamungen, und am Ende hängen wir $ wrapper mit nur einer DOM-Manipulation an $ parent an ):
quelle
Verwenden der ClientID, um die "echte" ID des Steuerelements in ASP.NET-Projekten abzurufen.
Wenn Sie jQuery in SharePoint verwenden, müssen Sie außerdem jQuery.noConflict () aufrufen.
quelle
Übergeben von IDs anstelle von jQuery-Objekten an Funktionen:
Das Übergeben eines verpackten Sets ist weitaus flexibler:
quelle
Übermäßiger Gebrauch der Verkettung.
Sieh dir das an:
Erläuterung
quelle
Verwenden Sie Strings im Akkumulatorstil
Mit dem Operator + wird eine neue Zeichenfolge im Speicher erstellt und der verkettete Wert zugewiesen. Erst danach wird das Ergebnis einer Variablen zugeordnet. Um die Zwischenvariable für das Verkettungsergebnis zu vermeiden, können Sie das Ergebnis mit dem Operator + = direkt zuweisen. Langsam:
Schneller:
Primitive Operationen können schneller sein als Funktionsaufrufe
Erwägen Sie die Verwendung einer alternativen primitiven Operation über Funktionsaufrufe in leistungskritischen Schleifen und Funktionen. Langsam:
Schneller:
Weitere Informationen finden Sie unter Best Practices für die JavaScript-Leistung
quelle
Wenn Benutzer HTML-Entitäten in ihrem Browser sehen sollen, verwenden Sie 'html' anstelle von 'text', um eine Unicode-Zeichenfolge einzufügen, z.
quelle
meine zwei Cent)
Wenn Sie mit jquery arbeiten, müssen Sie sich normalerweise nicht ständig um die tatsächlichen DOM-Elemente kümmern. Sie können so etwas schreiben -
$('div.mine').addClass('someClass').bind('click', function(){alert('lalala')})
- und dieser Code wird ohne Fehler ausgeführt.In einigen Fällen ist dies nützlich, in einigen Fällen - überhaupt nicht, aber es ist eine Tatsache, dass jquery dazu neigt, leer-Streichhölzer-freundlich zu sein. Noch,
replaceWith
wird jedoch ein Fehler wenn versucht wird, ihn mit einem Element zu verwenden, das nicht zum Dokument gehört. Ich finde es eher kontraintuitiv.Eine weitere Gefahr ist meiner Meinung nach die Reihenfolge der Knoten, die von der prevAll () -Methode zurückgegeben werden
$('<div><span class="A"/><span class="B"/><span class="C"/><span class="D"/></div>').find('span:last-child').prevAll()
. Eigentlich keine große Sache, aber wir sollten diese Tatsache berücksichtigen.quelle
Wenn Sie Ajax in vielen Daten planen, z. B. 1500 Zeilen einer Tabelle mit 20 Spalten, sollten Sie nicht einmal daran denken, diese Daten mit jQuery in Ihren HTML-Code einzufügen. Verwenden Sie einfaches JavaScript. jQuery ist auf langsameren Computern zu langsam.
Außerdem erledigt jQuery die Hälfte der Zeit Dinge, die dazu führen, dass es langsamer wird, z. B. den Versuch, Skript-Tags im eingehenden HTML-Code zu analysieren und sich mit Browser-Macken zu befassen. Wenn Sie eine schnelle Einfügegeschwindigkeit wünschen, bleiben Sie bei einfachem JavaScript.
quelle
.innerHTML
dies aus. Wenn Sie jedoch so etwas wie Google Mail erstellen, bei dem der Benutzer den Tab stundenlang offen hält, müssen Sie nur in die Kugel beißen und sich mit der zusätzlichen Langsamkeit befassen. Für Neugierige ist hier genau das, was jQuery's.html()
macht: james.padolsey.com/jquery/#v=1.4&fn=jQuery.fn.htmlVerwenden von jQuery in einem kleinen Projekt, das mit nur wenigen Zeilen gewöhnlichem JavaScript abgeschlossen werden kann.
quelle
couple of lines of ordinary JavaScript
Sicher kein Problem. Aber wann ist es jemals genau das? Leute, die sagen "warum nicht Vanille-Javascript verwenden?" Ich bin noch nicht hart genug vom IE gebissen worden ... und ganz zu schweigen davon, wie viel Cruft- und Boilerplate-Code Sie schreiben müssen, um einfache Dinge in einfachem alten JS zu tun.Ereignisbindung nicht verstehen. JavaScript und jQuery funktionieren unterschiedlich.
Auf vielfachen Wunsch ein Beispiel:
In jQuery:
Ohne jQuery:
Grundsätzlich sind die für JavaScript erforderlichen Hooks nicht mehr erforderlich. Verwenden Sie also Inline-Markups (onClick usw.), da Sie einfach die IDs und Klassen verwenden können, die ein Entwickler normalerweise für CSS-Zwecke nutzen würde.
quelle