JS ๋์์๋ฆฌ
js๋ ์ฑ๊ธ ์ฐ๋ ๋ ๊ธฐ๋ฐ ์ธ์ด์ด๋ฏ๋ก ํธ์ถ ์คํ์ด ํ๋๊ณ ํ ๋ฒ์ ํ ์์ ๋ง ์ฒ๋ฆฌํ ์ ์๋ค. ์ด์ ๋ฐ๋ฅธ ๋ฌธ์ ๋ ํ๋์ ๋ก์ง์ ์ํํ๋๋ฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ๋ค๋ฅธ ๋ก์ง์ด ๋ฉ์ถฐ๋ฒ๋ฆฐ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋น๋๊ธฐ ์ฝ๋ฐฑ์ ์ฌ์ฉํ ์ ์๋ค.
๋ฐํ์
js ๋ฐํ์์ JS์์ง, web api, task queue, event loop, render queue๋ก ๋์ด์๋ค.
์์ง
js ์์ง์ ๋ํ์ ์ธ ์๋ Google์ V8 ์์ง์ด๋ค. Chrome๊ณผ Node.js์์ ์ด๋ฅผ ์ฌ์ฉํ๋ค.
- memory heap : ๋ฉ๋ชจ๋ฆฌ ํ ๋น
- call stack : ํธ์ถ ์คํ
์์ ๋๊ฐ์ง๋ก ์์ง์ ๊ตฌ์ฑ๋์ด์๋ค.
Web API
DOM, Ajax, TimeOut ๋ฑ์ Web API๊ฐ ์๋ค.
Callstack์์ ๋น๋๊ธฐ ํจ์๊ฐ ์คํ๋๋ฉด Web API๋ฅผ ํธ์ถํ๊ณ API๋ ์ฝ๋ฐฑํจ์๋ฅผ Task Queue์ ๋ฃ๊ฒ ๋๋ค.
Event Loop
CallStack๊ณผ Task Queue์ ์ํ๋ฅผ ์ฒดํฌํ์ฌ, CallStack์ด ๋น์์ ๋ Task Queue์ ์ฒซ๋ฒ์งธ ์ฝ๋ฐฑ์ CallStack์ผ๋ก ๋ฃ๋๋ค.
CallStack์ ํธ์ถ์ ๋ปํ๊ณ , Task Queue๋ Web api๊ฐ ์ํํ๊ณ ์ฃผ์ด์ง ๊ฒฐ๊ณผ๋ฅผ ๋ปํ๋ค. ๋ฐ๋ผ์ ๊ธฐ์กด js ์ฝ๋์์ ํธ์ถ๋ ํจ์๋ฅผ ์คํํ๋ค๊ฐ Web API ํธ์ถ์ด ๋ํ๋๋ฉด ๋น๋๊ธฐ๋ก ์ํํ๊ณ ๊ณ์ CallStack์์ ํจ์๋ฅผ ๊บผ๋ด์ ์คํํ๋ค. Web API๊ฐ ๋ฐํํ๋ฉด Task Queue์ ์ฝ๋ฐฑํจ์๋ฅผ ๋ฃ๊ณ , CallStack์ด ๋น ๋ Task Queue์ ํจ์๋ค์ CallStack์ผ๋ก ๋ฃ๋๋ค.
์ฝ๋๋ก ๋ณด๊ธฐ
// Synchronous
[1,2,3,4].forEach(function(i) {
console.log(i);
});
// Asynchronous
function asyncForEach(array, cb) {
array.forEach(function(){
setTimeout(cb, 0);
});
}
asyncForEach([1,2,3,4], function(i){
console.log(i);
});
์ฒซ๋ฒ์งธ๋ JS ์์ง์ Call Stack์ console.log ํจ์๊ฐ ๊ณ์ ์์๋ค๊ฐ ์คํ๋๋ ๋ฐฉ์์ผ๋ก ์ํ๋๋ค.
๋๋ฒ์งธ๋ setTimeout์ด๋ผ๋ WebAPI ๋๋ฌธ์ TaskQueue๋ก ์ด๋๋์๋ค๊ฐ Call Stack์ด ๋น์์ ๋ ์ถ๊ฐ๋์ด ์คํ๋๋ค. ์ด๋ ๊ฒ ๋น๋๊ธฐ ์ฝ๋ฐฑ์ ์ด์ฉํ๋ฉด ์ฑ๊ธ ์ฐ๋ ๋์ ๋จ์ ์ ๋ฉ์ธ ์ ์๋ค.
์ฐธ๊ณ : https://baeharam.github.io/posts/javascript/jshow-javascript-works/
'์น (WEB) > ๊ณต๋ถ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React-query :: Query (0) | 2021.07.10 |
---|---|
DeepLink๋? :: ์๋งํฌ, ๋ฅ๋งํฌ, ๋ํผ๋ ๋ฅ๋งํฌ (4) | 2021.07.10 |
[React] React ํ๊ฒฝ๋ณ์, ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ์์ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น? (Docker, github action ์ฌ์ฉ ์) (0) | 2021.03.14 |
Ajax์์ ํ์ํ SOP(Same Origin Policy), CORS(Cross-Origin Resource Sharing) ์ ๋ฆฌ (0) | 2021.02.06 |
Ajax(Asynchronous Javascript And Xml) (0) | 2021.02.06 |
Comment