RAIL - ChoDragon9/posts GitHub Wiki

https://web.dev/rail/

RAIL은 μ›Ή μ•±μ˜ μ£Όμš” μž‘μ—…μΈ Response, Animation, Idle, Load의 μ•½μžλ‹€. μ‚¬μš©μžμ˜ κ²½ν—˜μ„ μ£Όμš” μž‘μ—…μœΌλ‘œ λ‚˜λˆ„κ³  각각의 μ„±λŠ₯ λͺ©ν‘œλ₯Ό μ •μ˜ν•˜λŠ” 데 도움이 λœλ‹€. μ„±λŠ₯ λͺ©ν‘œλŠ” μ‚¬μš©μžκ°€ 지연을 μΈμ‹ν•˜λŠ” 방식에 λŒ€ν•œ μ»¨ν…μŠ€νŠΈ 및 UX 연ꡬλ₯Ό 기반으둜 μ •μ˜λ˜μ—ˆλ‹€.

μ„±λŠ₯ 지연 μ‹œκ°„μ— λ”°λ₯Έ μ‚¬μš©μž κ²½ν—˜

1. 0 ~ 16ms

이 κΈ°κ°„ 내에 μ‘λ‹΅ν•˜λ©΄ μ• λ‹ˆλ©”μ΄μ…˜μ΄ λΆ€λ“œλŸ½λ‹€κ³  μΈμ‹ν•œλ‹€. μ™œλƒν•˜λ©΄, μ‚¬μš©μžλŠ” λͺ¨μ…˜ 좔적이 λŠ₯μˆ™ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. λΈŒλΌμš°μ €κ°€ μƒˆ ν”„λ ˆμž„μ„ 화면에 κ·Έλ¦¬λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„μ„ ν¬ν•¨ν•˜λ©΄, ν”„λ ˆμž„λ‹Ή 16ms이닀.

2. 0 ~ 100ms

이 κΈ°κ°„ 내에 μ‘λ‹΅ν•˜λ©΄ 즉각적인 λ°˜μ‘μœΌλ‘œ λŠλ‚€λ‹€. 이 기간을 λ„˜μ–΄κ°€λ©΄ 행동과 응닡이 λŠμ–΄μ‘Œλ‹€κ³  λŠλ‚€λ‹€.

3. 100 ~ 1000ms

이 κΈ°κ°„ λ‚΄μ—μ„œλŠ” μžμ—°μŠ€λŸ½κ³  지속적인 μž‘μ—… μ§„ν–‰μ˜ μΌλΆ€λ‘œ λŠλ‚€λ‹€. λŒ€λΆ€λΆ„ μ›Ή νŽ˜μ΄μ§€ λ‘œλ“œλ‚˜ νŽ˜μ΄μ§€ λ³€κ²½ μž‘μ—…μ„ λ‚˜νƒ€λ‚Έλ‹€.

4. 1000ms 이상

1000msλ₯Ό λ„˜μœΌλ©΄ μ‚¬μš©μžλŠ” μˆ˜ν–‰ 쀑인 μž‘μ—…μ— μ§‘μ€‘ν•˜μ§€ λͺ»ν•œλ‹€.

5. 10000ms 이상

10000msλ₯Ό λ„˜μœΌλ©΄ μ‚¬μš©μžλŠ” μ‹€λ§ν•˜κ³  μž‘μ—…μ„ 포기할 κ°€λŠ₯성이 크닀. λ‚˜μ€‘μ— λ‹€μ‹œ λ°©λ¬Έν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€.

λ„€νŠΈμ›Œν¬ μƒνƒœμ™€ ν•˜λ“œμ›¨μ–΄μ— λ”°λ₯Έ μ‚¬μš©μžμ˜ μ„±λŠ₯ 지연 κ²½ν—˜

μ‚¬μš©μžλŠ” 본인의 λ„€νŠΈμ›Œν¬ μƒνƒœμ™€ ν•˜λ“œμ›¨μ–΄μ— 따라 μ„±λŠ₯ 지연을 λ‹€λ₯΄κ²Œ μΈμ‹ν•œλ‹€. λΉ λ₯Έ λ„€νŠΈμ›Œν¬ μƒνƒœμ— λΉ λ₯Έ λ°μŠ€ν¬ν†± μ»΄ν“¨ν„°μ—μ„œλŠ” μ‚¬μ΄νŠΈλ₯Ό λ‘œλ“œν•˜λŠ” 것을 1초 이내에 λ°œμƒν•˜λŠ” 것에 μ΅μˆ™ν•˜λ‹€. ν•˜μ§€λ§Œ 느린 3G μ—°κ²°λ‘œ λͺ¨λ°”일 μž₯μΉ˜μ— μ‚¬μ΄νŠΈλ₯Ό λ‘œλ“œν•˜λŠ” 것은 더 였래 걸리기 λ•Œλ¬Έμ— λͺ¨λ°”일 μ‚¬μš©μžλŠ” 인내심이 더 λ§Žλ‹€. κ·Έλž˜μ„œ λͺ¨λ°”μΌμ—μ„œλŠ” 5초 이내에 λ‘œλ“œν•˜λŠ” 것이 더 ν˜„μ‹€μ μΈ λͺ©ν‘œλ‹€.

RAIL μ£Όμš” μž‘μ—… 4가지

