2009-06-30 3 views
5

Ich habe eine Website erstellt. Irgendwann fiel mir auf, dass das IE-Display etwas kaputt war und Chrome alles außer dem Body-Tag (leer) gerendert hatte, und FF sah alles gut aus.Gibt es einen guten Grund für Javascript inline zu sein

Nachdem ich meine Tastatur in den Raum geworfen und meinen Kopf gegen meine Maus gedrückt hatte, entdeckte ich das Problem. Ich hatte verlassen (fragen Sie nicht, wie oder warum, muss ein blitzschneller Schnitt und Einfügen Fehler gewesen sein) ein HTML-Kommentar nicht in einem Inline-Skript-Block geschlossen.

<script type="text/javascript"> 
     <!-- 
     ... 
    </script> 

Ich vermute (nicht getestet) würde das Problem entweder nicht kommen, oder sich in einem weit auffälliger Weise manifestiert, wenn das Skript extern war. So, jedenfalls habe ich gedacht, gibt es jemals eine Zeit, in der du wirklich einen guten Grund hast, Inline-Skripte zu schreiben?

+4

Es macht keinen Sinn, HTML-Kommentare in Skript-Tags zu verwenden. Sie wurden benötigt, als Netscape Navigator 2 neu war (um 1996), um zu verhindern, dass ältere Browser das Skript als Text anzeigen. Das ist seit über zehn Jahren kein Problem mehr, also machen Sie sich keine Sorgen um sie. – NickFitz

+0

ja ich weiß. Es war ein kompletter Fehler. Ich benutze sie nicht in js, deswegen habe ich erwähnt, dass es das Ergebnis einer ausschneiden-und-pasten-Raserei gewesen sein muss. :-(dh DOH! –

+0

mögliches Duplikat von [Wann sollte ich Inline vs. External Javascript verwenden?] (http://stackoverflow.com/questions/138884/when-should-i-use-inline-vs-external-javascript) – outis

Antwort

9

Nr. Schreiben Unobtrusive Javascript.

+2

Ich bin auch ein großer Fan von unaufdringlichen Javascript –

+2

Einige Frameworks, um Ihnen den Einstieg zu erleichtern sind: jQuery, YUI, Prototyp, MooTools, Dojo – Travis

+0

Es ist nicht unmöglich, unaufdringliche Javascript ohne ein gutes Framework wie Sie schreiben aufgelistet, aber warum sollten Sie wollen? :) –

3

Wenn Sie möchten, dass Ihr Javascript so früh wie möglich ausgeführt wird, kann es sinnvoll sein, Inline-Javascript einzuschließen, da es ausgeführt wird, bevor andere HTTP-Anforderungen unbedingt abgeschlossen wurden.

Und in einigen Fällen enthalten Sie Javascript von einem Drittanbieter und Sie haben nicht wirklich eine Wahl. Einige Ad-Systeme, sowie Google Analytics, kommen mir in den Sinn.

+2

Ich lege den Google Analytics-Code immer in eine separate Datei. Ich sehe keinen Grund dafür. – jeroen

2

Wenn das Skript muss dynamisch generiert werden (zB durch eine PHP oder ASP.NET MVC Seite) würde ein Grund sein, es zu haben inline :-)

+0

Setzen Sie einfach eine Erweiterung wie .phpjs auf Ihren Server, um von PHP verarbeitet zu werden und als Text/Javascript zu dienen. Oder einfach nur PHP zu verarbeiten .js Punkt, wenn die Leistung keine Sorge ist. – Macha

+1

Sogar noch, es ist viel besser, eine separate PHP-Datei mit den richtigen Headern zu haben (und in der Tat gibt es Möglichkeiten, php lesen .js-Dateien für PHP-Code). Es gibt sehr wenige Zeiten, in denen JavaScript tatsächlich auf der Seite vorhanden sein muss, und die meisten davon können vermieden werden, wenn Dinge in diesem Sinne geschrieben werden. – cwallenpoole

+0

Wenn es eine Situation gibt, die dynamisch generiertes JavaScript benötigt, würde ich stattdessen Ajax verwenden. –

