programing

왜 jQuery를 두번 선언합니까?

javamemo 2023. 9. 27. 16:47
반응형

왜 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.jsCDN이 다운되었거나 도달할 수 없을 때 동일한 서버에 저장된 파일입니다.

본질적으로 이렇게 말하고 있습니다.

// 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

반응형