[解決済み] BootstrapはCDNから使うべきか、それとも自分のサーバーにコピーを作るべきか?
質問
Twitter Bootstrapを使用する際のベストプラクティスは、CDNから参照するか、自分のサーバーにローカルコピーを作成するか、どちらでしょうか?
Bootstrapはどんどん進化していくので、CDNを参照すると、時間の経過とともに異なるWebページが表示されたり、タグが壊れたりするのではないかと心配です。多くの人はどのように選択しているのでしょうか?
解決方法は?
なぜ両方ともダメなのか ¯ Â_(ツ)_/¯ ? Scott Hanselmanは、CDNを使用してパフォーマンスを向上させながらも、潔く使用することについての素晴らしい記事を掲載しています。 CDNがダウンした場合に備えて、ローカルコピーにフォールバックする。 .
bootstrapに特化すると、以下のようになります。 ローカルフォールバックでCDNから読み込む :
Plunkerでの動作デモ
<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 または fallback.js を使用します。
-
につき
フラッシュコメント
と
本解
を確認するために、答えを更新しました。
.visible
クラスのテストではなくrgb(51, 51, 51)
-
につき
デステのコメント
を使用するように更新しました。
.hidden
と.d-none
Boostrap 3.xまたは4用 - いつ スタイルシートが読み込まれたかどうかのテスト というスタイルを探さなければなりません。 となる が適用されているか、要素を作成し、適用されているかどうかを確認します。
-
vanilla jsを使用して、スタイルシートをhead内ですぐに読み込むように更新しました。を使用してテスト要素を作成する必要があります。
Document.createElement()
を使用し、ブートストラップクラスを適用しWindow.getComputedStyle()
をテストするためにdisplay:none
とし、条件付きで スタイルシートを挿入する jsを使用しています。
ベストプラクティス
ベストプラクティスについてのご質問ですが、多くの種類の CDNを使用する非常に良い理由 本番環境において :
- が増えます。 並列性 が利用できます。
- る可能性が高まります。 キャッシュヒット .
- としてペイロードが確保されます。 できるだけ小さく .
- を減らすことができます。 帯域幅 サーバーで使用されます。
- それにより、ユーザーが確実に 地理的に近い のレスポンスが得られます。
バージョン管理についてですが、価値のあるCDNであれば、特定のバージョンのライブラリをターゲットにすることができるので、リリースのたびに誤って破壊的な変更を導入することはありません。
使用方法
document.write
のmdnによると
document.write
備考 のように
document.write
は、ドキュメントに書き込みます。 ストリーム を呼び出すとdocument.write
は、閉じた(読み込まれた)ドキュメント上で自動的にdocument.open
, これは、ドキュメントをクリアする .
ただし、ここでの使い方は意図的なものです。 コードはDOMが完全に読み込まれる前に実行される必要があり、また正しい順序で実行される必要があります。 もしjQueryが失敗したら、jQueryに依存しているbootstrapをロードしようとする前に、それをドキュメントにインラインで注入する必要があります。
ロード後のHTML出力 :
しかし、この2つの例では、ドキュメントを開いたまま呼び出しているので、ドキュメント全体を置き換えるのではなく、コンテンツをインライン化する必要があります。 もし最後まで待つのであれば、次のように置き換える必要があります。
document.body.appendChild
を使用して動的ソースを挿入します。
脇 : MVC 6 では、次のようにすることができます。 リンクとスクリプトタグのヘルパー
関連
-
[解決済み] Bootstrap 2.3.2のGLYPHICONS
-
[解決済み] Bootstrap 3 で列からパディングを削除する
-
[解決済み] Twitter Bootstrapのメニューをクリックではなく、ホバーでドロップダウンさせる方法
-
[解決済み] Bootstrapの列をすべて同じ高さにするにはどうしたらいいですか?
-
[解決済み] Twitter Bootstrapのモーダルウィンドウを閉じないようにする
-
[解決済み] Twitter Bootstrap 3:メディアクエリを使うには?
-
[解決済み] Bootstrap v4におけるvisible-**とhidden-**の欠落について
-
[解決済み] Bootstrapのアコーディオンを、ヘッダーDivをクリックしたときに折りたたむようにするには?
-
[解決済み] Twitter Bootstrapのホストバージョンはありますか?[クローズド]
-
[解決済み] bowerでbootstrapを使用する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Bootstrap 4-alphaでメディアブレークポイントを使用する
-
[解決済み] Bootstrapでdivの左寄せと右寄せをする
-
[解決済み】twitter bootstrap 2で送信ボタンにアイコンを追加する。
-
[解決済み】リストセレクトボックス(ドロップダウン)をbootstrapでレンダリングする方法は?
-
[解決済み】Bootstrap Modalがすぐに消えてしまう。
-
[解決済み] reactjsアプリでbootstrapのcssとjsをインクルードする方法は?
-
[解決済み] なぜjQueryにはGoogleのCDNを使うべきなのでしょうか?
-
[解決済み] Bootstrap 3 のスタックドタブ
-
[解決済み] Twitter Bootstrapのテーブルの幅が常に100%なのはなぜですか?
-
[解決済み] TwitterのPopoverでdivをコンテンツとして使用することは可能ですか?