Чому б не обидва ¯ \ _ (ツ) _ / ¯? У Скотта Хензельмана є чудова стаття про використання CDN для підвищення продуктивності, але витончено повертається до локальної копії у випадку, якщо CDN не працює .
Спеціально для завантажувальної програми, ви можете виконати наступне для завантаження з CDN з локальним запасом :
<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>
Оновлення
- ви також можете зробити той же тест, використовуючи YepNope або dropback.js
- за коментарем Flash та цим рішенням , оновленою відповіддю для перевірки
.visible
класу замість тестування наrgb(51, 51, 51)
- за коментарем deste , оновлений для використання
.hidden
та .d-none
для Boostrap 3.x або 4
- під час тестування, чи завантажений таблицю стилів , потрібно шукати стиль, який був би застосований, створити елемент і побачити, чи він застосований.
- Оновлено таблицю стилів, щоб негайно завантажити в голову, використовуючи ванільний js. Вам потрібно створити тестовий елемент за допомогою
Document.createElement()
, застосувати класи завантаження, використовувати Window.getComputedStyle()
для тестування display:none
, а потім умовно вставити таблицю стилів за допомогою js.
Кращі практики
На ваше запитання щодо найкращих практик є дуже багато вагомих причин використовувати CDN у виробничих умовах :
- Це збільшує наявний паралелізм .
- Це збільшує шанси на те, що буде кеш-хіт .
- Це гарантує, що корисна навантаження буде якомога меншою .
- Це зменшує кількість пропускної здатності, використовуваного вашим сервером.
- Це гарантує, що користувач отримає географічно близьку відповідь.
На ваш стурбовальний варіант, будь-який CDN, який важить своєї солі, дозволяє націлити на конкретну версію бібліотеки, щоб ви не випадково вносили порушення змін з кожним випуском.
Використання document.write
Згідно з mdn о document.write
Примітка : в якості document.write
запису в документі потоку , що заходять document.write
на замкнутому (навантаженої) документ автоматично викликає document.open
, який очистить документ .
Однак використання тут навмисне. Код потрібно виконати до повного завантаження DOM, а також у правильному порядку. Якщо jQuery виходить з ладу, нам потрібно вставити його в документ, вбудований в документ, перш ніж спробувати завантажити завантажувальний пакет, який спирається на jQuery.
Виведення HTML після завантаження :
В обох цих випадках ми телефонуємо, поки документ ще відкритий, тому він повинен містити вкладений вміст, а не замінювати весь документ. Якщо ви чекаєте до кінця, вам доведеться замінити, document.body.appendChild
щоб вставити динамічні джерела.
Убік : у MVC 6 це можна зробити за допомогою помічників тегів посилань та скриптів
rgb(51, 51, 51)
здається ризикованим - що робити, якщо хтось змінить колір і забуде оновити його? Чи існує більш стабільна властивість, яку можна було б використати?