๐Ÿธminzzi
Minzzi์•ผ
๐Ÿธminzzi
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (132)
    • ์˜ค๋ฅ˜ํ•ด๊ฒฐ (14)
    • FE (36)
      • Next.js (17)
      • React (4)
      • React Native (0)
      • TypeScript (1)
      • JavaScript (14)
    • BE (0)
      • Nest.js (0)
    • ๋ฐ๋ธŒ์ฝ”์Šค (7)
    • ์›น ํ”„๋กœ์ ํŠธ (5)
    • CS (28)
      • Algorithm (5)
      • Python (4)
      • C++ (2)
      • Operating System (4)
      • Computer Networking (3)
      • Data Structure (1)
      • Machine Learning (3)
      • Tip (6)
    • Github (4)
    • Flutter (3)
      • ํ”„๋กœ์ ํŠธ (3)
    • Private (3)
      • ํšŒ๊ณ  (7)
      • ๋ฉด์ ‘ (17)
    • ๊ฐœ๋ฐœ๋„์„œ (7)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์ฝœ์Šคํƒ
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
  • ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
  • ์ด๋ฒคํŠธ๋ฃจํ”„
  • ๋ ‰์‹œ์ปฌ
  • reflow
  • ์›์‹œํƒ€์ž…
  • ๋ชจ๋˜๋ฆฌ์•กํŠธ๋”ฅ๋‹ค์ด๋ธŒ
  • SSR
  • ํ˜ธ์ด์ŠคํŒ…
  • layout shift
  • next.js
  • ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
  • ์‹คํ–‰์ปจํƒ์ŠคํŠธ
  • ์ด๋ฏธ์ง€ ์ตœ์ ํ™”
  • react
  • ์˜ค๋ธ”์™„
  • ํž™์˜์—ญ
  • ์‹คํ–‰์ปจํ…์ŠคํŠธ
  • ๋ฉด์ ‘

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
๐Ÿธminzzi

Minzzi์•ผ

[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] Layout Shift ํ•ด๊ฒฐํ•˜๊ธฐ
์˜ค๋ฅ˜ํ•ด๊ฒฐ

[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] Layout Shift ํ•ด๊ฒฐํ•˜๊ธฐ

2024. 11. 15. 18:07

์˜จ๋ผ์ธ ์ „์‹œํšŒ๋ฅผ ๋ฌดํƒˆํ•˜๊ฒŒ ์šด์˜ํ•˜๊ณ  (์šด์˜ํ•˜๋Š” ๋™์•ˆ ํฐ ์ด์Šˆ๊ฐ€ ์—†์—ˆ๊ณ  ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์œผ๋ฉฐ ๊ณ„์† ๊ฐœ์„ ํ•ด๋‚˜์•„๊ฐ”๋‹ค!) ๋งํฌ๋“œ์ธ์—๋„ ๊ธ€์„ ์˜ฌ๋ฆฌ๋ฉฐ ์šด์˜ ๊ฒฝํ—˜์„ ํฌํ•จํ•ด ์›น์‚ฌ์ดํŠธ๋ฅผ ํ™๋ณดํ–ˆ์Šต๋‹ˆ๋‹ค.

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฐ๋ธŒ์ฝ”์Šค๋ฅผ ํ•˜๋ฉด์„œ ๋งŒ๋‚œ ํ›Œ๋ฅญํ•œ ๋ฉ˜ํ† ๋‹˜์ด ๊ณ„์‹œ๋Š”๋ฐ, ์—ฌ์ญค๋ณผ ๊ฒƒ์ด ์žˆ์–ด์„œ ์ด๊ฒƒ์ €๊ฒƒ ์—ฌ์ญค๋ณด๋‹ค๊ฐ€ ๋ฉ˜ํ† ๋‹˜๋„ ๋งํฌ๋“œ์ธ ๊ฒŒ์‹œ๊ธ€์„ ํ™•์ธํ–ˆ๋‹ค๋ฉฐ ๊ฐœ์„  ์‚ฌํ•ญ๋“ค์„ ์ถ”์ฒœํ•ด์ฃผ์…จ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ Layout Shift!!


Layout Shift๋กœ ์ธํ•œ ๋ฌธ์ œ์ 

