56 Stimmen

Welche Anti-Patterns gibt es für JavaScript?

Ich finde, dass es schwieriger zu lernen ist, was man nicht tun sollte, als was man tun sollte.

Meiner Erfahrung nach unterscheidet sich ein Experte von einem Fortgeschrittenen durch die Fähigkeit, zwischen verschiedenen, scheinbar gleichwertigen Möglichkeiten, dieselbe Sache zu tun, zu wählen.

Also, wenn es um JavaScript geht welche Dinge Sie nicht tun sollten und warum ?

Ich kann viele davon für Java finden, aber da der typische Kontext von JavaScript (in einem Browser) ganz anders ist als der von Java, bin ich gespannt, was dabei herauskommt.

7 Stimmen

Das Wenige, was ich darüber gesehen habe, zeigt, dass die ganze Sprache ein Anti-Muster ist. Ich bin immer wieder erstaunt, dass Sun nicht wegen der Verschmutzung der Marke "Java" geklagt hat.

5 Stimmen

@Paul: wirklich? Was gilt weithin als die beste verfügbare Skriptsprache? Sie ist dynamisch, erweiterbar, hat erstklassige Funktionen und die beste Closure-Implementierung, die ich kenne. Du trollst dich :/

1 Stimmen

Nein, das ist kein Trolling. Es sieht für mich unordentlich und undiszipliniert aus. Der einzige Grund, warum sie "als die beste verfügbare Skriptsprache" gilt, ist, dass sie die einzige Skriptsprache ist, die in jedem Browser ohne die Installation von Plugins verfügbar ist.

7voto

Greg Dean Punkte 27938

Jede Verwendung von "mit

with (document.forms["mainForm"].elements) {
input1.value = "Schrott";
input2.value = "Schrott"; }

0 Stimmen

Ich frage mich, ob dies aufhören wird, ein Problem zu sein, wenn wir bessere Code-Analyse-Tools für Javascript bekommen

1 Stimmen

Siehe hier: stackoverflow.com/questions/61552/ für eine Diskussion über "with"; IMHO gibt es mindestens eine gültige Verwendung dafür, wahrscheinlich mehr... aber als ein Mittel der Umfangskontrolle, nicht eine Bequemlichkeit für die Änderung von Objektmitgliedern.

5voto

scunliffe Punkte 60080

Jede Bezugnahme auf

document.all

in Ihrem Code, es sei denn, es ist in einem speziellen Code, nur für IE, um einen IE-Bug zu überwinden. ( Husten document.getElementById() Husten )

5voto

Swaff Punkte 13338

Schlechte Verwendung der Klammerpositionierung bei der Erstellung von Anweisungen

Sie sollten immer eine geschweifte Klammer nach der Anweisung setzen, da das Semikolon automatisch eingefügt wird.

Zum Beispiel dies:

function()
{
    return
    {
        price: 10
    }
}

unterscheidet sich stark davon:

function(){
    return{
        price: 10
    }
}

Denn im ersten Beispiel fügt Javascript ein Semikolon für Sie ein und lässt Sie mit diesem zurück:

function()
{
    return;    // oh dear!
    {
        price: 10
    }
}

Verwendung von setInterval für potenziell lang laufende Aufgaben.

Sie sollten setTimeout anstelle von setInterval verwenden, wenn Sie etwas wiederholt tun müssen.

Wenn Sie setInterval verwenden, aber die Funktion, die im Timer ausgeführt wird, nicht beendet ist, wenn der Timer das nächste Mal tickt, ist das schlecht. Verwenden Sie stattdessen das folgende Muster mit setTimeout

function doThisManyTimes(){
    alert("It's happening again!");
}

(function repeat(){
    doThisManyTimes();
    setTimeout(repeat, 500);
})();

Dies wird sehr gut erklärt durch Paul Irisch auf seinem 10 Dinge, die ich aus der jQuery-Quelle gelernt habe Video

2 Stimmen

"If you use setInterval, but the function that is executed in the timer is not finished by the time the timer next ticks, this is bad." Warum ist das schlecht? Was passiert?

0 Stimmen

@Kirk Das hängt davon ab, was die Funktion tut. Wenn die Funktion die Ansicht ändert und dann eine Ajax-Anfrage initiiert, deren Callback etwas mit der Ansicht macht, wäre es höchst unerwünscht, dass diese Sequenz nicht synchron erscheint. Zum Beispiel Bestandsdaten.

0 Stimmen

Javascript ist ereignisgesteuert und alles in einem Ausführungskontext geschieht in einem Thread in der Reihenfolge, in der es in die Warteschlange gestellt wurde. Die Verwendung von setInterval mit einer Funktion, die sehr lange braucht, hat keine negativen Folgen - es ist absolut in Ordnung. Es wird kein anderer Code "unterbrochen". Es bedeutet lediglich, dass der nächste Aufruf der Funktion verzögert wird, bis der aktuelle Aufruf beendet ist.

4voto

Allain Lalonde Punkte 88365

Keine Verwendung eines gemeinschaftsbasierten Frameworks für sich wiederholende Aufgaben wie DOM-Manipulation, Ereignisbehandlung usw.

0 Stimmen

Meine persönliche Wahl wäre jQuery, aber das eigentliche Framework spielt kaum eine Rolle. Solange es nicht hausgemacht ist.

6 Stimmen

Ich bin da irgendwie anderer Meinung - manchmal ist eine spezielle Lösung besser als eine allgemeine, und ich habe ziemlich viele meiner eigenen JS, die ich für besser als jQueries-Äquivalent halte. Möglicherweise sollte ich dieses Zeug zu jQuery tatsächlich geben, aber der Punkt ist, die Masse sind nicht immer richtig.

1 Stimmen

Dann sind wir uns einig, dass wir uns nicht einig sind :) Selbst wenn Ihr persönlicher Rahmen besser geeignet ist, erhalten Sie die Tests, die Sie durchführen müssten, durch einen gemeinschaftsbasierten Ansatz "kostenlos".

0voto

Joseph Lust Punkte 18000

Eine wirksame Zwischenspeicherung wird nur selten vorgenommen:

  • Speichern Sie keine Kopie der Bibliothek (jQuery, Prototype, Dojo) auf Ihrem Server, wenn Sie eine gemeinsam genutzte API verwenden können wie Googles Bibliotheken-API um das Laden von Seiten zu beschleunigen
  • Kombinieren und Minifizieren alle Ihre Skripte, die Sie können, in einem
  • Utilisez mod_expires allen Skripten eine unendliche Cache-Lebensdauer zu geben (kein erneuter Download)
  • Versionieren Sie Ihre Javascript-Dateinamen, so dass eine neue Aktualisierung von den Clients übernommen wird, ohne dass sie neu geladen/gestartet werden müssen (z. B. myFile_r231.js, oder myFile.js?r=231)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X