Dlaczego nie oba ¯ \ _ (ツ) _ / ¯? Scott Hanselman ma świetny artykuł na temat korzystania z CDN w celu zwiększenia wydajności, ale wdzięczny powrót do lokalnej kopii na wypadek awarii CDN .
W przypadku ładowania początkowego możesz wykonać następujące czynności, aby załadować z CDN z lokalną rezerwą :
<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>
Aktualizacje
- możesz również wykonać ten sam test za pomocą YepNope lub fallback.js
- na komentarz Flasha i to rozwiązanie , zaktualizowana odpowiedź, aby sprawdzić
.visible
klasę zamiast testowaćrgb(51, 51, 51)
- za komentarz Deste za , uaktualnionej w użyciu
.hidden
i .d-none
dla obu 3.x Boostrap lub 4
- podczas testowania, czy załadowano arkusz stylów , musisz poszukać stylu, który zostałby zastosowany, utworzyć element i sprawdzić, czy został zastosowany.
- Zaktualizowano arkusz stylów, aby ładował się natychmiast w głowie za pomocą vanilla js. Musisz utworzyć element testowy za pomocą
Document.createElement()
, zastosować klasy bootstrap, użyć Window.getComputedStyle()
do testowania display:none
, a następnie warunkowo wstawić arkusz stylów za pomocą js.
Najlepsze praktyki
Jeśli chodzi o Twoje pytanie dotyczące sprawdzonych metod, jest wiele bardzo dobrych powodów, dla których warto używać CDN w środowisku produkcyjnym :
- Zwiększa dostępną równoległość .
- Zwiększa szansę na trafienie w pamięci podręcznej .
- Zapewnia to, że ładunek będzie jak najmniejszy .
- Zmniejsza przepustowość używaną przez serwer.
- Gwarantuje, że użytkownik otrzyma bliską geograficznie odpowiedź.
W trosce o wersje, każda CDN warta swojej wagi, pozwala na wybranie określonej wersji biblioteki, aby nie wprowadzać przypadkowo istotnych zmian przy każdym wydaniu.
Za pomocą document.write
Według mdn on document.write
Uwaga : jak document.write
pisze do strumienia dokumentów , wywołanie document.write
zamkniętego (załadowanego) dokumentu powoduje automatyczne wywołanie document.open
, co spowoduje wyczyszczenie dokumentu .
Jednak użycie tutaj jest celowe. Kod musi zostać wykonany, zanim DOM zostanie w pełni załadowany, a także we właściwej kolejności. Jeśli jQuery zawiedzie, musimy wstrzyknąć go do dokumentu inline, zanim spróbujemy załadować bootstrap, który opiera się na jQuery.
Wyjście HTML po załadowaniu :
Jednak w obu tych przypadkach dzwonimy, gdy dokument jest nadal otwarty, więc powinien zawierać treść zamiast zastępować cały dokument. Jeśli czekasz do końca, musisz zamienić na, document.body.appendChild
aby wstawić dynamiczne źródła.
Poza tym : w MVC 6 możesz to zrobić za pomocą pomocników linków i tagów skryptu
rgb(51, 51, 51)
wydaje się ryzykowny - co jeśli ktoś zmieni kolor i zapomni go zaktualizować? Czy istnieje bardziej stabilna właściwość, której można by użyć?