0

Anfälligkeiten Die meisten XSS kann nur inline mit Hilfe von Javascript ausgenutzt werden.

0

Es ist nicht unbedingt ein Grund, aber die Seiten werden schneller geladen. Zu diesem Zweck möchten Sie manchmal, auch wenn Sie das Skript in eine andere Datei schreiben, auf der Clientseite als Inline angezeigt werden.

+0

Wenn es auf vielen Seiten benötigt wird, wird dieser Vorteil bald wieder rückgängig gemacht. Wenn es sich um eine Datei handelt, kann sie zwischengespeichert werden. Im Vergleich zum Caching ist das Inlining minimal. – Macha

+0

Im Allgemeinen werden nur seitenspezifische Dinge inline angezeigt, aber es hängt auch wirklich vom Netlag vs. Durchsatz für Ihre Site ab. Da die meisten Browser auf Anfrage überprüfen, ob eine Datei neuer ist, gibt es immer noch einen leichten Treffer, wenn Sie nicht inline sind. Ich benutze meistens nicht Inlining, ich sage nur. – stevedbrown

2

Hängt davon ab, wie viel JS Sie schreiben möchten. Wenn Sie viele Unterstützungsroutinen schreiben (viele Validierungsprüfungen, Textverarbeitung, Animation und Effekte), dann ist es sinnvoll, den Code in einer separaten Datei zu speichern. Dies ermöglicht die Wiederverwendung von Code und entfernt viel Junk von Ihrer HTML-Seite.

Auf der anderen Seite gibt es keine Notwendigkeit, 10 Zeilen Code oder eine einzelne Funktion (ein Refresh JS kommt in den Sinn) in einer separaten Datei. Es wird auch etwas schneller geladen, da der Browser keine zusätzliche HTTP-Anfrage zum Herunterladen der separaten JS-Datei machen muss.

+0

Wenn es auf vielen Seiten benötigt wird, wird dieser Vorteil bald wieder rückgängig gemacht. Wenn es sich um eine Datei handelt, kann sie zwischengespeichert werden. – Macha

0

Ich platziere Javascript manchmal in Seiten, die teilweise neu geladen werden (um zB einige Ereignisse an neu hinzugefügte Formularfelder zu binden) und/oder Seiten, die ein einzigartiges Javascript verwenden, das ich auf keiner anderen Seite benutzen werde.

0

Viele externe Skripts können die Seite letztendlich verlangsamen, da der Browser jede Datei einzeln aufrufen muss. Die Kombination des JavaScript in einer Datei oder in der Seite selbst kann dieses Problem manchmal beheben.

Auf der anderen Seite, glaube ich, der Browser kann eine Skriptdatei cachen, sobald es zum ersten Mal aufgerufen wurde, also wenn Sie eine Menge des gleichen Codes auf Ihrer Website haben, ist extern der Weg zu gehen.

+0

Ich mag deine Idee, alles auf eine Seite zu laden. Sie könnten einige der bereits erwähnten Ideen kombinieren, um dies zu tun. Erstellen Sie beispielsweise alle JavaScript-Dateien in mehreren unterschiedlichen JS-Dateien, und laden Sie dann alle mit PHPs include_once auf einer Seite.Somit haben Sie den Vorteil, mehrere .js-Dateien bearbeiten zu können, aber Sie haben auch den Vorteil, dass nur eine Seite für den Browser lesbar ist. – cwallenpoole

0

Ich arbeite viel in etwas namens Flex, das XML und ActionScript kombiniert, um den endgültigen Bytecode zu erstellen. Es ist IMMER Best Practice, um die beiden so viel wie möglich zu trennen.Auf diese Weise können Sie die Ansicht (die HTML oder MXML in meinem Fall) vom Controller (dem Skript) sehr klar und einfach trennen. Das bedeutet auch, dass Sie sich keine Gedanken machen müssen, dass Sie fünf Dateien für eine Zeile durchsehen müssen von Code - Ihr gesamter Code ist an einem Ort.