1. 동기 로딩과 비동기 로딩의 형태 1. 동기 로딩 가장 일반적으로 사용되는 동기 로딩 형태는
동기 모드(차단 모드라고도 함)는 브라우저의 후속 처리를 방지하고 후속 구문 분석을 중지하므로 후속 파일 로드(예: 이미지)를 중지합니다. , 렌더링, 코드 실행. js를 동기적으로 실행해야 하는 이유는 js에서 문서 내용 출력, DOM 수정, 리디렉션 등의 동작이 있을 수 있으므로 기본적으로 동기 실행이 안전하기 때문입니다. 이전의 일반적인 권장 사항은 페이지 끝 부분에
를 배치하여 이러한 차단 동작을 최소화하고 페이지가 먼저 표시되도록 하는 것이었습니다. 간단히 말하면 로드된 네트워크 타임라인은 폭포수 모델인 반면 비동기적으로 로드된 타임라인은 동시성 모델입니다. 2. 공통 비동기 로딩(스크립트 DOM 요소)
(function() { var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s .src = 'http://yourdomain.com/script.js'; var x = document.getElementsByTagName('script')[0] x.parentNode.insertBefore(s, x); 🎜>} )();
비동기 로딩은 비차단이라고도 합니다. 브라우저는 js를 다운로드하고 실행하는 동안 계속해서 후속 페이지를 처리합니다. 이 방법은 js를 사용하여 페이지의 <script> 태그 내에 스크립트 요소를 생성하고 이를 문서에 삽입하는 것입니다. 이를 통해 js 코드의 비차단 다운로드가 달성됩니다. <br>async 속성은 HTML5의 새로운 비동기 지원입니다. 아래 설명을 참조하여 추가하는 것이 좋습니다(추가하지 않아도 영향을 미치지 않습니다). <br>이 방법은 Script DOM Element 방법이라고 하며 js가 동일한 출처를 가질 필요는 없습니다. <br>js 코드를 익명 함수로 래핑하고 즉시 실행하는 방법은 변수 이름이 외부로 유출되는 것을 방지하기 위한 것인데, 특히 js 라이브러리에서 흔히 사용되는 방법입니다. <br>예를 들어 Google Analytics와 Google Badge 모두 다음 비동기 로딩 코드를 사용합니다. <br><br><div class="codetitle">
<span><a style="CURSOR: pointer" data="81787" class="copybut" id="copybut81787" onclick="doCopy('code81787')">코드 복사<u></u></a> 코드는 다음과 같습니다. :</span> </div> <div class="codebody" id="code81787">(function() { <br>var ga = document.createElement('script'); <br>ga.type = 'text/javascript'; ga.async = true; <br>ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') '.google-analytics.com/ga.js'; >var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s) <br>})(); <br><br>(function() <br>{var po = document.createElement("script"); <br>po.type = "text/javascript"; po.async = true;po.src = "https://apis.google.com/js/plusone.js "; <br>var s = document.getElementsByTagName("script")[0]; <br>s.parentNode.insertBefore(po, s); <br>})(); <br><br> <br>그러나 이 로딩 방법은 로딩이 완료되기 전에 onload 이벤트가 트리거되는 것을 방지합니다. 그러나 이제 많은 페이지의 코드는 onload 중에 추가 렌더링 작업을 수행해야 하므로 여전히 일부 페이지의 초기화 처리가 차단됩니다. </div>
<br><br>3. 온로드 중 비동기 로딩<br><br><br><div class="codetitle">
<span>코드 복사<a style="CURSOR: pointer" data="59761" class="copybut" id="copybut59761" onclick="doCopy('code59761')"><u></u> 코드는 다음과 같습니다.</a> </span> </div>(function() { <div class="codebody" id="code59761">function async_load(){ <br>var s = document.createElement('script'); <br>s.type = 'text/javascript'; <br> s.async = true; <br>s.src = 'http://yourdomain.com/script.js'; <br>var x = document.getElementsByTagName('script')[0]; parentNode.insertBefore(s, x) <br>} <br>if (window.attachEvent) <br>window.attachEvent('onload', async_load) <br>else <br>window.addEventListener('load' , async_load , false) <br>})();<br>이전 방법과 비슷하지만, js의 비동기 로딩을 바로 시작하지 않고 onload시에만 비동기 로딩을 시작한다는 점이 핵심입니다. 이는 onload 이벤트가 트리거되는 것을 차단하는 문제를 해결합니다. <br>추가됨: DOMContentLoaded 및 OnLoad 이벤트 <br>DOMContentLoaded: 페이지(문서)가 구문 분석되었으며 페이지의 dom 요소를 사용할 수 있습니다. 그러나 페이지에서 참조된 이미지와 하위 프레임이 아직 로드되지 않았을 수 있습니다. <br>OnLoad: 페이지의 모든 리소스가 로드되었습니다(이미지 포함). 이 시점에서 브라우저의 로딩 진행이 중지됩니다. <br>이 두 시점은 페이지 로딩 타임라인을 세 단계로 나눕니다. <br>4. 기타 비동기 로딩 방법 <br>Javascript의 동적 특성으로 인해 다음과 같은 비동기 로딩 방법이 많이 있습니다. <br>XHR 평가 <br>XHR 삽입 <br>Iframe의 스크립트 <br>스크립트 연기 <br> document.write 스크립트 태그 <br>또 다른 방법은 다른 방법과 결합하여 setTimeout을 사용하여 0초를 지연시키는 것입니다. <br>XHR Eval: ajax를 통해 js의 콘텐츠를 가져온 다음 eval을 통해 실행합니다. <br>var xhrObj = getXHRObject(); <br><div class="codetitle">
<span><a style="CURSOR: pointer" data="99282" class="copybut" id="copybut99282" onclick="doCopy('code99282')"><u>코드 복사 </u></a></span> 코드는 다음과 같습니다. </div>
<div class="codebody" id="code99282"> <br>xhrObj.onreadystatechange = <br>function() { <br>if ( xhrObj.readyState != 4 ) return; <br>eval(xhrObj.responseText) <br>xhrObj.open('GET ', ' A.js', true); <br>xhrObj.send(''); <br><br> </div>Iframe의 스크립트: js를 비동기적으로 실행할 수 있도록 iframe 요소를 생성하고 삽입합니다. <br><br><div class="codetitle"><span><a style="CURSOR: pointer" data="80719" class="copybut" id="copybut80719" onclick="doCopy('code80719')">코드 복사 <u></u></a> 코드는 다음과 같습니다. </span></div> <div class="codebody" id="code80719">var iframe = document.createElement('iframe '); <br>document.body.appendChild(iframe); <br>var doc = iframe.contentWindow.document; <br>doc.open().write('<body onload="insertJS()"> ;') ; <BR>doc.close(); <BR><BR> </div>GMail Mobile: 페이지의 js 내용이 주석 처리되어 실행되지 않습니다. 그런 다음 필요할 때 텍스트를 가져옵니다. 스크립트 요소의 내용을 삭제하고 주석을 제거한 다음 eval이 실행됩니다. <BR><BR><div class="codetitle"><span><a style="CURSOR: pointer" data="62965" class="copybut" id="copybut62965" onclick="doCopy('code62965')">코드 복사<U></U></a> 코드는 다음과 같습니다.</span></div> <div class="codebody" id="code62965"><script type="text/javascript "> <br>/* <br>var ... <br>*/ <br></script>
자세한 내용은 참고 자료에서 2010 Velocity Conference에서 Steve Souders와 Taobao가 발표한 두 유인물을 참조하세요.
2. 비동기 및 연기 속성
1. 연기 속성 >defer 속성은 이 스크립트에 document.write 또는 dom 수정이 없음을 선언합니다. 브라우저는 페이지의 후속 처리를 차단하지 않고 defer 속성이 있는 file.js 및 기타 스크립트를 병렬로 다운로드합니다. defer 속성은 13년 전 IE 4.0에서 구현되었습니다! Firefox는 3.5부터 defer 속성을 지원합니다. 참고: 모든 연기 스크립트는 순서대로 실행됩니다. 2. 비동기 속성
비동기 속성은 HTML5에 새로 추가되었습니다. 이 기능은 defer와 비슷하지만, 다운로드 후 바로 실행됩니다. 스크립트가 순서대로 실행된다는 보장은 없습니다. onload 이벤트 전에 완료됩니다. Firefox 3.6, Opera 10.5, IE 9, 최신 Chrome 및 Safari는 모두 비동기 속성을 지원합니다. async와 defer를 동시에 사용할 수 있으므로 IE 4 이후의 모든 IE는 비동기 로딩을 지원합니다. 3. HTML 4.01과 HTML5의 <script> 태그 사이의 차이점에 대한 자세한 설명: <br>type 속성은 HTML 4에서는 필수이고 HTML5에서는 선택 사항입니다. <br>비동기 속성은 HTML5의 새로운 기능입니다. <br>일부 속성(xml:space)은 HTML5에서 지원되지 않습니다. <br>참고: <br>비동기 속성이 없으면 후속 처리를 계속하기 직전에 스크립트를 획득(다운로드)하고 실행하여 브라우저의 후속 처리를 차단합니다. <br>비동기 속성이 있는 경우 브라우저가 후속 처리를 계속하는 동안 스크립트가 비동기적으로 다운로드되어 실행됩니다. <br>HTML4에는 defer 속성이 있는데, 이 스크립트는 문서 요소(document.write 없음)를 생성하지 않으므로 브라우저가 후속 처리 및 렌더링을 계속한다는 메시지를 브라우저에 표시합니다. <br>async 속성은 없지만 defer 속성이 있는 경우 페이지를 구문 분석한 후 스크립트가 실행됩니다. <br>두 가지를 동시에 설정하는 경우 defer 속성은 주로 async 속성을 지원하지 않는 오래된 브라우저에서 동기 방식이 아닌 원래 defer 방식으로 처리할 수 있도록 하기 위한 것입니다. <br>공식 설명도 참고하세요: script async <br>개인 보충: <br>HTML5는 이미 비동기 로딩을 지원하는데 왜 앞서 권장했던 번거로운 방법(스크립트 요소를 동적으로 생성)을 계속 사용해야 할까요? <br>답변: 이전 브라우저는 호환성을 위해 비동기를 지원하지 않습니다. 앞으로 모든 브라우저가 이를 지원한다면 비동기 속성을 스크립트에 직접 추가하는 것이 가장 쉬운 방법입니다. <br><br><br>3. 지연 로딩 <strong> </strong><br> 앞서 비동기 로딩(async loading) 문제를 해결했는데, 지연 로딩이 무엇인지 알아보겠습니다. <br>지연 로딩: 일부 js 코드는 페이지가 초기화될 때 즉시 필요하지 않지만 나중에 특정 상황에서는 필요합니다. 지연 로딩은 일시적으로 사용되지 않는 js가 처음에는 로드되지 않지만 필요할 때 또는 나중에 js 제어를 통해 비동기적으로 로드된다는 것을 의미합니다. <br>즉, js는 여러 모듈로 나누어 페이지가 초기화되면 바로 실행해야 하는 js만 로드되고, 이후에는 처음 필요할 때까지 다른 js의 로딩이 지연됩니다. <br>특히 페이지가 다양한 모듈로 구성되어 있는 경우에는 그 중 다수가 일시적으로 사용되지 않거나 전혀 사용되지 않을 수 있습니다. <br> 이미지 지연 로딩과 마찬가지로 이미지가 가시 영역에 나타날 때(스크롤 막대를 아래로 당길 때) 이미지가 로드되어 표시됩니다. <br><br><br>4. 스크립트의 2단계 로딩 및 지연 실행 <strong><br></strong>JS 로딩은 실제로 바이트 다운로드와 실행(파싱 및 실행)의 두 단계로 구성됩니다. <br>브라우저는 동기식 또는 비동기식 로드 여부에 관계없이 다운로드한 후 즉시 js 콘텐츠를 구문 분석하고 실행합니다. <br>앞서 언급한 비동기 로딩은 다운로드 단계에서만 문제를 해결하지만, 다운로드 직후 코드가 실행됩니다. <br>JS 구문 분석 및 실행 단계에서는 브라우저가 모든 작업을 차단하며 현재 브라우저는 응답하지 않는 상태입니다. <br>우리 모두는 인터넷을 통해 스크립트를 다운로드하는 데 상당한 시간이 걸린다는 것을 알고 있지만, 구문 분석 및 실행에도 시간이 걸리는 두 번째 단계를 간과하기 쉽습니다. 스크립트를 파싱하고 실행하는 데에는 생각보다 시간이 오래 걸립니다. 특히 대규모 스크립트가 많은 경우에는 더욱 그렇습니다. 일부는 즉시 실행되어야 하지만 일부는 그렇지 않습니다(예를 들어 특정 인터페이스를 표시하거나 작업을 수행할 때만 필요함). <br>이러한 스크립트는 느리게 실행되고 먼저 비동기식으로 다운로드 및 캐시될 수 있지만 즉시 실행되지는 않지만 처음 필요할 때 한 번 실행됩니다. <br>특수 기술을 사용하여 다운로드와 실행을 분리할 수 있습니다(다시 한번 자바스크립트의 동적 특성 덕분에). 예를 들어 JS 콘텐츠는 이미지나 객체 객체로 로드되어 캐시되기 때문에 즉시 실행되지 않고 처음 필요할 때 실행됩니다. <br>이 섹션에 대한 자세한 설명은 끝에 있는 리소스의 ControlJS 관련 링크를 참조하세요. <br>팁: <br>1. 긴 다운로드 시간 시뮬레이션: <br>백엔드 스크립트를 작성하고 일정 시간 동안 잠자기 상태로 둡니다. 예를 들어 jsp에서는 Thread.sleep(5000);이므로 5초 후에 내용을 수신할 수 있습니다. <br>2. 模拟较长的 js 代码执行时间(因为这步一般比较快不容易观察到): <br>var t_start = Number(new Date()); <br>while ( t_start + 5000 > Number(new Date()) ) {} <br>这个代码将使 js 执行5秒才能完成! <br><br><strong>五、script 标签使用的历史 <br></strong><br>1. script 放在 HEAD 中 <br><div class="codetitle">
<span><a style="CURSOR: pointer" data="89669" class="copybut" id="copybut89669" onclick="doCopy('code89669')"><u>复制代码</u></a></span> 代码如下:</div>
<div class="codebody" id="code89669"> <br><head> <br><script src=“…”></script>
Ajax 이상 현상의 비밀이 밝혀진다. 다양한 오류를 처리하려면 구체적인 코드 예제가 필요하다. 2019년에는 프론트엔드 개발이 인터넷 업계에서 무시할 수 없는 중요한 위치가 되었다. 프론트엔드 개발에서 가장 일반적으로 사용되는 기술 중 하나인 Ajax는 비동기 페이지 로딩과 데이터 상호작용을 실현할 수 있으며 그 중요성은 자명합니다. 그러나 Ajax 기술을 사용할 때 다양한 오류와 예외가 자주 발생합니다. 이러한 오류를 처리하는 방법은 모든 프런트엔드 개발자가 직면해야 하는 문제입니다. 1. 네트워크 오류 Ajax를 사용하여 요청을 보낼 때 가장 일반적인 오류는 다음과 같습니다.
제목: jQuery.val()이 작동하지 않는 문제를 해결하기 위한 방법 및 코드 예제 프런트엔드 개발에서 jQuery는 페이지 요소를 조작하는 데 자주 사용됩니다. 그 중 양식 요소의 값을 가져오거나 설정하는 것은 일반적인 작업 중 하나입니다. 일반적으로 우리는 jQuery의 .val() 메서드를 사용하여 양식 요소 값을 처리합니다. 그러나 때때로 jQuery.val()이 작동하지 않는 상황이 발생하여 일부 문제가 발생할 수 있습니다. 이 기사에서는 jQuery.val(
위임은 비동기 프로그래밍 및 이벤트 처리 문제를 해결하기 위해 객체 간에 메소드 포인터를 전달하는 데 사용되는 유형이 안전한 참조 유형입니다. 비동기 프로그래밍: 위임을 사용하면 메소드가 다른 스레드 또는 프로세스에서 실행될 수 있으므로 애플리케이션 응답성이 향상됩니다. 이벤트 처리: 대리자는 클릭이나 마우스 이동과 같은 이벤트를 생성하고 처리할 수 있도록 하여 이벤트 처리를 단순화합니다.
프런트엔드 개발자의 필수품: 최적화 모드를 마스터하고 웹사이트를 멋지게 만드세요! 인터넷의 급속한 발전과 함께 웹사이트는 기업 홍보와 커뮤니케이션의 중요한 채널 중 하나로 자리 잡았습니다. 성능이 좋고 로딩 속도가 빠른 웹사이트는 사용자 경험을 향상시킬 뿐만 아니라 더 많은 방문자를 유치합니다. 프런트엔드 개발자로서 몇 가지 최적화 패턴을 익히는 것이 중요합니다. 이 기사에서는 개발자가 웹 사이트를 더 잘 최적화하는 데 도움이 되도록 일반적으로 사용되는 몇 가지 프런트 엔드 최적화 기술을 소개합니다. 압축 파일 웹 사이트 개발에서 일반적으로 사용되는 파일 형식에는 HTML, CSS 및 J가 포함됩니다.
WordPress에서 페이지 리디렉션을 방지하는 방법은 무엇입니까? 웹사이트 개발 시 WordPress에서 페이지 비점프 설정을 구현하고 싶을 때가 있습니다. 즉, 특정 작업 중에 전체 페이지를 새로 고치지 않고도 페이지 콘텐츠를 업데이트할 수 있습니다. 이를 통해 사용자 경험이 향상되고 웹사이트가 더 부드러워집니다. 다음으로 WordPress에서 페이지 비점프 설정을 구현하는 방법을 공유하고 구체적인 코드 예제를 제공하겠습니다. 먼저 Ajax를 사용하여 페이지가 점프하는 것을 방지할 수 있습니다. 아약스
HTML에 외부 JS 파일을 포함하려면 <script> 태그를 사용하고 로드할 파일의 URL을 지정합니다. 또한 유형, 지연 또는 비동기 속성을 지정하여 로드 및 실행 방법을 제어할 수도 있습니다. 일반적으로 <script> 태그는 페이지 렌더링을 차단하지 않으려면 <body> 섹션 하단에 배치해야 합니다.
PHP 검색 기능은 항상 웹사이트 개발에서 매우 중요한 부분이었습니다. 왜냐하면 사용자는 필요한 정보를 찾기 위해 검색창을 자주 사용하기 때문입니다. 그러나 많은 웹사이트에서는 검색 기능 구현 시 효율성이 낮고, 검색 결과가 부정확한 등의 문제를 안고 있습니다. PHP 검색 기능을 최적화하는 데 도움이 되도록 이 문서에서는 몇 가지 팁을 공유하고 구체적인 코드 예제를 제공합니다. 1. 전체 텍스트 검색 엔진을 사용합니다. 기존 SQL 데이터베이스는 대량의 텍스트 콘텐츠를 처리할 때 효율성이 떨어집니다. 따라서 Elasticsearch, Solr 등과 같은 전체 텍스트 검색 엔진을 사용하는 것이 좋습니다.