Response

μ‚¬μš©μž μž…λ ₯이 μ‹œμž‘ν•˜κ³  μƒν˜Έμž‘μš©μ΄ 즉각적인 κ²ƒμ²˜λŸΌ λŠλΌλ„λ‘ ν•˜λ €λ©΄ 100ms 이내에 λ°˜μ‘ν•΄μ•Ό ν•œλ‹€. λ²„νŠΌ 클릭, μ• λ‹ˆλ©”μ΄μ…˜ μ‹œμž‘κ³Ό 같은 λŒ€λΆ€λΆ„μ˜ μž…λ ₯을 μ˜λ―Έν•˜κ³ , ν„°μΉ˜ λ“œλž˜κ·Έμ™€ μŠ€ν¬λ‘€μ„ ν•΄λ‹Ήλ˜μ§€ μ•ŠλŠ”λ‹€.

이벀트 처리 μ‹œκ°„μ€ 50ms 이내에 μ²˜λ¦¬ν•΄μ•Ό ν•œλ‹€. λ§Œμ•½μ— 50ms 이상 걸리면 μ‚¬μš©μžμ—κ²Œ λ‹€λ₯Έ λ°˜μ‘μ„ λ¨Όμ € μ œκ³΅ν•΄μ•Ό ν•œλ‹€.

100ms 이내 λ°˜μ‘ν•΄μ•Ό ν•˜λŠ” 데, μ²˜λ¦¬μ‹œκ°„μ΄ 50ms밖에 μ•ˆλ˜λŠ” 이유

[1] Idle Time Garbage Collection Scheduling > 4. Idle Task Scheduling

크둬 λΈŒλΌμš°μ €μ—μ„œλŠ” 유휴 μ‹œκ°„μ„ 50ms[1]둜 μ œν•œν•œλ‹€. μ‚¬μš©μžκ°€ λ°œμƒν•˜λŠ” μž…λ ₯은 μ΅œλŒ€ 50ms λ™μ•ˆ λŒ€κΈ°ν•  수 μžˆλ‹€. κ·Έλž˜μ„œ μž…λ ₯ 처리 μ‹œκ°„μ€ μ΅œλŒ€ 50ms λ™μ•ˆ μ‚¬μš©ν•  수 μžˆλ‹€κ³  κ°€μ •ν•˜λŠ” 것이닀.

Animation

Animation은 λΉ„μ£Όμ–Ό μ• λ‹ˆλ©”μ΄μ…˜, λ‘œλ”©, 슀크둀, λ“œλž˜κ·Έμ™€ 같은 것을 μ˜λ―Έν•œλ‹€.

각 ν”„λ ˆμž„μ„ 10ms μ΄ν•˜λ‘œ 생성해야 ν•œλ‹€. μ™œλƒν•˜λ©΄, ν”„λ ˆμž„μ˜ μ΅œλŒ€ μ‹œκ°„μ€ 16msμ΄μ§€λ§Œ λΈŒλΌμš°μ €λŠ” λ Œλ”λ§ν•˜λŠ” 데 μ•½ 6msκ°€ ν•„μš”ν•˜λ―€λ‘œ μ²˜λ¦¬μ‹œκ°„μ€ 10msκ°€ λœλ‹€.

μ• λ‹ˆλ©”μ΄μ…˜μ΄ 60fpsκ°€ μ•ˆλ  λ•ŒλŠ” λ Œλ”λ§ μ„±λŠ₯을 μ°Έμ‘°ν•΄μ„œ ν•΄κ²°ν•œλ‹€.

Idle

유휴 μ‹œκ°„μ— 데이터 λ‘œλ“œ, μ‚¬μš©μž μž…λ ₯ 응닡이 λ°œμƒν•˜λŠ” 데, 유휴 μ‹œκ°„μ„ 가지지 μ•ŠμœΌλ©΄ 이것듀을 λ°©ν•΄ν•  수 μžˆλ‹€.

Load

첫 번째 λ‘œλ“œλŠ” λͺ¨λ°”일 μ‚¬μš©μž μž₯μΉ˜μ™€ 느린 λ„€νŠΈμ›Œν¬λ₯Ό κ³ λ €ν•΄μ„œ 5초 이내에 λ‘œλ“œ λΌμ•Όν•˜κ³ , 후속 λ‘œλ“œλŠ” 2초 이내에 λ‘œλ“œν•˜λŠ” 것이 μ’‹λ‹€. 첫 번째 λ‘œλ“œμ—μ„œ λͺ¨λ“  λ¦¬μ†ŒμŠ€λ₯Ό λ‘œλ“œ ν•  ν•„μš”λŠ” 없이 지연 λ‘œλ”© 이미지, μ½”λ“œ λ²ˆλ“€λ§μ„ 톡해 지연 λ‘œλ“œλ‘œ 후속 λ‘œλ“œλ₯Ό ν•˜λŠ” 게 μ’‹λ‹€.

λ„€νŠΈμ›Œν¬ 속도 및 λŒ€κΈ° μ‹œκ°„, ν•˜λ“œμ›¨μ–΄(예: 느린 CPU), μΊμ‹œ, JS ꡬ문 뢄석 등이 λ‘œλ“œμ— 영ν–₯을 λ―ΈμΉœλ‹€.

⚠️ **GitHub.com Fallback** ⚠️