Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
JavaScript を書き始める前に知っておきたい JavaScript のこと #03
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kotaro Chiba
June 27, 2020
Technology
1
450
JavaScript を書き始める前に知っておきたい JavaScript のこと #03
JavaScript の実行を制御している `イベントループ` の仕組みに迫ってみます
Kotaro Chiba
June 27, 2020
Tweet
Share
More Decks by Kotaro Chiba
See All by Kotaro Chiba
JavaScript を書き始める前に知っておきたい JavaScript のこと #05
uruha
1
520
JavaScript を書き始める前に知っておきたい JavaScript のこと #04
uruha
1
570
DMM.com のフロントエンド 今・今後 / Think ! FrontEnd #01
uruha
1
1.6k
JavaScript を書き始める前に知っておきたい JavaScript のこと #02
uruha
1
1.4k
JavaScript を書き始める前に知っておきたい JavaScript のこと
uruha
1
750
JavaScript を書き始める前にやっておきたいこと / Kanazawa.js meetup #1
uruha
1
1.2k
JConf JP Sponsor talk DMM.com / TECH VISION に向けての取り組み
uruha
1
500
Other Decks in Technology
See All in Technology
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
SRE Enabling戦記 - 急成長する組織にSREを浸透させる戦いの歴史
markie1009
0
170
生成AIと余白 〜開発スピードが向上した今、何に向き合う?〜
kakehashi
PRO
0
160
AWS Network Firewall Proxyを触ってみた
nagisa53
1
240
AI駆動開発を事業のコアに置く
tasukuonizawa
1
370
顧客との商談議事録をみんなで読んで顧客解像度を上げよう
shibayu36
0
320
【Ubie】AIを活用した広告アセット「爆速」生成事例 | AI_Ops_Community_Vol.2
yoshiki_0316
1
120
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
190
制約が導く迷わない設計 〜 信頼性と運用性を両立するマイナンバー管理システムの実践 〜
bwkw
3
1k
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
240
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
270
Why Organizations Fail: ノーベル経済学賞「国家はなぜ衰退するのか」から考えるアジャイル組織論
kawaguti
PRO
1
200
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
247
13k
エンジニアに許された特別な時間の終わり
watany
106
230k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Automating Front-end Workflow
addyosmani
1371
200k
30 Presentation Tips
portentint
PRO
1
220
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.4k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
830
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
130
We Have a Design System, Now What?
morganepeng
54
8k
KATA
mclloyd
PRO
34
15k
Transcript
JavaScript を書き始める前に知 っておきたい JavaScript のこと #03 Kanazawa.js Remote Meetup #04
千葉 弘太郎 1 1
千葉 弘太郎(ちば こうたろう) Kotaro Chiba Twitter: @ur_uha Github: uruha Work:
DMM.com LLC 2 2
前回 JavaScript を書き始める前に知っておきたい JavaScript のこと #02 「ざっくり知る」JavaScript の prototype について
3 3
今回 JavaScript の実⾏順に迫る イベントループ の仕組み 4 4
JavaScript が実⾏される環境 シングルスレッド で⼀度に実⾏できるタスクは1つのみ 5 5
´・ω・` 。o0(じゃあどうやってあんなにたくさんの⾮同期 の処理を実⾏できてるの???) 6 6
´・ω・` 。o0(処理に30秒かかる実⾏があったら30秒間⽌ まっちゃうんですか...???ツライ...) 7 7
実際は... . イベントループ . Web API を駆使して⾮同期的な処理をしているように⾒せている。 8 8
JavaScript は以下のような関係性で処理を⾏っています。 Call Stack ───────→ Web API │ │ │
│ │ │ Event Loop ←──────→ ⏯ Queue 9 9
/** 1 */ function start() { return 'start :)'; }
/** 2 */ function asyncFunc() { return setIimeout(() => 'exec !', 1000); } /** 3 */ function end() { return 'end ;)'; } start(); // start :) asyncFunc(); // exec ! end(); // end ;) 10 10
なんとなく 1. start :) -> 3. end ;) -> 2.
exec ! の順で結果が出⼒されるのは予想できる。 11 11
なんでかな? 12 12
/** 1 */ function start() { return 'start :)'; }
Call Stack ───────→ Web API [start()] │ │ │ │ │ │ Event Loop ←──────→ ⏯ Queue start() は call stack で呼び出されて、 start :) が出⼒されて終わる(ポップされる) 13 13
/** 2 */ function asyncFunc() { return setIimeout(() => 'exec
!', 1000); } Call Stack ───────→ Web API [asyncFunc()] [() => 'exec !', 1000sec] [setTimeout()] │ │ │ │ │ │ │ Event Loop ←──────→ ⏯ Queue asyncFunc() が実⾏されて setTimeout が callback を WebAPI に追加します。 asyncFunc, setTimeout はこれでポップ。 14 14
Call Stack ───────→ Web API [end()] [after 1000sec] │ │
│ │ │ │ Event Loop ←──────→ ⏯ Queue [() => 'exec !'] 1秒後に callback 内の () => 'exec !' が queue へ。 call stack 側にはまだ end() がいるので、先に end() が 実⾏されます。 15 15
Call Stack ───────→ Web API [() => 'exec !'] │
│ │ │ │ │ Event Loop ←──────→ ⏯ Queue Event loop が call stack に何も無いことを確認して、 queue の callback関数を実⾏します。 16 16
まとめ . 関数の実⾏は call stack で . 関数の処理によっては Web API
を介して callback など queue に待機させる . Event loop は call stack と queue を監視している . Call stack に実⾏する関数が無くなった時 event loop が queue に溜まっている関数を call stack へ移して実⾏ 17 17
ちょっと詳しく Queue にはいくつか種類がある Macrotask setTimeout | setInterval | setImmediate Microtask
process.nextTick | Promise callback ...etc Event loop が実⾏する queue の順序は Microtask > Macrotask の順 18 18
次回 どうしようかな... ´・ω・` OOPとかをプロトタイプで説明してもちょっと過去の産物 になりそうなので、違うネタにする予定 なにか要望ありますか? 19 19