You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
예시) 웹 애플리케이션이 브라우저에서 특정 코드를 실행하느라 브라우저에게 제어권을 돌려주지 않으면 브라우저가 정지된 것처럼 보일 수 있다 => 사용자의 입력을 처리하느라 웹 앱이 프로세서에 대한 제어권을 브라우저에게 반환하지 않는 현상
어떠한 테스크가 완료될 때까지, 다른 테스크를 실행하지 않는 것
자바스크립트가 싱글 스레드이기 때문에 블로킹 현상이 발생된다.
블로킹 현상을 해결하기 위해 web worker라는 툴을 사용하기도 한다.
Asynchronous code
web worker는 DOM에 접근할 수 없다.
worker에서 실행되는 코드는 블로킹되지 않을 뿐 동기적으로 실행된다.
이전 프로세스의 결과를 받아올 수 없는 경우도 있다.
이를 해결하기 위해 Promise를 사용한다.
비동기 작업이 진행되는 동안 메인 스레드가 블로킹되지 않는다.
Synchronous JavaScript
constbtn=document.querySelector('button');btn.addEventListener('click',()=>{alert('You clicked me!');letpElem=document.createElement('p');pElem.textContent='This is a newly-added paragraph.';document.body.appendChild(pElem);});
위는 동기식 코드의 예시이다.
DOM에 미리 정의된 <button> 엘리먼트를 참조한다.
click 이벤트 리스너를 만들어 버튼이 클릭되었을 때 아래의 기능을 차례로 실행한다.
alert() 메서드 실행
<p> 엘리먼트 생성
<p> 엘리먼트 하위에 텍스트 넣기
DOM에 <p> 엘리먼트 추가
자바스크립트는 싱글 스레드이므로,
메인 스레드에서 각각의 작업이 처리되는 동안 렌더링은 일시 중지되고
하나의 작업이 완료되어야 다음 작업이 실행된다.
Asynchronous JavaScript
letresponse=fetch('이미지.png');letblob=reponse.blob();// 가져온 이미지 표시하기
외부에서 리소스를 가져오는 경우를 생각해보자. 이미지가 다운로드된 후에야 가져온 이미지를 표시할 수 있을 것이다. 그러니 response가 반환되기 전까지 기다려야한다.
**비동기 콜백(async callback)**은 백그라운드에서 코드를 실행할 함수를 호출할 때 인수로 전달되는 함수이다.
백그라운드 코드가 실행을 마치면, 콜백 함수를 호출한다.
콜백을 사용하는 것은 예전 방식이다.
btn.addEventListener('click',()=>{alert('You clicked me!');letpElem=document.createElement('p');pElem.textContent='This is a newly-added paragraph.';document.body.appendChild(pElem);});
위 코드는 비동기 콜백의 예시이다.
첫번째 파라미터는 이벤트 리스너의 타입이다.
두번째 파라미터는 이벤트가 발생할 때 호출되는 콜백 함수이다.
콜백 함수를 다른 함수의 인수로 전달할 때, 전달하는 것은 오로지 인수로서의 함수의 참조이다.