๋งํฌ๋“œ์ธ์œผ๋กœ๋ถ€ํ„ฐ ์ฒ˜์Œ์œผ๋กœ ์›น์‚ฌ์ดํŠธ๋ฅผ ์ ‘์†ํ•˜๋Š” ์‚ฌ์šฉ์ž(ํŠนํžˆ ๋ฐ์Šคํฌํƒ‘ ์‚ฌ์šฉ์ž)๋“ค์€ ์›น์„ฑ๋Šฅ์ด ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์šฉ์ž๋ณด๋‹ค ์ข‹์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์Šคํฌํƒ‘ ์ฒซ ํ™”๋ฉด์— ๋กœ๋”ฉ๋˜๋Š” ๋น„๋””์˜ค๊ฐ€ ๋А๋ฆฌ๊ฒŒ ๋กœ๋”ฉ๋˜์—ˆ๊ณ , ์ด๋กœ ์ธํ•ด ๋กœ๊ณ  ์ด๋ฏธ์ง€๊ฐ€ ์œ„๋กœ ์˜ฌ๋ผ์˜ค๋Š” Layout Shift ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค..

Layout Shift๊ฐ€ ์ผ์–ด๋‚œ ํ™”๋ฉด(์™ผ์ชฝ)๊ณผ ์ •์ƒํ™”๋ฉด(์˜ค๋ฅธ์ชฝ)
CLS ์ ์ˆ˜

์œ„ ์‚ฌ์ง„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋น„๋””์˜ค๊ฐ€ ๋กœ๋”ฉ๋  ๋•Œ๊นŒ์ง€ Layout Shift๊ฐ€ ์ผ์–ด๋‚ฌ๊ณ , ๋น„๋””์˜ค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋กœ๋”ฉ๋˜์–ด ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๊ฒŒ ๋˜๋ฉด ๋กœ๊ณ  ์ด๋ฏธ์ง€๊ฐ€ ์•„๋ž˜๋กœ ๋‚ด๋ ค์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์œก์•ˆ์œผ๋กœ๋„ ํ™• ๋„๋Š” ๋ฌธ์ œ์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ์„ ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ CLS ์ ์ˆ˜๋„ 0.224์˜€๋Š”๋ฐ์š”, ์ข‹์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•ด 0.1์  ์•„๋ž˜๋กœ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CLS๋ž€?
Cumulative Layout Shift๋กœ ํŽ˜์ด์ง€์˜ ์ „์ฒด ์ƒ๋ช… ์ฃผ๊ธฐ ๋™์•ˆ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ
์ตœ๋Œ€ ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ ์ ์ˆ˜์ž…๋‹ˆ๋‹ค. 

'์˜ˆ์ƒ์น˜ ๋ชปํ•œ'์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ์ผ์–ด๋‚˜๋Š” Layout Shift๋Š” '์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ' ๋•Œ๋ฌธ์— CLS ๊ณ„์‚ฐ์—์„œ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1๏ธโƒฃ ๋น„๋””์˜ค ์‚ฌ์ด์ฆˆ ๊ณ ์ •

๊ธฐ์กด ์ฝ”๋“œ์—์„œ๋Š” ๋น„๋””์˜ค ์‚ฌ์ด์ฆˆ๋ฅผ ๊ณ ์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ์ด์ฆˆ๋ฅผ ๊ณ ์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๋Š” HTML ์š”์†Œ๊ฐ€ ๋กœ๋”ฉ ๋  ๋•Œ๋งˆ๋‹ค ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋น„๋””์˜ค๊ฐ€ ๋กœ๋”ฉ๋œ ์ดํ›„์— ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•˜๊ฒŒ๋˜์–ด reflow๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ์„ฑ๋Šฅ์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ์ €๋Š” ๋น„๋””์˜ค์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด์ฃผ์—ˆ๊ณ , CLS ์ ์ˆ˜๋ฅผ 0.223์ ์—์„œ 0.031์ ์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

className={"sm:hidden w-full h-auto"}

2๏ธโƒฃ ํ”„๋ฆฌ๋กœ๋”ฉ

