Tại sao không phải cả hai ¯ \ _ (ツ) _ / ¯? Scott Hanselman có một bài viết tuyệt vời về việc sử dụng CDN để tăng hiệu suất nhưng duyên dáng trở lại bản sao trong trường hợp CDN bị hỏng .
Cụ thể với bootstrap, bạn có thể thực hiện các thao tác sau để tải từ CDN với dự phòng cục bộ :
<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>
Cập nhật
Thực hành tốt nhất
Đối với câu hỏi của bạn về Thực tiễn Tốt nhất, có rất nhiều lý do rất tốt để sử dụng CDN trong môi trường sản xuất :
- Nó làm tăng tính song song có sẵn.
- Nó làm tăng khả năng sẽ có một lần nhấn cache .
- Nó đảm bảo rằng tải trọng sẽ càng nhỏ càng tốt .
- Nó làm giảm lượng băng thông được sử dụng bởi máy chủ của bạn.
- Nó đảm bảo rằng người dùng sẽ nhận được phản hồi gần về mặt địa lý .
Đối với mối quan tâm về phiên bản của bạn, bất kỳ CDN nào cũng có giá trị bằng muối cho phép bạn nhắm mục tiêu một phiên bản cụ thể của thư viện để bạn không vô tình đưa ra các thay đổi vi phạm với mỗi bản phát hành.
Sử dụng document.write
Theo md trên document.write
Lưu ý : khi document.write
ghi vào luồng tài liệu , gọi document.write
trên tài liệu đã đóng (đã tải) sẽ tự động gọi document.open
, điều này sẽ xóa tài liệu .
Tuy nhiên, việc sử dụng ở đây là có chủ ý. Mã cần được thực thi trước khi DOM được tải đầy đủ và cũng theo đúng thứ tự. Nếu jQuery thất bại, chúng ta cần đưa nó vào trong tài liệu nội tuyến trước khi chúng ta thử tải bootstrap, dựa trên jQuery.
Đầu ra HTML sau khi tải :
Tuy nhiên, trong cả hai trường hợp này, chúng tôi đang gọi trong khi tài liệu vẫn đang mở để nó nội tuyến, thay vì thay thế toàn bộ tài liệu. Nếu bạn đang đợi cho đến khi kết thúc, bạn sẽ phải thay thế bằng document.body.appendChild
cách chèn các nguồn động.
Ngoài ra : Trong MVC 6, bạn có thể làm điều này với các trình trợ giúp thẻ liên kết và tập lệnh
rgb(51, 51, 51)
có vẻ rủi ro - điều gì sẽ xảy ra nếu ai đó thay đổi màu sắc và quên cập nhật nó? Có một tài sản ổn định hơn người ta có thể sử dụng?