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
modernweb 2017
Search
CypressKuo
September 20, 2017
Technology
0
75
modernweb 2017
心得分享
CypressKuo
September 20, 2017
Tweet
Share
More Decks by CypressKuo
See All by CypressKuo
Deep-copying.pdf
cypresskuo
0
28
CSS_for_Web_Vitals.pdf
cypresskuo
0
35
談談_Code_review.pdf
cypresskuo
0
42
REST_vs_GraphQL_今夜はご注文はどっち.pdf
cypresskuo
0
21
CSS_重構.pdf
cypresskuo
0
22
跟上_JS_的腳步-ES2020.pdf
cypresskuo
0
26
Core_Web_Vitals.pdf
cypresskuo
0
51
這個時代人人都知道的敏捷開發.pdf
cypresskuo
0
55
Webassembly.pdf
cypresskuo
0
11
Other Decks in Technology
See All in Technology
Language Update: Java
skrb
2
290
人工衛星のファームウェアをRustで書く理由
koba789
15
7.7k
20250903_1つのAWSアカウントに複数システムがある環境におけるアクセス制御をABACで実現.pdf
yhana
3
550
Android Audio: Beyond Winning On It
atsushieno
0
110
react-callを使ってダイヤログをいろんなとこで再利用しよう!
shinaps
1
240
AIエージェント開発用SDKとローカルLLMをLINE Botと組み合わせてみた / LINEを使ったLT大会 #14
you
PRO
0
110
ChatGPTとPlantUML/Mermaidによるソフトウェア設計
gowhich501
1
130
KotlinConf 2025_イベントレポート
sony
1
130
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
160
未経験者・初心者に贈る!40分でわかるAndroidアプリ開発の今と大事なポイント
operando
5
480
Rustから学ぶ 非同期処理の仕組み
skanehira
1
130
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
240
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
13k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Designing Experiences People Love
moore
142
24k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
How to train your dragon (web standard)
notwaldorf
96
6.2k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
Navigating Team Friction
lara
189
15k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
GitHub's CSS Performance
jonrohan
1032
460k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
358
30k
Transcript
ModernWeb 2017 ⼼心得報告分享 2017/09/20 前端組 CypressKuo
關於 JavaScript 非同步的那些事兒 By 陳鋒逸(陳⼩小風)
Agenda • JavaScript 與非同步 • Callback & Promise • Iterator
& Generator • Async & Await
JavaScript 與非同步
None
JavaScript • 單執⾏行行緒 • 非同步 • 非阻塞式
單執⾏行行緒 • 核⼼心特徵 • 瀏覽器導向 • 避免複雜性 • HTML5 Web
Worker
非同步/非阻塞 打電話訂書 店員:稍等,我查⼀一下 店員回覆 等待 店員:我查⼀一下,晚點再 回覆你 店員回電 等待 做其他事
乾等 同步 非同步 (非阻塞) (阻塞)
None
Call Stack Web Apis Callback Queue http://latentflip.com/loupe
Call Stack Web Apis Callback Queue http://latentflip.com/loupe i = 0
Call Stack Web Apis Callback Queue http://latentflip.com/loupe i < 4
Call Stack Web Apis Callback Queue http://latentflip.com/loupe setTimeout(function () {
console.log(i); }, 0)
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() i ++
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() i
< 4
Call Stack Web Apis Callback Queue http://latentflip.com/loupe setTimeout(function () {
console.log(i); }, 0) Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() i ++
Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() i
< 4 Anonymous() Anonymous()
…
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous() Anonymous() Console.log(i)
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous()
Call Stack Web Apis Callback Queue http://latentflip.com/loupe Anonymous() Anonymous() Anonymous()
Anonymous() Anonymous() Anonymous() Anonymous() Console.log(i)
PIXNET wiki Front-end Team cctsao - JavaScript VM 如何解析 Code
cctsao - JavaScript Async & Event Loop
Callback & Promise
Callback • 非同步 • 滿⾜足情境時觸發 • 複雜邏輯不好維護 • 較難處理理錯誤 圖片出處:https://brunolm.wordpress.com/2017/01/13/using-asyncawait-in-typescript-javascript/
Promise • 兼容性 • 狀狀態明確 • 可以連續執⾏行行 • 更更好維護/閱讀
Promise Success Failure
Can I Use Promise? https://caniuse.com/#search=promise
Iterator & Generator
Iterator • 佔記憶體空間 • 記憶體讀寫花時間 • 處理理 10000 個物件
Generator • ⼀一次⼀一個 • 停在上次執⾏行行之處 • 節省記憶體
Generator + co library • 暫時交出執⾏行行權 • 封裝非同步任務,處理理 Promise •
邏輯清楚好理理解 • 讓 Generator ⾃自動執⾏行行 https://github.com/tj/co
Async & Await
Async & Await • 結合 Promise 與 Generator + co
• 不需要第三⽅方套件 • 將非同步化程式同步化 • 直覺性的邏輯思考 • ES7, TypeScript, Node 7.6 ⽀支援
Async & Await • async - 標著在 function 前⾯面 •
await - 標著在 promise 前⾯面 • ⼀一定要⽤用 function 包裝
Can I Use Async? https://caniuse.com/#search=promise
回顧
Callback https://caniuse.com/#search=promise
Promise https://caniuse.com/#search=promise
Generator + co https://caniuse.com/#search=promise
async & await https://caniuse.com/#search=promise
總結 • 善⽤用非同步 • 學習新寫法、新技術 • 理理解運作機制 • 節省開發/除錯時間
學習新技術,讓我們更更優雅更更快速解決問題
Reference • http://s.itho.me/modernweb/2017/day2/403-3-陳⼩小風.pdf • https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/ Promise • https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Statements/ async_function •
https://medium.com/@peterchang_82818/javascript-es7-async-await-教 學-703473854f29-tutorial-example-703473854f29 • https://jigsawye.com/2016/04/18/understanding-javascript-async-await/ • https://mlwmlw.org/2016/03/es7-的-async-await-入⾨門/ • https://noootown.wordpress.com/2016/11/13/callback-promise-fetch-yield-async- await/