왜 jQuery를 두번 선언합니까?
다음 코드의 목적은 무엇입니까?
아래의 두번째 스크립트 코드 전에jquery.min.js
에 이미 포함되어 있습니다.googleapis
.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="/assets/js/vendor/jquery.min.js"><\/script>')</script>
그것은 뒤로 물러나는 것입니다.jquery.min.js
CDN이 다운되었거나 도달할 수 없을 때 동일한 서버에 저장된 파일입니다.
본질적으로 이렇게 말하고 있습니다.
// 1. Try to download and run https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js
// 2. Was jQuery successfully loaded from the CDN? If so, it will be defined:
if (window.jQuery) {
// Yes, it's defined. Good. Nothing more needed.
}
else {
// No, it's not defined. Use my copy:
document.write('<script src="/assets/js/vendor/jquery.min.js"><\/script>')
}
에 관하여window.jQuery || document.write(...)
그것은 본질적으로 위의 코드의 축약어입니다.정의된 경우window.jQuery
진실이 될 것이고 그래서 오른쪽에 있는 진술.||
실행되지 않을 것입니다. 그러나 정의되지 않으면 거짓이 되고 의 오른쪽에 있는 문장이 됩니다.||
실행됩니다.
구글 CDN에서 호스팅하는 버전을 먼저 사용하려고 합니다.사이트를 보는 사용자가 이미 다른 사이트를 방문했을 때 해당 스크립트가 캐시에 저장되어 있을 수 있으므로 먼저 시도해 보는 것이 좋습니다.
CDN 버전이 로드되면 창을 엽니다.jQuery가 설정되고 or가 단락되며 코드가 넘어갑니다.
어떤 이유로 CDN 버전을 로드할 수 없는 경우 로컬에서 호스팅되는 스크립트 버전을 가리키는 다른 스크립트 태그를 페이지에 추가합니다.
편집: MTCoster가 위의 코멘트에서 지적했듯이, 이 속임수는 자바스크립트가 보통 로드되는 방식에 의존합니다.태그가 로드되거나 시간이 초과될 때까지 브라우저가 실행을 일시 중지합니다.비동기 특성을 사용하여 jQuery를 비동기적으로 로드한 경우 이 트릭은 작동하지 않습니다.
첫 번째 스크립트는 외부 웹 사이트(이 경우 Google CDN)에서 jQuery를 로드하려고 합니다.
두번째는 jQuery 객체를 찾기위해 시도할것입니다.window
, 찾을 수 없는 경우에만 내부 링크에서 라이브러리를 로드합니다.CDN에 장애가 발생할 경우를 대비한 것일 뿐입니다.
window.jQuery || document.write(...)
// the code above means the same as the code below
if (window.jQuery === undefined) document.write(...)
자바스크립트에는 부울(true/false) 외에도 truth와 false 값이 있습니다.다른 거라면0
,false
,undefined
그리고.null
는 참값입니다.
그 경우에, 만약에jQuery
속성은 창에 존재합니다. 개체가 되고 truth 값이 되므로 두 번째 문은 실행되지 않습니다(첫 번째 문은 이미 true이기 때문에).OR
, 문장 중 이면 다른을.r,장으로)다.
만약 이 ,jQuery
. 첫번째 스크립트가 올바르게 로드되지 않았기 때문입니다. 속성은undefined
두 두 번째 문이 실행되고 로컬 jQuery가 폴백으로 로드됩니다.
방화벽, CDN 다운 등에 의해 차단된 이유로 CDN의 jquery에 도달하지 못하면 폴백 메커니즘입니다.
작년에 직면했던 실제적인 시나리오를 하나 더 덧붙이겠습니다.제 고객 중 한 명이 제가 만든 웹 애플리케이션을 인터넷 사용이 불가능한 랜에서 호스팅하여 사용하기로 했습니다.로컬 IIS의 경우 응용 프로그램이 제대로 배포되었지만 CDN을 사용할 수 없어 실패했습니다. 문제의 코드를 사용했다면 웹 앱은 변경 없이 처음으로 작동했을 것입니다.
이제 의미가 있기를 바라요 :) 저에게는 교훈이었습니다.
언급URL : https://stackoverflow.com/questions/36879025/why-declare-jquery-twice
'programing' 카테고리의 다른 글
다중 삽입 쿼리를 준비할 때 오류가 발생했습니다. (0) | 2023.09.27 |
---|---|
산술 연산의 왼쪽과 오른쪽은 'any', 'number' 또는 열거형이어야 합니다. (0) | 2023.09.27 |
데이터 프레임의 현재 파티션 수 가져오기 (0) | 2023.09.27 |
이미지 너비를 부모 디브의 100%로 만들되 자신의 너비보다 크지 않게 만듭니다. (0) | 2023.09.27 |
링크 도커 컨테이너(Drupal 및 MariaDB) (0) | 2023.09.27 |