๋น„๋””์˜ค๋ฅผ ๋ฏธ๋ฆฌ ๋กœ๋”ฉํ•ด๋†“์œผ๋ฉด ๋น„๋””์˜ค๋ฅผ ๋ฏธ๋ฆฌ ์บ์‹œํ•  ์ˆ˜ ์žˆ๊ฒŒ๋˜์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๋””์˜ค ํƒœ๊ทธ์—์„œ๋Š” ํ”„๋ฆฌ๋กœ๋”ฉ์„ ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ์ €๋Š” ๋‘˜ ๋‹ค ์ˆ˜ํ–‰ํ•ด๋ณด๊ณ  CLS ์ ์ˆ˜๋ฅผ ๋น„๊ตํ–ˆ์Šต๋‹ˆ๋‹ค.

1. ๋น„๋””์˜ค ํƒœ๊ทธ์— preload ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํŽ˜์ด์ง€ ๋กœ๋“œ์‹œ ํ”„๋ฆฌ๋กœ๋”ฉํ•˜๊ธฐ

<video preload="auto" src="๋น„๋””์˜ค src" ></video>

์ด๋ฏธ์ง€ ํƒœ๊ทธ์˜ ๊ฒฝ์šฐ preload ์†์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋‹ˆ 2๋ฒˆ์œผ๋กœ ์ง„ํ–‰ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

๊ฒฐ๊ณผ : ๋น„๋””์˜ค ์‚ฌ์ด์ฆˆ ๊ณ ์ • ์ดํ›„ ํ”„๋ฆฌ๋กœ๋”ฉ์„ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ CLS 0.031์ ์œผ๋กœ ๋” ๊ฐœ์„ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด index.html์„ ํŒŒ์‹ฑํ•  ๋•Œ ๋น„๋””์˜ค ํŒŒ์ผ ํ”„๋ฆฌ๋กœ๋”ฉํ•˜๊ธฐ

<link
  rel="preload"
  href="src"
  as="image"
/>

 

๊ฒฐ๊ณผ : 1๋ฒˆ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ 0.031์ ์—์„œ 0์ ์œผ๋กœ CLS๊ฐ€ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


๊ฐ„๋‹จํ•˜๊ฒŒ Layout Shift ๋ฌธ์ œ๋ฅผ ๊ฐœ์„ ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋ดค๋Š”๋ฐ์š”, ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'์˜ค๋ฅ˜ํ•ด๊ฒฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

VSCode Vitest "์ด ์ž‘์—… ์˜์—ญ์—์„œ ์•„์ง ๋ฐœ๊ฒฌ๋œ ํ…Œ์ŠคํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." ์˜ค๋ฅ˜ ํ•ด๊ฒฐ  (0) 2024.09.20
[Docker] docker: Error response from daemon: Ports are not available | address already in use ํฌํŠธ์ถฉ๋Œ ํ•ด๊ฒฐ  (0) 2024.09.20
[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] vite+react-ts+tailwind ์ž‘๋™์•ˆ๋จ ํ•ด๊ฒฐ  (2) 2024.08.16
[ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] Git ํŒŒ์ผ๋ช… ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜ ์ธ์‹ ๋ถˆ๊ฐ€ ๋ฌธ์ œ  (2) 2024.08.14
Express.js CORS ์˜ค๋ฅ˜ ํ•ด๊ฒฐ  (0) 2024.07.28
    '์˜ค๋ฅ˜ํ•ด๊ฒฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • VSCode Vitest "์ด ์ž‘์—… ์˜์—ญ์—์„œ ์•„์ง ๋ฐœ๊ฒฌ๋œ ํ…Œ์ŠคํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค." ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
    • [Docker] docker: Error response from daemon: Ports are not available | address already in use ํฌํŠธ์ถฉ๋Œ ํ•ด๊ฒฐ
    • [ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] vite+react-ts+tailwind ์ž‘๋™์•ˆ๋จ ํ•ด๊ฒฐ
    • [ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…] Git ํŒŒ์ผ๋ช… ๋Œ€์†Œ๋ฌธ์ž ๋ณ€ํ™˜ ์ธ์‹ ๋ถˆ๊ฐ€ ๋ฌธ์ œ
    ๐Ÿธminzzi
    ๐Ÿธminzzi

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”