2012-04-12 9 views
1

In meiner Grails-App verwenden wir jQuery. Ich schließe jquery auf die notwendigen Seiten mitGrails mit JavaScript-Bibliothek

<g:javascript library="jquery"/> 

Wenn wir JavaScript-Bibliotheken entscheiden sich ändern, ich brauche jede Seite zu aktualisieren. Ich weiß, dass ich das in das Layout einfügen kann, aber die Bibliothek wird nicht auf jeder Seite benötigt, so dass es verschwenderisch erscheint.

Gibt es einen typischen Weg in Grails, an einem Ort anzugeben, was die Standard-Javascript-Bibliothek sein sollte, und dann einfach diesen Standard einzuschließen, ohne anzugeben, dass es jquery (oder was auch immer) auf jeder Seite ist?

+0

Haben die Benutzer jQuery nicht bereits im Cache gespeichert, wenn sie eine Ihrer Seiten erreicht haben, die dies erfordern? I.e. Es würde nicht zu viel Seitengewicht hinzufügen, selbst wenn Sie es in das Hauptlayout einfügen (also auf jeder Seite). Nur ein Gedanke. – Marc

Antwort

3

Da die meisten Browser Dinge wie JavaScript-Bibliotheken stark zwischenspeichern, ist das Einfügen des Bibliotheks-Includes in das Layout wahrscheinlich besser als in jeder einzelnen Seite. Das starke Caching, das Browser durchführen, bedeutet, dass Benutzer die Bibliothek nur einmal für die gesamte Site (oder zumindest ihre Browsersitzung) vom Server laden, und indem sie im Layout gehandhabt werden, reduzieren Sie drastisch Ihre Wartungslast (die Sie angedeutet)

Im Allgemeinen sollten Ihre JavaScript-Bibliotheken stark zwischengespeichert werden, und in vielen Fällen ist es vorzuziehen, sie von einem stark verwendeten CDN, wie Google's zu ziehen. Ihre "lokale" (dh von Ihrem Server) Bibliothek sollte nur angefordert werden, wenn der CDN-Anbieter ausfällt und der Browser nicht zu ihrer Bibliothek gelangen kann. (Werfen Sie einen Blick auf die HTML5Boilerplate project, wie dies geschehen ist)

Aus diesem Grund würde ich keine Sorgen über die sehr minimale Leistung getroffen, dass die Bibliothek in der Layoutseite setzen würde entstehen. Selbst wenn Sie kein gut verwendetes CDN für Ihre Bibliothek verwenden, lädt ein Browser, den Benutzer heute tatsächlich verwenden, Ihre JavaScript-Bibliothek nur einmal (die erste Seite, die sie enthält) und verwendet die zwischengespeicherte Kopie für den Rest der Seiten auf Ihrer Website.

Also, kurz gesagt, legen Sie es in die Layout-Seite und mach dir keine Sorgen darüber. Es wird nur beim ersten Laden der Seite angefordert und kommt aus dem Cache für alle nachfolgenden Ladevorgänge, und Ihre Codebasis ist DRYer.

+0

Gibt es eine Möglichkeit, dass ich Grails sagen kann, die Google-Version von Jquery zu verwenden, wenn ich das wollte? –

+0

Das '' -Tag selbst gibt Ihnen keine Möglichkeit, die bestimmte zu verwendende Bibliotheksversion anzugeben, aber dieses Tag nutzt das Plugin [resources] (http://grails.org/plugin/resources) Mit dem Heavy Lifting und dem _that_ Plugin können Sie genau steuern, was geladen wird. – cdeszaq

+0

danke die Hilfe, danke –

1

Sie können auch eine externe JS-Datei erstellen, die selektiv die von Ihnen angegebene (n) Datei (en) lädt. Etwas wie folgt aus:

//FILENAME: jselector.js 
if ([conditions]) { 
    var fileref=document.createElement('script'); 
    fileref.setAttribute("type","text/javascript"); 
    fileref.setAttribute("src", filename); //reference your Jquery file here 
    document.getElementsByTagName("head")[0].appendChild(fileref); 
} 

Dann legen Sie einen Verweis auf diese Datei (jselector.js) in jeder der Seiten, die es brauchen.

<script type="text/javascript" src="jselector.js"></script> 

Wenn Ihre jQuery-Datei jemals ändert, aktualisieren Sie diese einzelne externe JS (jselector.js), und alle Seiten werden automatisch auf die neue jQuery verweisen.

+0

Das Problem mit JS auf diese Weise ist, dass Sie eine leichte Belastung-Zeit-Strafe, da der JS-Parser muss diese Datei zuerst verarbeiten, bevor es in die zusätzlichen Skripte laden kann, und Sie haben noch eine Sache das kann zu ungewöhnlichem Verhalten wegen unerwartetem zwischenspeichern führen. Für etwas, das so wichtig ist wie die jQuery-Bibliothek, würde ich sagen, dass es besser ist, den "normalen" Weg einzuschließen. – cdeszaq

+0

Ich stimme mit Ihnen überein. Deshalb habe ich es in meinem obigen Kommentar erwähnt. Aber da dies nicht direkt die Frage des Fragestellers beantwortet, wollte ich zusätzlich zu meiner Meinung eine Antwort geben, dass die Verwendung in allen Seitenlayouts keinen großen Unterschied machen würde. Aber ich verlasse mich auf den Caching-Ansatz in meinen Apps. – Marc

+0

@Marc, danke für deine Antwort. Du hast die Frage beantwortet, aber es scheint, als ob mein Gedanke, dass es eine schlechte Idee war, es ins Layout zu bringen, nicht korrekt ist. –