2022-07-19
Work Researchโ
์ค๋์ ๋ฐ๋์ WorkerDOM Scheduler๋ฅผ ์ก์๋ด์.
2022-07-11์ ํ์ธํ 2๊ฐ์ง ์ค์ผ์ค๋ฌ๋ฅผ ํ์ธํ๋ค.
Web Worker Thread์์ ๋ํ๋ AnimationFrame.ts
์ requestAnimationFrame
์ ๊ด๋ จ๋ ๊ฒ์ผ๋ก ๋ณด์ด๊ณ Data Transfer๊ณผ๋ ๋ฌด๊ดํด๋ณด์ธ๋ค (๋ถํ์ค).
์ฆ ์์ธํ๊ฒ ๋ด์ผํ๋ ๊ฒ์ WorkerDOMConfiguration
์ ๋์จ ๋ค์ ๋ถ๋ถ์ด๋ค.
export interface WorkerDOMConfiguration {
// ...
// ---- Optional, with defaults
// Schedules mutation phase.
mutationPump: MutationPumpFunction
// ---- Optional Overrides
// Schedules long task.
longTask?: LongTaskFunction
// ...
}
LongTaskFunction
์ ์ฐจ์ด๋ Promise
๊ฐ ์๋ค๋ ๊ฒ์ด๋ค.
MutationPumpFunction
์ ํ์
์ ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
export type MutationPumpFunction = (flush: Function, phase: Phase) => void
flush
๋ ๋ฌด์ธ๊ฐ ๋ท์ ๋ฆฌ๋ฅผ ํ๋ ํจ์์ฒ๋ผ ๋ณด์ธ๋ค (๋ถํ์ค).
Phase
๋ ๋ค์๊ณผ ๊ฐ๋ค.
export const enum Phase {
Initializing = 0,
Hydrating = 1,
Mutating = 2,
}
InboundWorkerDOMConfiguration
๊ณผ WorkerDOMConfiguration
์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ?
์ฐ์ ๋ค์๊ณผ ๊ฐ์ ๋ณํ ํจ์๊ฐ ์๋ค.
InboundWorkerDOMConfiguration
์๋ ์๋ ๊ธฐ๋ณธ๊ฐ์ ์ค์ ํด์ค๋ค.
export function normalizeConfiguration(config: InboundWorkerDOMConfiguration): WorkerDOMConfiguration {
return Object.assign(
{},
{
mutationPump: requestAnimationFrame.bind(null),
executorsAllowed: DefaultAllowedMutations,
},
config
)
}
InboundWorkerDOMConfiguration
๊ทธ๋ฆฌ๊ณ normalizeConfiguration
์ด Main Thread install.ts
์๋ง ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก ๋ณด์ ์ต์ด ์ค์น ์์๋ง InboundWorkerDOMConfiguration
์ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค.
๋๋์ฒด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ค์ผ์ค๋ฌ๊ฐ ๋์ํ๋์ง ์์ง ์ดํด๊ฐ ๋์ง ์๋๋ค.
์์ ์ค์ผ์ค๋ฌ๊ฐ ์์ํ๋ ๋๊ธฐ์ ์ธ ํ์ด๋จธ๊ฐ ์๋ ๊ฒ์ด ์๋ ๊ฒ ๊ฐ๋ค (๋ถํ์ค).
requestAnimationFrame
์ ์ํด ๋์ํ๋ ๊ฒ ๊ฐ๋ค (๋ถํ์ค).
์ด ๊ฐ์ ์ด ๋ง๋ค๋ฉด requestAnimationFrame
์ด ์ด๋ค ์์ผ๋ก ๋์ํ๋์ง ํ์ธํด์ผ ํ๋ค.
Timโ
Tim๊ณผ 2์๊ฐ ๊ฐ๋ ์ด์ผ๊ธฐํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- (๋ถํ์ค)
- Web Worker Thread์
MutationTransfer.ts
์transferSync
๋ ์ด์ด๋ฅผ ๋ง๋ ๋ค. TransferrableKeys
์ Sync ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ํค๋ฅผ ์ถ๊ฐํ๋ค.- ๋๊ธฐ์ ์ธ ์ฐ์ฐ์ด ํ์ํ ๊ฒฝ์ฐ
- Web Worker Thread
transferSync
์์ SAB๋ฅผ ํ๋ ํ ๋นํ๋ค TransferrableKeys
๋ฅผ ํตํด ํ์ธํ๋ค- Main Thread์์ Atomic Wait๋ฅผ ๊ฑด๋ค
- Main Thread์ ํด๋น ํ๋ก์ธ์์์ ์์ ์ ์ฒ๋ฆฌํ๋ค
- ๋ฐ์ SAB์ ๋ฐ์ดํฐ๋ฅผ ์ฑ์ด๋ค
- Web Worker Thread์ Atomic Notify๋ฅผ ํ๋ค
- Web Worker Thread
(๋ถํ์ค) Message ํ์์ ์๋ก ๋ง๋ค์ด์ผ ํ ๊ฒ ๊ฐ๊ณ Processor๋ ์ฌํ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.