¿Por qué no ambos ¯ \ _ (ツ) _ / ¯? Scott Hanselman tiene un gran artículo sobre el uso de una CDN para aumentar el rendimiento, pero recurre con gracia a una copia local en caso de que la CDN no funcione .
Específico para bootstrap, puede hacer lo siguiente para cargar desde un CDN con un respaldo local :
<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>
Actualizaciones
Mejores prácticas
Para su pregunta sobre las mejores prácticas, hay muchas razones muy buenas para usar un CDN en un entorno de producción :
- Aumenta el paralelismo disponible.
- Aumenta la posibilidad de que haya un golpe de caché .
- Asegura que la carga útil sea lo más pequeña posible .
- Reduce la cantidad de ancho de banda utilizado por su servidor.
- Asegura que el usuario obtendrá una respuesta geográficamente cercana .
Para su preocupación por el control de versiones, cualquier CDN que valga su peso en sal le permite apuntar a una versión específica de la biblioteca para que no introduzca accidentalmente cambios importantes con cada versión.
Utilizando document.write
Según el mdn en document.write
Nota : a medida que se document.write
escribe en la secuencia de documentos , la llamada document.write
a un documento cerrado (cargado) llama automáticamente document.open
, lo que borrará el documento .
Sin embargo, el uso aquí es intencional. El código debe ejecutarse antes de que el DOM esté completamente cargado y también en el orden correcto. Si jQuery falla, debemos inyectarlo en el documento en línea antes de intentar cargar bootstrap, que se basa en jQuery.
Salida HTML después de la carga :
Sin embargo, en ambos casos, estamos llamando mientras el documento aún está abierto, por lo que debería incluir los contenidos en línea, en lugar de reemplazar todo el documento. Si espera hasta el final, deberá reemplazarlo document.body.appendChild
para insertar fuentes dinámicas.
Aparte : en MVC 6, puede hacer esto con ayudantes de etiquetas de enlace y script
rgb(51, 51, 51)
parece arriesgada: ¿qué sucede si alguien cambia el color y se olvida de actualizarlo? ¿Existe una propiedad más estable que se pueda usar?