JS 단일 스 레 드 비동기 io 리 셋 의 특성 분석

우리 가 처음에 자 바스 크 립 트 를 접 한 것 은 대부분 html 의 js 스 크 립 트 에서 시작 되 었 을 것 이다.그러나 이런 간단 해 보 이 는 언어 는 몇 년 동안 흐리멍덩 하 게 사용 되 었 고 그 원리 체제 도 알 지 못 했다.누 워 있 는 총 이 있 는 지 없 는 지!
적어도 자 바스 크 립 트 는 dom 을 조작 할 때 각종 이벤트 리 셋 을 사 용 했 습 니 다.예 를 들 어 버튼,링크 의 클릭,마우스 경과,초점 획득 등 입 니 다.
이 과정 에서 우 리 는 dom 에 이벤트 리 셋 함 수 를 연결 합 니 다.예 를 들 어 onclick="doCheck()"이 과정 은 dom 요소 에 click 이 벤트 를 등록 하고 이벤트 리 셋 함수 doCheck()을 연결 합 니 다.
마우스 로 이 요 소 를 클릭 하면 이벤트 가 발생 합 니 다.이벤트 바 인 딩 함 수 를 즉시 실행 하고 돌아 갑 니 다.
그리고 나중에 jquery 를 접 했 을 때 엄 청 났 어 요.

$("#id").click(function(){
alert('    ');
});
이러한 jquery 의 문법 은 점점 더 많이 쓰 는 것 이 습관 이 된 것 같 습 니 다.그러나 앞의 선택 기 는 dom 노드 만 걸 러 내 는 것 을 주의 한 적 이 있 습 니 다.그 다음 click 은 이벤트 등록 입 니 다.그 안의 function(){}은 사실은 매개 변수 입 니 다.이벤트 바 인 딩 함수 의 매개 변수 입 니 다.이 안 에는 자바 script 의 문법 을 숙지 해 야 합 니 다.
function 은 javascript 에서 하나의 대상 으로 대상 은 세계 의 만사 만물 을 가리 킬 수 있 기 때문에 대상 은 많은 속성,방법 등 을 포함 할 수 있 습 니 다.
대상 이 라면 하나의 매개 변수 로 전달 할 수 있 습 니 다.이런 함 수 는 고급 함수 라 고 합 니 다.
그리고 이런 함 수 는 명칭 을 정의 하지 않 았 습 니 다.물론 당신 은 명칭 을 하나 가지 고 이름 을 전달 할 수 있 습 니 다.그러나 의미 가 없습니다.이곳 의 함수 대상 은 사실 하나의 형 삼 이기 때문에 우 리 는 습관 적 으로 이런 함수 에 이름 을 짓 지 않 습 니 다.이것 이 바로 흔히 말 하 는 익명 함수 입 니 다.
이 어 위의$("\#id").click 은 이벤트 가 실 행 될 때 이벤트 바 인 딩 함 수 를 실행 해 야 합 니 다.위 에서 dom 에 직접 onclick 방법 을 지정 하 는 것 과 같은 효과 입 니 다.
브 라 우 저 에 스 크 립 트 를 조작 하 는 스 레 드 가 여러 개 있다 고 가정 하면 그의 혼란 을 상상 할 수 있 습 니까?스 레 드 1 이 요소 A 의 value 값 을 수정 하려 고 하 는데 스 레 드 2 가 요소 A 를 dom 트 리 에서 노드 를 삭제 할 줄 은 몰 랐 습 니 다.이때 스 레 드 1 은 조작 에 실 패 했 습 니 다.이런 상황 은 나 쁘 지 않 습 니 다.브 라 우 저 는 여러 스 레 드 데이터 의 일치 성 을 유지 하지 않 거나 전단 작업 자 스스로 유지 할 수 있 습 니 다.그래서...브 라 우 저 는 하나의 스 레 드 만 dom 을 조작 합 니 다.이렇게 하면 많은 불필요 한 번 거 로 움 을 덜 었 다.

setTimeout(function(){
alert('  ');
},300);

while(true){
	........
}
300 밀리초 뒤에 alert('팝 업')가 더 있 을 것 같 아 요?
아 닙 니 다.영원히 연극 이 없습니다.300 밀리초 를 기다 리 는 것 은 당신 의 감정 을 속 이 는 것 입 니 다.브 라 우 저 는 단일 스 레 드 모드 로 스 크 립 트 를 실행 하기 때 문 입 니 다.
스 레 드 가 순환 모드 에서 while 문 구 를 실행 하면 setTimeout 은 더 이상 아무런 역할 을 하지 않 습 니 다.
더 나 아가 우 리 는 node.js 세계 에 들 어 갔 습 니 다.이것 은 자바 script 이 브 라 우 저 에서 의 특성 을 완전히 유지 하고 있 습 니 다.단일 스 레 드 비동기 리 셋 도 바로 이 특징 때 문 입 니 다.만약 node.js 가 동기 화 언어 라면 모든 npm 가방 이 c++확장(속도 가 빠 르 죠)이 더 라 도 c 언어 처리 속도 보다 빠 르 지 않 습 니까?그럼 node.js 는 태 어 나 기도 전에 phop 에 의 해 무시 당 했 을 수도 있 습 니 다.
바로 이 보 리 턴 IO 가 그의 효율 을 더욱 높 일 수 있 기 때문에 예전 학교의 패스트푸드점 과 학교 식당 의 비교 상황 을 떠 올 리 게 한다.
식당 은 모든 학생 들 이 접 시 를 들 고 창문 에 일자 로 줄 을 서 있 었 다.밥 을 싸 는 여동생 이 하나씩 담 고 하나씩 밥 을 가 져 갔다.이것 은 동기 처리 결과 이다.
학교 패스트푸드점 도 학생 들 이 줄 을 서서 주문 을 하지만 주문 을 마치 고 당신 의 호출 기 를 가 져 오 면 자 리 를 찾 을 수 있 습 니 다.그러면 직장 시간 에 종업원 은 많은 사람들 에 게 서 비 스 를 제공 할 수 있 습 니 다.그리고 음식 을 주문 한 학생 들 은 자 리 를 찾 아 다른 일 을 할 수 있 습 니 다.멍하니 창문 에 서서 밥 을 기다 리 지 않 아 도 됩 니 다.밥 이 나 오 는 순간 까지 서버 는 번호 에 따라 인 코딩 을 누 릅 니 다.이때 당신 책상 위의 호출기 가 울 릴 것 입 니 다.음식 을 찾 으 러 가면 됩 니 다.이것 은 비동기 처리 입 니 다.그 호출기 가 울 리 면 트리거 이벤트 입 니 다.
단일 스 레 드 는 다 중 스 레 드 간 상태 전환 으로 인 한 자원 낭비 와 유지 어려움 을 줄 일 수 있 습 니 다.물론 전문 적 인 제3자 가방 으로 다 중 핵 다 중 스 레 드 를 지원 하 는 상황 도 있 습 니 다.당신 은 스스로 평가 할 수 있 습 니 다.
이상 은 JS 단일 스 레 드 리 셋 에 관 한 모든 정보 내용 입 니 다.여러분 이 공부 할 때 다른 의문 이 있 으 면 아래 댓 글 영역 에서 토론 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기