-
웹브라우저 동작원리기타 2021. 12. 5. 16:57
=========================
코드를 잘 짜고 싶으면 문법 말고도 동작원리 배워두면 좋다
님이 작성한 HTML, CSS, JS 해석해주는 엔진이 브라우저
근데 브라우저는 자바스크립트를 해석하는 순서같은게 좀 이상하다
파이썬은
JS는
2+2도 저 안에 넣어야되고(아니면 바로 출력됨)
3+3이 먼저 출력됨
보통 프로그래밍 언어랑 다르다
뭔가 처리가 빨리 되는것부터 실행하는 느낌
병렬처리는 아니고
동작원리 알면 이해됨
=========================
Stack과 Heap이 있다
Stack안에 코드를 집어넣고 한줄 한줄 실행한다.
코드 실행할 때 변수를 만나면
여기서 갖다 씀
이렇듯 원래는 병렬처리 못함.
근데?
저런애들은 바로 실행할 수가 없는 코드라서
잠깐 대기실로 감
이렇게 제껴놓는 코드들이 정해져 있음.
대기실 코드들
Queue에 줄을 세우고 하나씩 Stack으로 보냄
Stack이라는 공간은 원래 바쁜 공간이라서 거치는 것
근데?
비었어? 하나 보내고 실행하고
그럼 비었어? 다시 하나 보내고 실행하고
0초면?
setTimeout같은거 무조건 대기실로 가기 때문임. + Stack이 비어있을 때만 올려보냄
이기 때문
이걸 알면?
JS로 짜면 안되는 코드들 : 반복문 천만개, 10초 20초 걸리는거, 자바스크립트로 어려운 수학계산 시키면 스택에서 10초간 실행이되는데, 그 중간에 ajax요청, 버튼 클릭, setTimeout작동 이런거 안됨
> 이런 이벤트 리스너 등의 코드들은 대기실 거쳐서 Queue에서 Stack으로 올라온다고 했으니까
> Stack이 비었을 때만 올려보내니까 10초동안 스택이 안비니 못올려보냄
언어마다 다른게 이런거구나..!
이런 화면 띄움, 브라우저 프리징
교훈
> 버튼 하나에 이벤트를 100개 1000개 달아놓으면 안된다 이 말 ( queue에도 쌓이고 stack에도 올려보내야해 )
> 동기적 vs 비동기적
: JS는 원래 동기적으로 처리가 됨. 동기적 == 한번에 한줄 순서대로 코드가 실행이 된다는 소리 == stack은 하나니까요
> JS는 가끔 비동기적으로 처리도 할 수가 있다 setTimeout, 이벤트리스너, ajax함수 같은걸 쓰면 비동기적인 처리를 할 수가 있는거예요 오래걸리는 처리는 제껴두고 빨리 되는거 먼저 실행을 할 수가 있다는 말. 이런 함수들은 대기실을 거쳐서 이게 완료가 되면 실행을 하라고 올려보내니까
'기타' 카테고리의 다른 글
Bootstrap (0) 2022.01.20 티스토리의 임시저장과 자동저장, ctrl + z, (스피커) (0) 2022.01.07 생활코딩 OT (0) 2021.11.09 API (0) 2021.11.08 윈도우 업데이트 재부팅 지 마음대로 함 (0) 2021.10.19