JS 함수의 동적 로딩
일반적으로 js 파일을 로드해야 하는 경우 다음 코드와 유사한 스크립트 태그를 사용합니다.
1. 엄격한 읽기 순서. 브라우저는 웹 페이지에 <script> 나타나는 순서대로 Javascript 파일을 읽어서 즉시 실행하므로 여러 파일이 서로 의존하는 경우 종속성이 가장 적은 파일을 먼저 배치하고 가장 큰 종속성이 먼저 배치되어야 합니다. 파일은 끝에 배치되어야 합니다. 그렇지 않으면 코드에서 오류가 보고됩니다. </p>
<p>2. 성능 문제. 브라우저는 "동기 모드"를 사용하여 <script> 태그를 로드합니다. 즉, 페이지가 "차단"되어 후속 HTML 코드를 실행하기 전에 JavaScript 파일이 로드될 때까지 기다립니다. 여러 개의 <script> 태그가 있는 경우 브라우저는 이를 동시에 읽을 수 없습니다. 다른 태그를 읽기 전에 먼저 읽어야 하므로 읽기 시간이 크게 늘어나고 페이지 응답이 느려집니다. </p>
<p>이때 JS를 동적으로 로딩하는 것을 생각해 보겠습니다. JS를 동적으로 로딩하는 구현 방법은 다음 코드와 비슷합니다</p>
<p></p>
<div class="codetitle">
<span><a style="CURSOR: pointer" data="44841" class="copybut" id="copybut44841" onclick="doCopy('code44841')"><u>코드 복사</u></a></span> 코드는 다음과 같습니다.</div>
<div class="codebody" id="code44841">
<br>
/*<br>
*@desc: 동적으로 스크립트 추가<br>
*@param src: 로드된 js 파일의 주소 <br>
*@param 콜백: js 파일 로딩 후 호출해야 하는 콜백 함수<br>
*@데모:<br>
addDynamicStyle('http://webresource.c-ctrip.com/code/cquery/LABjs/LAB.js', function () {<br>
Alert('Ctrip 서버의 lab.js가 로드되었습니다.')<br>
});<br>
*/<br>
함수 addDynamicJS(src, 콜백) {<br>
var script = document.createElement("script");<br>
script.setAttribute("type", "text/javascript");<br>
script.src = src[i];<br>
Script.charset = 'gb2312';<br>
Document.body.appendChild(스크립트);<br>
If (콜백 != 정의되지 않음) {<br>
script.onload = 함수 () {<br>
콜백();<br>
}<br>
}<br>
}<br>
</div>
<p>이로 인해 페이지 차단이 발생하지는 않지만 또 다른 문제가 발생합니다. 이렇게 로드된 Javascript 파일은 원래 DOM 구조에 있지 않으므로 DOM 준비(DOMContentLoaded) 이벤트 및 window.onload에 지정된 콜백 함수가 있습니다. 이벤트에는 영향을 미치지 않습니다. </p>
<p>이번에는 JS 로딩 문제를 효과적으로 관리하기 위해 일부 외부 함수 라이브러리를 사용하는 것을 고려해 보겠습니다. </p>
<p><strong>본론으로 들어가 LAB.js에 대해 이야기해 보겠습니다</strong></p>
<p>LAB.js</p>
<p>JS를 로드하기 위해 전통적인 방법을 사용한다면, 작성되는 코드는 일반적으로 아래 코드와 같습니다. <br>
</p>
<div class="codetitle">
<span><a style="CURSOR: pointer" data="22815" class="copybut" id="copybut22815" onclick="doCopy('code22815')"><u>코드 복사</u></a></span> 코드는 다음과 같습니다.</div>
<div class="codebody" id="code22815">
<br>
<script src="aaa.js"></script>
$LAB.setGlobalDefaults({ Debug: true }) //디버깅 켜기
$LAB
//첫 번째 실행 체인
.script('http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.0/jquery.min.js')
.script('http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js')
//두 번째 실행 체인
.wait(함수 () {
//console.log(window.$)
//console.log(window._)
})
//세 번째 실행 체인
.script('http://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.1.1/js/bootstrap.min.js')
.script('http://cdnjs.cloudflare.com/ajax/libs/fancybox/2.1.5/jquery.fancybox.pack.js')
//네 번째 실행 체인
.wait(함수 () {
// console.log(plugin1Function)
// console.log(plugin2Function)
})
//다섯 번째 실행 체인
.script('js/aaa.js')
.script('js/bbb.js')
//6번째 실행 체인
.wait(함수 () {
// console.log(module1Function)
// console.log(module2Function)
})
이때 콘솔을 열고 아래와 같이 정보를 확인하세요.
이것을 보시면 Lab.js의 디버깅 기능에 놀라실 거라 믿습니다. 사실 Lab.js는 정말 강력하고, 저는 그 피상적인 기능 중 일부만 이해하고 있습니다. 먼저 적어두고 나중에 본인의 편의를 위해 공유해 보세요.