Pourquoi pas les deux ¯ \ _ (ツ) _ / ¯? Scott Hanselman a un excellent article sur l'utilisation d'un CDN pour des gains de performances, mais revenant gracieusement à une copie locale au cas où le CDN serait en panne .
Spécifique au bootstrap, vous pouvez effectuer les opérations suivantes pour charger à partir d'un CDN avec une solution de secours locale :
<head>
<!-- Bootstrap CSS CDN -->
<link rel="stylesheet" href="~https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css">
<!-- Bootstrap CSS local fallback -->
<script>
var test = document.createElement("div")
test.className = "hidden d-none"
document.head.appendChild(test)
var cssLoaded = window.getComputedStyle(test).display === "none"
document.head.removeChild(test)
if (!cssLoaded) {
var link = document.createElement("link");
link.type = "text/css";
link.rel = "stylesheet";
link.href = "lib/bootstrap.min.css";
document.head.appendChild(link);
}
</script>
</head>
<body>
<!-- APP CONTENT -->
<!-- jQuery CDN -->
<script src="~https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<!-- jQuery local fallback -->
<script>window.jQuery || document.write('<script src="lib/jquery.min.js"><\/script>')</script>
<!-- Bootstrap JS CDN -->
<script src="~https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
<!-- Bootstrap JS local fallback -->
<script>if(typeof($.fn.modal) === 'undefined') {document.write('<script src="lib/bootstrap.min.js"><\/script>')}</script>
</body>
Mises à jour
Les meilleures pratiques
Pour répondre à votre question sur les bonnes pratiques, il existe de nombreuses très bonnes raisons d'utiliser un CDN dans un environnement de production :
- Cela augmente le parallélisme disponible.
- Cela augmente les chances qu'il y ait un coup de cache .
- Cela garantit que la charge utile sera aussi petite que possible .
- Cela réduit la quantité de bande passante utilisée par votre serveur.
- Il garantit que l'utilisateur obtiendra une réponse géographiquement proche .
Pour votre problème de version, tout CDN qui vaut son pesant de sel avec vous permet de cibler une version spécifique de la bibliothèque afin de ne pas introduire accidentellement des changements de rupture avec chaque version.
En utilisant document.write
Selon le MDN sur document.write
Remarque : lors de l' document.write
écriture dans le flux de documents , l'appel document.write
d'un document fermé (chargé) appelle automatiquement document.open
, ce qui effacera le document .
Cependant, l'utilisation ici est intentionnelle. Le code doit être exécuté avant le chargement complet du DOM et également dans le bon ordre. Si jQuery échoue, nous devons l'injecter dans le document en ligne avant d'essayer de charger bootstrap, qui repose sur jQuery.
Sortie HTML après chargement :
Dans ces deux cas cependant, nous appelons alors que le document est encore ouvert, il doit donc intégrer le contenu, plutôt que de remplacer le document entier. Si vous attendez la fin, vous devrez remplacer par document.body.appendChild
pour insérer des sources dynamiques.
En plus : dans MVC 6, vous pouvez le faire avec des assistants de lien et de balise de script
rgb(51, 51, 51)
semble risqué - que faire si quelqu'un change la couleur et oublie de la mettre à jour? Y a-t-il une propriété plus stable que l'on pourrait utiliser?