2014-10-04 3 views
76

Was ist die beste Vorgehensweise bei der Verwendung von Twitter Bootstrap, beziehen Sie sich auf CDN oder erstellen Sie eine lokale Kopie auf meinem Server?Sollte ich Bootstrap von CDN verwenden oder eine Kopie auf meinem Server erstellen?

Da Bootstrap weiterentwickelt, ich fürchte, wenn ich auf das CDN verweisen, würde der Benutzer verschiedene Webseiten im Laufe der Zeit sehen, und einige Tags möglicherweise sogar gebrochen. Was ist die Entscheidung der meisten Leute?

Antwort

115

Why Not Both ¯\_(ツ)_/¯ ? Scott Hanselman hat einen großen Artikel über die Verwendung eines CDN für Leistungssteigerungen, aber anmutig falling back to a local copy in case the CDN is down.

Spezifische Bootstrap, können Sie die folgenden Funktionen load from a CDN with a local fallback tun:

<head> 
    <!-- Bootstrap CSS CDN --> 
    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css"> 
</head> 
<body> 
    <!-- APP CONTENT --> 

    <!-- jQuery CDN --> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> 
    <!-- jQuery local fallback --> 
    <script>window.jQuery || document.write('<script src="/local/jquery.min.js"><\/script>')</script> 
    <!-- Bootstrap JS CDN --> 
    <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js"></script> 
    <!-- Bootstrap JS local fallback --> 
    <script>if(typeof($.fn.modal) === 'undefined') {document.write('<script src="/local/bootstrap.min.js"><\/script>')}</script> 
    <!-- Bootstrap CSS local fallback --> 
    <div id="bootstrapCssTest" class="hidden"></div> 
    <script> 
    $(function() { 
     if ($('#bootstrapCssTest').is(':visible')) { 
     $("head").prepend('<link rel="stylesheet" href="/local/bootstrap.min.css">'); 
     } 
    }); 
    </script> 
</body> 

*   Sie können auch den gleichen Test using YepNope or fallback.js
*   pro Flash's comment und this solution, aktualisiert Antwort für .visible Klasse tun, anstatt zu prüfen, der Prüfung für rgb(51, 51, 51)
*   wenn testing if a stylesheet loaded, müssen Sie nach einem Stil suchen, der würde wurde angewendet, erstellen Sie ein Element und sehen Sie, ob es angewendet wurde.


Um Ihre Frage zu Best Practices, es gibt eine Menge von very good reasons to use a CDN in a production environment:

  1. Es erhöht die Parallelität zur Verfügung.
  2. Es erhöht die Chance, dass es einen Cache-Hit wird.
  3. Es stellt sicher, dass die Nutzlast so klein wie möglich sein wird.
  4. Es reduziert die Menge Bandbreite von Ihrem Server verwendet.
  5. Es stellt sicher, dass der Benutzer eine geographisch nahe Antwort erhält.

Um die Versionierung Sorge, jede CDN wert sein Gewicht in Salz mit können Sie eine bestimmte Version der Bibliothek Ziel, so dass Sie nicht versehentlich mit jedem Release brechen Änderungen einzuführen.

+0

Hardcoding 'rgb (51, 51, 51)' scheint riskant - was, wenn jemand die Farbe ändert und vergisst, sie zu aktualisieren? Gibt es eine stabilere Eigenschaft, die man verwenden könnte? – Flash

+0

@Flash, Yeah, stimme ich zu, das scheint knifflig. Es ist schwierig, CSS-Änderungen in globalen JavaScript-Variablen oder direkt über CSS zu testen. Wir müssen nur Elemente testen, um zu sehen, ob sie so formatiert sind, wie das CSS sie beschreiben wird, und wir haben immer ein "" -Element. [Diese Antwort] (http://stackoverflow.com/a/17232679/1366033) fügt ein Markup mit einem '.hidden' div hinzu und führt dann einen Test durch, um zu sehen, ob es sichtbar ist:' $ ('# bootstrapCssTest') (': sichtbar') '. Diese Klasse ist wahrscheinlich weniger wahrscheinlich, dass sie im Laufe der Zeit Änderungen aufweist. – KyleMit

+0

@KyleMit, Wie kann ich das für [Google Material Icons] (https://material.io/icons) tun? –

6

Hängt von der spezifischen Site ab.

Haben Sie viele Benutzer? Mögen Sie die Bandbreitennutzung? Ist Leistung ein Problem (CDN can speed up die Antworten)?

Sie auf eine bestimmte Version verknüpfen können:

//maxcdn.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css

Oder

//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css

Auf diese Weise müssen Sie sich keine Gedanken über Aktualisierungen der Bibliothek machen, es ist eine bessere Vorgehensweise, um auf dem neuesten Stand zu bleiben.

Ich bin nicht sicher, was sind die genauen Statistiken über Entwickler Wahl, aber Sie können schauen here und sehen, dass Milliarden von Anfragen an Bootstrap CDN gesendet werden, was bedeutet, dass es robust und sicher zu bedienen ist.

+6

Der letzte Link ist kaputt. – Nuclearman

0

Ich versuchte, die KyleMit's answer aber das Forum wurde Markierung als falsch gegliederter Code zu bearbeiten, auch war es nicht, so ich hinzufüge, meinen Beitrag rechts unten:

Da die Frage als Thema markiert (und nicht nur ), vielleicht ist es hilfreich, die Antwort für die neuere Version von Bootstrap zu aktualisieren.

Da das Framework eine neue Klasse zum Ausblenden von Elementen in der vierten Version hinzugefügt hat, sollten wir in diesem Fall .d-none anstelle von .hidden verwenden.

Alles andere bleibt in diesem Fall gleich, außer der Lib-Version (natürlich!)

Verwandte Themen