2022-07-19
Work Researchโ
์ค๋์ ๋ฐ๋์ WorkerDOM Scheduler๋ฅผ ์ก์๋ด์.
2022-07-11์ ํ์ธํ 2๊ฐ์ง ์ค์ผ์ค๋ฌ๋ฅผ ํ์ธํ๋ค.
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์๊ฐ ๊ฐ๋ ์ด์ผ๊ธฐํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- (๋ถํ์ค)
- Worker Thread์
MutationTransfer.ts
์transferSync
๋ ์ด์ด๋ฅผ ๋ง๋ ๋ค. TransferrableKeys
์ Sync ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ํค๋ฅผ ์ถ๊ฐํ๋ค.- ๋๊ธฐ์ ์ธ ์ฐ์ฐ์ด ํ์ํ ๊ฒฝ์ฐ
(๋ถํ์ค) Message ํ์์ ์๋ก ๋ง๋ค์ด์ผ ํ ๊ฒ ๊ฐ๊ณ Processor๋ ์ฌํ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.