JavaScriptκ° μ½μ΄ μΉ λ°μ΄νμ λ―ΈμΉλ μν₯μ μ΄ν΄νκ³ , λ λμ μ¬μ©μ κ²½νμ μν΄ μ±λ₯μ μ΅μ ννλ μ λ΅μ λ°°μ보μΈμ.
λΈλΌμ°μ μ±λ₯ μ§ν: JavaScriptκ° μ½μ΄ μΉ λ°μ΄νμ λ―ΈμΉλ μν₯
μ€λλ μ λμ§νΈ νκ²½μμ μΉμ¬μ΄νΈ μ±λ₯μ λ§€μ° μ€μν©λλ€. λ‘λ©μ΄ λ리거λ λ°μμ΄ μλ μΉμ¬μ΄νΈλ μ¬μ©μμ λΆλ§, λμ μ΄νλ₯ , κ·Έλ¦¬κ³ κΆκ·Ήμ μΌλ‘λ μμ΅ μμ€λ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ½μ΄ μΉ λ°μ΄ν(CWV)μ ꡬκΈμ΄ μ μν μΌλ ¨μ μ§νλ‘, λ‘λ©, μνΈμμ©μ±, μκ°μ μμ μ±κ³Ό κ΄λ ¨λ μ¬μ©μ κ²½ν(UX)μ μΈ‘μ ν©λλ€. JavaScriptλ νλ μΉ κ°λ°μ νμμ μ΄μ§λ§, μ΄λ¬ν μ§νμ μλΉν μν₯μ λ―ΈμΉ μ μμ΅λλ€. μ΄ μ’ ν© κ°μ΄λμμλ JavaScriptμ μ½μ΄ μΉ λ°μ΄ν κ°μ κ΄κ³λ₯Ό νꡬνκ³ μ΅μ νλ₯Ό μν μ€ν κ°λ₯ν ν΅μ°°λ ₯μ μ 곡ν©λλ€.
μ½μ΄ μΉ λ°μ΄ν μ΄ν΄νκΈ°
μ½μ΄ μΉ λ°μ΄νμ μΉμ¬μ΄νΈ μ±λ₯ μΈ‘μ μ μν ν΅ν©λ νλ μμν¬λ₯Ό μ 곡ν©λλ€. μ΄λ λ¨μν μμμ μΈ μλμ κ΄ν κ²μ΄ μλλΌ μ¬μ©μκ° μΈμ§νλ κ²½νμ μ΄μ μ λ§μΆ₯λλ€. μΈ κ°μ§ μ£Όμ μ§νλ λ€μκ³Ό κ°μ΅λλ€:
- μ΅λ μ½ν μΈ ν νμΈνΈ (LCP): νμ΄μ§κ° μ²μ λ‘λ©λκΈ° μμν μμ μ κΈ°μ€μΌλ‘, λ·°ν¬νΈ λ΄μμ κ°μ₯ ν° μ½ν μΈ μμ(μ΄λ―Έμ§, λΉλμ€, λΈλ‘ λ 벨 ν μ€νΈ)κ° νμλκΈ°κΉμ§ 걸리λ μκ°μ μΈ‘μ ν©λλ€. μ’μ LCP μ μλ 2.5μ΄ μ΄νμ λλ€.
- μ΅μ΄ μ λ ₯ μ§μ° (FID): μ¬μ©μκ° νμ΄μ§μ μ²μ μνΈμμ©(μ: λ§ν¬ ν΄λ¦, λ²νΌ ν)ν μμ λΆν° λΈλΌμ°μ κ° ν΄λΉ μνΈμμ©μ μλ΅ν μ μμ λκΉμ§μ μκ°μ μΈ‘μ ν©λλ€. μ’μ FID μ μλ 100λ°λ¦¬μ΄ μ΄νμ λλ€.
- λμ λ μ΄μμ μ΄λ (CLS): νμ΄μ§μ μλͺ μ£ΌκΈ° λμ λ°μνλ μκΈ°μΉ μμ λ μ΄μμ μ΄λμ μμ μΈ‘μ ν©λλ€. μ’μ CLS μ μλ 0.1 μ΄νμ λλ€.
μ΄λ¬ν μ§νλ€μ ꡬκΈμ΄ μμ κ²°μ μμΈμΌλ‘ μ¬μ©νκΈ° λλ¬Έμ κ²μ μμ§ μ΅μ ν(SEO)μ λ§€μ° μ€μν©λλ€. CWVλ₯Ό μ΅μ ννλ©΄ μ¬μ©μ κ²½νμ κ°μ ν λΏλ§ μλλΌ κ²μ κ²°κ³Όμμ μΉμ¬μ΄νΈ μμλ₯Ό λμ΄λ λ°λ λμμ΄ λ©λλ€.
JavaScriptκ° μ½μ΄ μΉ λ°μ΄νμ λ―ΈμΉλ μν₯
JavaScriptλ λμ μ΄κ³ μνΈμμ©μ μΈ μΉ κ²½νμ κ°λ₯νκ² νλ κ°λ ₯ν μΈμ΄μ λλ€. κ·Έλ¬λ μ λλ‘ μ΅μ νλμ§ μμ JavaScriptλ μ½μ΄ μΉ λ°μ΄νμ λΆμ μ μΈ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
μ΅λ μ½ν μΈ ν νμΈνΈ (LCP)
JavaScriptλ μ¬λ¬ κ°μ§ λ°©μμΌλ‘ LCPλ₯Ό μ§μ°μν¬ μ μμ΅λλ€:
- λ λλ§ μ°¨λ¨ λ¦¬μμ€:
asyncλλdeferμμ± μμ΄ HTMLμ <head>μ λ‘λλ JavaScript νμΌμ λΈλΌμ°μ κ° νμ΄μ§λ₯Ό λ λλ§νλ κ²μ μ°¨λ¨ν μ μμ΅λλ€. μ΄λ λΈλΌμ°μ κ° μ¬μ©μμκ² λ¬΄μΈκ°λ₯Ό νμνκΈ° μ μ μ΄λ¬ν μ€ν¬λ¦½νΈλ₯Ό λ€μ΄λ‘λ, νμ±, μ€νν΄μΌ νκΈ° λλ¬Έμ λλ€. - κ³Όλν JavaScript μ€ν: μ€λ μ€νλλ JavaScript μμ μ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ¬ λΈλΌμ°μ κ° κ°μ₯ ν° μ½ν μΈ μμλ₯Ό λΉ λ₯΄κ² λ λλ§νλ κ²μ λ°©ν΄ν μ μμ΅λλ€.
- JavaScriptλ₯Ό μ¬μ©ν μ΄λ―Έμ§ μ§μ° λ‘λ©: μ§μ° λ‘λ©μ μ΄κΈ° λ‘λ μκ°μ κ°μ ν μ μμ§λ§, μλͺ» ꡬνλλ©΄ LCPλ₯Ό μ§μ°μν¬ μ μμ΅λλ€. μλ₯Ό λ€μ΄, LCP μμκ° μ§μ° λ‘λ©λλ μ΄λ―Έμ§μΈ κ²½μ°, JavaScriptκ° μ€νλ λκΉμ§ μ΄λ―Έμ§λ₯Ό κ°μ Έμ€μ§ μμ LCPκ° μ§μ°λ μ μμ΅λλ€.
- JavaScriptλ₯Ό μ¬μ©ν ν°νΈ λ‘λ©: JavaScriptλ₯Ό μ¬μ©νμ¬ λμ μΌλ‘ ν°νΈλ₯Ό λ‘λνλ κ²½μ°(μ: Font Face Observer μ¬μ©), LCP μμμ ν΄λΉ ν°νΈκ° μ¬μ©λλ€λ©΄ LCPκ° μ§μ°λ μ μμ΅λλ€.
μμ: LCP μμλ‘ ν° νμ΄λ‘ μ΄λ―Έμ§μ κΈ°μ¬ μ λͺ©μ νμνλ λ΄μ€ μΉμ¬μ΄νΈλ₯Ό μκ°ν΄ 보μΈμ. λ§μ½ μΉμ¬μ΄νΈκ° μ΄λ―Έμ§λ₯Ό λ‘λνκΈ° μ μ λΆμμ΄λ κ΄κ³ λ₯Ό μ²λ¦¬νκΈ° μν΄ ν° JavaScript λ²λ€μ λ‘λνλ€λ©΄, LCPλ μ§μ°λ κ²μ λλ€. μΈν°λ· μ°κ²°μ΄ λλ¦° μ§μ(μ: λλ¨μμμλ μν리카 μΌλΆ)μ μ¬μ©μλ μ΄ μ§μ°μ λ μ¬κ°νκ² κ²½νν κ²μ λλ€.
μ΅μ΄ μ λ ₯ μ§μ° (FID)
FIDλ λΈλΌμ°μ μ λ©μΈ μ€λ λκ° μ ν΄ μνκ° λμ΄ μ¬μ©μ μ λ ₯μ μλ΅νλ λ° κ±Έλ¦¬λ μκ°μ μ§μ μ μΈ μν₯μ λ°μ΅λλ€. JavaScriptλ λ©μΈ μ€λ λ νλμμ μ£Όμ μν μ ν©λλ€.
- κΈ΄ μμ (Long Tasks): κΈ΄ μμ μ μλ£νλ λ° 50λ°λ¦¬μ΄ μ΄μ 걸리λ JavaScript μ€ν λΈλ‘μ λλ€. μ΄λ¬ν μμ μ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ¬ ν΄λΉ μκ° λμ λΈλΌμ°μ κ° μ¬μ©μ μ λ ₯μ μλ΅νμ§ λͺ»νκ² λ§λλλ€.
- μλνν° μ€ν¬λ¦½νΈ: μλνν° μ€ν¬λ¦½νΈ(μ: λΆμ, κ΄κ³ , μμ λ―Έλμ΄ μμ ―)λ μ’ μ’ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νκ³ FIDλ₯Ό μ¦κ°μν¬ μ μλ 볡μ‘ν JavaScript μ½λλ₯Ό μ€νν©λλ€.
- 볡μ‘ν μ΄λ²€νΈ νΈλ€λ¬: λΉν¨μ¨μ μ΄κ±°λ μ λλ‘ μ΅μ νλμ§ μμ μ΄λ²€νΈ νΈλ€λ¬(μ: ν΄λ¦ νΈλ€λ¬, μ€ν¬λ‘€ νΈλ€λ¬)λ κΈ΄ μμ μ μ λ°νκ³ FIDλ₯Ό μ¦κ°μν¬ μ μμ΅λλ€.
μμ: JavaScriptλ₯Ό μ¬μ©νμ¬ κ΅¬μΆλ 볡μ‘ν κ²μ νν° μ»΄ν¬λνΈκ° μλ μ μ μκ±°λ μΉμ¬μ΄νΈλ₯Ό μμν΄ λ³΄μΈμ. κ²°κ³Όλ₯Ό νν°λ§νλ JavaScript μ½λκ° μ΅μ νλμ§ μμΌλ©΄ μ¬μ©μκ° νν°λ₯Ό μ μ©ν λ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨ν μ μμ΅λλ€. μ΄λ¬ν μ§μ°μ λͺ¨λ°μΌ κΈ°κΈ°λ ꡬν νλμ¨μ΄λ₯Ό μ¬μ©νλ μ¬μ©μμκ² νΉν λΆνΈν μ μμ΅λλ€.
λμ λ μ΄μμ μ΄λ (CLS)
JavaScriptλ μ΄κΈ° νμ΄μ§ λ‘λ ν μκΈ°μΉ μμ λ μ΄μμ μ΄λμ μ λ°νμ¬ CLSμ κΈ°μ¬ν μ μμ΅λλ€.
- λμ μΌλ‘ μ£Όμ λ μ½ν μΈ : μ΄κΈ° νμ΄μ§ λ‘λ ν DOMμ μ½ν μΈ λ₯Ό μ½μ νλ©΄ μλμ μλ μμλ€μ΄ μλλ‘ λ°λ €λ μ μμ΅λλ€. μ΄λ νΉν κ΄κ³ , μλ² λλ μ½ν μΈ (μ: μ νλΈ λΉλμ€, μμ λ―Έλμ΄ κ²μλ¬Ό), μΏ ν€ λμ λ°°λμμ νν λ°μν©λλ€.
- ν°νΈ λ‘λ©: νμ΄μ§κ° λ λλ§λ ν μ¬μ©μ μ§μ ν°νΈκ° λ‘λλμ΄ μ μ©λλ©΄ ν μ€νΈκ° 리νλ‘μ°(reflow)λμ΄ λ μ΄μμ μ΄λμ μ λ°ν μ μμ΅λλ€. μ΄λ FOUT(Flash of Unstyled Text) λλ FOIT(Flash of Invisible Text) λ¬Έμ λ‘ μλ €μ Έ μμ΅λλ€.
- μ λλ©μ΄μ
λ° μ ν: μ΅μ νλμ§ μμ μ λλ©μ΄μ
κ³Ό μ νμ λ μ΄μμ μ΄λμ μ λ°ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μμμ
topλλleftμμ±μ μ λλ©μ΄μ μ μ μ©νλ©΄ λ μ΄μμ μ΄λμ΄ λ°μνμ§λ§,transformμμ±μ μ λλ©μ΄μ μ μ μ©νλ©΄ λ°μνμ§ μμ΅λλ€.
μμ: μ¬ν μμ½ μΉμ¬μ΄νΈλ₯Ό μκ°ν΄ 보μΈμ. μ΄κΈ° νμ΄μ§ λ‘λ ν JavaScriptλ₯Ό μ¬μ©νμ¬ κ²μ κ²°κ³Ό μμ νλ‘λͺ¨μ λ°°λλ₯Ό λμ μΌλ‘ μ½μ νλ©΄ μ 체 κ²μ κ²°κ³Ό μΉμ μ΄ μλλ‘ λ°λ €λ μλΉν λ μ΄μμ μ΄λμ μ λ°ν©λλ€. μ΄λ μ¬μ© κ°λ₯ν μ΅μ μ νμνλ €λ μ¬μ©μμκ² νΌλμ€λ½κ³ λΆνΈν μ μμ΅λλ€.
JavaScript μ±λ₯ μ΅μ ν μ λ΅
JavaScript μ±λ₯ μ΅μ νλ μ½μ΄ μΉ λ°μ΄νμ κ°μ νλ λ° λ§€μ° μ€μν©λλ€. λ€μμ ꡬνν μ μλ λͺ κ°μ§ μ λ΅μ λλ€:
1. μ½λ λΆν (Code Splitting)
μ½λ λΆν μ JavaScript μ½λλ₯Ό νμμ λ°λΌ λ‘λν μ μλ λ μμ λ²λ€λ‘ λλλ κ²μ ν¬ν¨ν©λλ€. μ΄λ λ€μ΄λ‘λνκ³ νμ±ν΄μΌ νλ μ΄κΈ° JavaScriptμ μμ μ€μ¬ LCPμ FIDλ₯Ό κ°μ ν©λλ€.
ꡬν:
- λμ μν¬νΈ(Dynamic Imports): λμ μν¬νΈ(
import())λ₯Ό μ¬μ©νμ¬ νμν λλ§ λͺ¨λμ λ‘λν©λλ€. μλ₯Ό λ€μ΄, μ¬μ©μκ° νΉμ κΈ°λ₯μΌλ‘ μ΄λν λλ§ ν΄λΉ κΈ°λ₯μ μ½λλ₯Ό λ‘λν μ μμ΅λλ€. - Webpack, Parcel, Rollup: Webpack, Parcel λλ Rollupκ³Ό κ°μ λͺ¨λ λ²λ€λ¬λ₯Ό νμ©νμ¬ μ½λλ₯Ό μλμΌλ‘ λ μμ μ²ν¬λ‘ λΆν ν©λλ€. μ΄λ¬ν λꡬλ μ½λλ₯Ό λΆμνκ³ μ ν리μΌμ΄μ μ μ’ μμ±μ λ°λΌ μ΅μ νλ λ²λ€μ μμ±ν©λλ€.
μμ: μ¨λΌμΈ νμ΅ νλ«νΌμ μ½λ λΆν μ μ¬μ©νμ¬ μ¬μ©μκ° νΉμ κ°μ’ λͺ¨λμ μ κ·Όν λλ§ ν΄λΉ λͺ¨λμ JavaScript μ½λλ₯Ό λ‘λν μ μμ΅λλ€. μ΄λ κ² νλ©΄ μ¬μ©μκ° λͺ¨λ λͺ¨λμ μ½λλ₯Ό 미리 λ€μ΄λ‘λν νμκ° μμ΄ μ΄κΈ° λ‘λ μκ°μ΄ κ°μ λ©λλ€.
2. νΈλ¦¬ μμ΄νΉ(Tree Shaking)
νΈλ¦¬ μμ΄νΉμ JavaScript λ²λ€μμ μ¬μ©λμ§ μλ μ½λλ₯Ό μ κ±°νλ κΈ°μ μ λλ€. μ΄λ λ²λ€μ ν¬κΈ°λ₯Ό μ€μ¬ LCPμ FIDλ₯Ό κ°μ ν©λλ€.
ꡬν:
- ES λͺ¨λ: ES λͺ¨λ(
importλ°export)μ μ¬μ©νμ¬ JavaScript λͺ¨λμ μ μν©λλ€. κ·Έλ¬λ©΄ Webpack λ° Rollupκ³Ό κ°μ λͺ¨λ λ²λ€λ¬κ° μ½λλ₯Ό λΆμνκ³ μ¬μ©λμ§ μλ exportλ₯Ό μ κ±°ν μ μμ΅λλ€. - μμ ν¨μ(Pure Functions): μμ ν¨μ(λμΌν μ λ ₯μ λν΄ νμ λμΌν μΆλ ₯μ λ°ννκ³ λΆμ ν¨κ³Όκ° μλ ν¨μ)λ₯Ό μμ±νμ¬ λͺ¨λ λ²λ€λ¬κ° μ¬μ©λμ§ μλ μ½λλ₯Ό λ μ½κ² μλ³νκ³ μ κ±°ν μ μλλ‘ ν©λλ€.
μμ: μ½ν μΈ κ΄λ¦¬ μμ€ν (CMS)μλ λκ·λͺ¨ μ νΈλ¦¬ν° ν¨μ λΌμ΄λΈλ¬λ¦¬κ° ν¬ν¨λ μ μμ΅λλ€. νΈλ¦¬ μμ΄νΉμ μ΄ λΌμ΄λΈλ¬λ¦¬μμ μΉμ¬μ΄νΈ μ½λμ μ€μ λ‘ μ¬μ©λμ§ μλ ν¨μλ₯Ό μ κ±°νμ¬ JavaScript λ²λ€μ ν¬κΈ°λ₯Ό μ€μΌ μ μμ΅λλ€.
3. μΆμ(Minification) λ° μμΆ(Compression)
μΆμλ JavaScript μ½λμμ λΆνμν λ¬Έμ(μ: 곡백, μ£Όμ)λ₯Ό μ κ±°ν©λλ€. μμΆμ Gzip λλ Brotliμ κ°μ μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ JavaScript νμΌμ ν¬κΈ°λ₯Ό μ€μ λλ€. λ κΈ°μ λͺ¨λ JavaScriptμ λ€μ΄λ‘λ ν¬κΈ°λ₯Ό μ€μ¬ LCPλ₯Ό κ°μ ν©λλ€.
ꡬν:
- μΆμ λꡬ: UglifyJS, Terser λλ esbuildμ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ JavaScript μ½λλ₯Ό μΆμν©λλ€.
- μμΆ μκ³ λ¦¬μ¦: μΉ μλ²λ₯Ό ꡬμ±νμ¬ Gzip λλ Brotliλ₯Ό μ¬μ©νμ¬ JavaScript νμΌμ μμΆν©λλ€. Brotliλ μΌλ°μ μΌλ‘ Gzipλ³΄λ€ λ λμ μμΆλ₯ μ μ 곡ν©λλ€.
- μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN): CDNμ μ¬μ©νμ¬ μ¬μ©μμκ² λ κ°κΉμ΄ μλ²μμ μμΆλ JavaScript νμΌμ μ 곡νμ¬ λ€μ΄λ‘λ μκ°μ λμ± λ¨μΆν©λλ€.
μμ: κΈλ‘λ² μ μ μκ±°λ μΉμ¬μ΄νΈλ CDNμ μ¬μ©νμ¬ μ¬λ¬ μ§μμ μμΉν μλ²μμ μΆμ λ° μμΆλ JavaScript νμΌμ μ 곡ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ κ° μ§μμ μ¬μ©μλ μμΉμ κ΄κ³μμ΄ νμΌμ λΉ λ₯΄κ² λ€μ΄λ‘λν μ μμ΅λλ€.
4. defer λ° async μμ±
defer λ° async μμ±μ μ¬μ©νλ©΄ JavaScript νμΌμ΄ λ‘λλκ³ μ€νλλ λ°©μμ μ μ΄ν μ μμ΅λλ€. μ΄λ¬ν μμ±μ μ¬μ©νλ©΄ JavaScriptκ° νμ΄μ§ λ λλ§μ μ°¨λ¨νλ κ²μ λ°©μ§νμ¬ LCPλ₯Ό κ°μ ν μ μμ΅λλ€.
ꡬν:
defer μμ±μ μ¬μ©ν©λλ€. Deferλ λΈλΌμ°μ μκ² μ€ν¬λ¦½νΈλ₯Ό λ°±κ·ΈλΌμ΄λμμ λ€μ΄λ‘λνκ³ HTMLμ΄ νμ±λ νμ μ€ννλλ‘ μ§μν©λλ€. μ€ν¬λ¦½νΈλ HTMLμ λνλλ μμλλ‘ μ€νλ©λλ€.async μμ±μ μ¬μ©ν©λλ€. Asyncλ λΈλΌμ°μ μκ² μ€ν¬λ¦½νΈλ₯Ό λ°±κ·ΈλΌμ΄λμμ λ€μ΄λ‘λνκ³ λ€μ΄λ‘λλλ μ¦μ HTML νμ±μ μ°¨λ¨νμ§ μκ³ μ€ννλλ‘ μ§μν©λλ€. μ€ν¬λ¦½νΈλ HTMLμ λνλλ μμλλ‘ μ€νλλ€λ 보μ₯μ΄ μμ΅λλ€.μμ: λΆμ μ€ν¬λ¦½νΈμλ asyncλ₯Ό μ¬μ©νκ³ , ν΄λ¦¬νκ³Ό κ°μ΄ νΉμ μμλ‘ μ€νλμ΄μΌ νλ μ€ν¬λ¦½νΈμλ deferλ₯Ό μ¬μ©ν©λλ€.
5. μλνν° μ€ν¬λ¦½νΈ μ΅μ ν
μλνν° μ€ν¬λ¦½νΈλ μ½μ΄ μΉ λ°μ΄νμ μλΉν μν₯μ λ―ΈμΉ μ μμ΅λλ€. μ΄λ¬ν μ€ν¬λ¦½νΈμ μν₯μ μ΅μννκΈ° μν΄ μ΅μ ννλ κ²μ΄ μ€μν©λλ€.
ꡬν:
- μλνν° μ€ν¬λ¦½νΈ λΉλκΈ°μ μΌλ‘ λ‘λ:
asyncμμ±μ μ¬μ©νκ±°λ μ΄κΈ° νμ΄μ§ λ‘λ ν DOMμ λμ μΌλ‘ μ£Όμ νμ¬ μλνν° μ€ν¬λ¦½νΈλ₯Ό λ‘λν©λλ€. - μλνν° μ€ν¬λ¦½νΈ μ§μ° λ‘λ©: νμ΄μ§μ μ΄κΈ° λ λλ§μ μ€μνμ§ μμ μλνν° μ€ν¬λ¦½νΈλ₯Ό μ§μ° λ‘λ©ν©λλ€.
- λΆνμν μλνν° μ€ν¬λ¦½νΈ μ κ±°: μΉμ¬μ΄νΈμ μλνν° μ€ν¬λ¦½νΈλ₯Ό μ κΈ°μ μΌλ‘ κ²ν νκ³ λ μ΄μ νμνμ§ μμ μ€ν¬λ¦½νΈλ μ κ±°ν©λλ€.
- μλνν° μ€ν¬λ¦½νΈ μ±λ₯ λͺ¨λν°λ§: WebPageTest λλ Lighthouseμ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ μλνν° μ€ν¬λ¦½νΈμ μ±λ₯μ λͺ¨λν°λ§ν©λλ€.
μμ: μ¬μ©μκ° κΈ°μ¬ μ½ν μΈ κΉμ§ μ€ν¬λ‘€μ λ΄λ¦΄ λκΉμ§ μμ λ―Έλμ΄ κ³΅μ λ²νΌ λ‘λ©μ μ§μ°μν΅λλ€. μ΄λ κ² νλ©΄ μμ λ―Έλμ΄ μ€ν¬λ¦½νΈκ° νμ΄μ§μ μ΄κΈ° λ λλ§μ μ°¨λ¨νλ κ²μ λ°©μ§ν μ μμ΅λλ€.
6. μ΄λ―Έμ§ λ° λΉλμ€ μ΅μ ν
μ΄λ―Έμ§μ λΉλμ€λ μ’ μ’ μΉ νμ΄μ§μμ κ°μ₯ ν° μ½ν μΈ μμμ λλ€. μ΄λ¬ν μμ°μ μ΅μ ννλ©΄ LCPλ₯Ό ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
ꡬν:
- μ΄λ―Έμ§ μμΆ: ImageOptim, TinyPNG λλ ImageKitκ³Ό κ°μ λꡬλ₯Ό μ¬μ©νμ¬ νμ§μ λ무 λ§μ΄ ν¬μνμ§ μμΌλ©΄μ μ΄λ―Έμ§λ₯Ό μμΆν©λλ€.
- μ΅μ μ΄λ―Έμ§ νμ μ¬μ©: JPEGλ PNGλ³΄λ€ λ λμ μμΆμ μ 곡νλ WebP λλ AVIFμ κ°μ μ΅μ μ΄λ―Έμ§ νμμ μ¬μ©ν©λλ€.
- λΉλμ€ μΈμ½λ© μ΅μ ν: λΉλμ€ νμ§μ ν° μν₯μ μ£Όμ§ μμΌλ©΄μ νμΌ ν¬κΈ°λ₯Ό μ€μ΄λλ‘ λΉλμ€ μΈμ½λ© μ€μ μ μ΅μ νν©λλ€.
- λ°μν μ΄λ―Έμ§ μ¬μ©:
<picture>μμ λλ<img>μμμsrcsetμμ±μ μ¬μ©νμ¬ μ¬μ©μμ κΈ°κΈ° λ° νλ©΄ ν¬κΈ°μ λ°λΌ λ€λ₯Έ μ΄λ―Έμ§ ν¬κΈ°λ₯Ό μ 곡ν©λλ€. - μ΄λ―Έμ§ λ° λΉλμ€ μ§μ° λ‘λ©: μ΄κΈ° λ·°ν¬νΈμ 보μ΄μ§ μλ μ΄λ―Έμ§μ λΉλμ€λ₯Ό μ§μ° λ‘λ©ν©λλ€.
μμ: μ¬μ§ μΉμ¬μ΄νΈλ WebP μ΄λ―Έμ§μ λ°μν μ΄λ―Έμ§λ₯Ό μ¬μ©νμ¬ μ¬λ¬ κΈ°κΈ°μ μ¬μ©μμκ² μ΅μ νλ μ΄λ―Έμ§λ₯Ό μ 곡ν¨μΌλ‘μ¨ λ€μ΄λ‘λ ν¬κΈ°λ₯Ό μ€μ΄κ³ LCPλ₯Ό κ°μ ν μ μμ΅λλ€.
7. μ΄λ²€νΈ νΈλ€λ¬ μ΅μ ν
λΉν¨μ¨μ μ΄κ±°λ μ λλ‘ μ΅μ νλμ§ μμ μ΄λ²€νΈ νΈλ€λ¬λ κΈ΄ μμ μ μ λ°νκ³ FIDλ₯Ό μ¦κ°μν¬ μ μμ΅λλ€. μ΄λ²€νΈ νΈλ€λ¬λ₯Ό μ΅μ ννλ©΄ μνΈμμ©μ±μ ν₯μμν¬ μ μμ΅λλ€.
ꡬν:
- λλ°μ΄μ± λ° μ€λ‘νλ§: λλ°μ΄μ± λλ μ€λ‘νλ§μ μ¬μ©νμ¬ μ΄λ²€νΈ νΈλ€λ¬κ° μ€νλλ λΉλλ₯Ό μ νν©λλ€. λλ°μ΄μ±μ λ§μ§λ§ μ΄λ²€νΈκ° λ°μν ν μΌμ μκ°μ΄ μ§λ νμλ§ μ΄λ²€νΈ νΈλ€λ¬κ° μ€νλλλ‘ λ³΄μ₯ν©λλ€. μ€λ‘νλ§μ μ΄λ²€νΈ νΈλ€λ¬κ° νΉμ μκ° λ΄μ μ΅λ ν λ²λ§ μ€νλλλ‘ λ³΄μ₯ν©λλ€.
- μ΄λ²€νΈ μμ: μ΄λ²€νΈ μμμ μ¬μ©νμ¬ κ°λ³ μμ μμμ μ΄λ²€νΈ νΈλ€λ¬λ₯Ό μ°κ²°νλ λμ λΆλͺ¨ μμμ μ°κ²°ν©λλ€. μ΄λ κ² νλ©΄ μμ±ν΄μΌ νλ μ΄λ²€νΈ νΈλ€λ¬μ μκ° μ€μ΄λ€κ³ μ±λ₯μ΄ ν₯μλ©λλ€.
- μ₯κΈ° μ€ν μ΄λ²€νΈ νΈλ€λ¬ νΌνκΈ°: μ΄λ²€νΈ νΈλ€λ¬ λ΄μμ μ₯κΈ° μ€ν μμ μ μννμ§ λ§μμμ€. μμ μ΄ κ³μ° μ§μ½μ μΈ κ²½μ° μΉ μμ»€λ‘ μ€νλ‘λνλ κ²μ κ³ λ €νμμμ€.
μμ: μλ μμ± κ²μ κΈ°λ₯μ΄ μλ μΉμ¬μ΄νΈμμ λλ°μ΄μ±μ μ¬μ©νμ¬ λͺ¨λ ν€ μ λ ₯μ λν΄ API νΈμΆμ νλ κ²μ λ°©μ§ν©λλ€. μ¬μ©μκ° μ§§μ μκ°(μ: 200λ°λ¦¬μ΄) λμ νμ΄νμ λ©μΆ νμλ§ API νΈμΆμ ν©λλ€. μ΄λ κ² νλ©΄ API νΈμΆ μκ° μ€μ΄λ€κ³ μ±λ₯μ΄ ν₯μλ©λλ€.
8. μΉ μ컀(Web Workers)
μΉ μ컀λ₯Ό μ¬μ©νλ©΄ λ©μΈ μ€λ λμ λΆλ¦¬λ λ°±κ·ΈλΌμ΄λμμ JavaScript μ½λλ₯Ό μ€νν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ₯κΈ° μ€ν μμ μ΄ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νλ κ²μ λ°©μ§νκ³ FIDλ₯Ό κ°μ ν μ μμ΅λλ€.
ꡬν:
- CPU μ§μ½μ μμ μ€νλ‘λ: CPU μ§μ½μ μμ (μ: μ΄λ―Έμ§ μ²λ¦¬, 볡μ‘ν κ³μ°)μ μΉ μμ»€λ‘ μ€νλ‘λν©λλ€.
- λ©μΈ μ€λ λμμ ν΅μ :
postMessage()APIλ₯Ό μ¬μ©νμ¬ μΉ μ컀μ λ©μΈ μ€λ λ κ°μ ν΅μ ν©λλ€.
μμ: λ°μ΄ν° μκ°ν μΉμ¬μ΄νΈλ μΉ μ컀λ₯Ό μ¬μ©νμ¬ λ°±κ·ΈλΌμ΄λμμ λκ·λͺ¨ λ°μ΄ν°μ μ λν 볡μ‘ν κ³μ°μ μνν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ κ³μ°μ΄ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νλ κ²μ λ°©μ§νκ³ μ¬μ©μ μΈν°νμ΄μ€κ° λ°μμ±μ μ μ§νλλ‘ λ³΄μ₯ν©λλ€.
9. λ μ΄μμ μ΄λ νΌνκΈ°
CLSλ₯Ό μ΅μννλ €λ©΄ μ΄κΈ° νμ΄μ§ λ‘λ ν μκΈ°μΉ μμ λ μ΄μμ μ΄λμ μ λ°νμ§ μλλ‘ νμμμ€.
ꡬν:
- λμ μΌλ‘ μ£Όμ λ μ½ν μΈ λ₯Ό μν κ³΅κ° μμ½: νλ μ΄μ€νλλ₯Ό μ¬μ©νκ±°λ μ½ν μΈ μ ν¬κΈ°λ₯Ό 미리 μ§μ νμ¬ λμ μΌλ‘ μ£Όμ λ μ½ν μΈ (μ: κ΄κ³ , μλ² λλ μ½ν μΈ )λ₯Ό μν 곡κ°μ μμ½ν©λλ€.
- μ΄λ―Έμ§ λ° λΉλμ€μ
widthλ°heightμμ± μ¬μ©: νμ<img>λ°<video>μμμwidthλ°heightμμ±μ μ§μ νμμμ€. μ΄λ₯Ό ν΅ν΄ λΈλΌμ°μ λ μμκ° λ‘λλκΈ° μ μ 곡κ°μ μμ½ν μ μμ΅λλ€. - κΈ°μ‘΄ μ½ν μΈ μμ μ½ν μΈ μ½μ νΌνκΈ°: κΈ°μ‘΄ μ½ν μΈ μμ μ½ν μΈ λ₯Ό μ½μ νλ©΄ μλ μ½ν μΈ κ° μλλ‘ λ°λ €λλ―λ‘ νΌνμμμ€.
- μ λλ©μ΄μ
μ Top/Left λμ Transform μ¬μ©: μ λλ©μ΄μ
μ
topλλleftμμ± λμtransformμμ±μ μ¬μ©νμμμ€.transformμμ±μ μ λλ©μ΄μ μ μ μ©νλ©΄ λ μ΄μμ μ΄λμ΄ λ°μνμ§ μμ΅λλ€.
μμ: YouTube λΉλμ€λ₯Ό μλ² λν λ, <iframe> μμμ λΉλμ€μ λλΉμ λμ΄λ₯Ό μ§μ νμ¬ λΉλμ€κ° λ‘λλ λ λ μ΄μμ μ΄λμ λ°©μ§ν©λλ€.
10. λͺ¨λν°λ§ λ° κ°μ¬
μ κΈ°μ μΌλ‘ μΉμ¬μ΄νΈμ μ±λ₯μ λͺ¨λν°λ§νκ³ κ°μ¬νμ¬ κ°μ ν λΆλΆμ νμ νμμμ€.
ꡬν:
- Google PageSpeed Insights: Google PageSpeed Insightsλ₯Ό μ¬μ©νμ¬ μΉμ¬μ΄νΈμ μ±λ₯μ λΆμνκ³ μ΅μ ν κΆμ₯ μ¬νμ λ°μ΅λλ€.
- Lighthouse: Lighthouseλ₯Ό μ¬μ©νμ¬ μΉμ¬μ΄νΈμ μ±λ₯, μ κ·Όμ± λ° SEOλ₯Ό κ°μ¬ν©λλ€.
- WebPageTest: WebPageTestλ₯Ό μ¬μ©νμ¬ μμΈν μ±λ₯ μ§νλ₯Ό μ»κ³ λ³λͺ© νμμ μλ³ν©λλ€.
- μ€μ μ¬μ©μ λͺ¨λν°λ§(RUM): RUMμ ꡬννμ¬ μ€μ μ¬μ©μλ‘λΆν° μ±λ₯ λ°μ΄ν°λ₯Ό μμ§ν©λλ€. μ΄λ μ€μ νκ²½μμ μΉμ¬μ΄νΈκ° μ΄λ»κ² μλνλμ§μ λν κ·μ€ν ν΅μ°°λ ₯μ μ 곡ν©λλ€. Google Analytics, New Relic, Datadogκ³Ό κ°μ λꡬλ RUM κΈ°λ₯μ μ 곡ν©λλ€.
μμ: λ€κ΅μ κΈ°μ μ RUMμ μ¬μ©νμ¬ μ¬λ¬ μ§μμ μΉμ¬μ΄νΈ μ±λ₯μ λͺ¨λν°λ§νκ³ μ±λ₯ κ°μ μ΄ νμν μμμ μλ³ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, νΉμ κ΅κ°μ μ¬μ©μκ° λ€νΈμν¬ μ§μ° μκ°μ΄λ μλ² κ·Όμ μ±μΌλ‘ μΈν΄ λλ¦° λ‘λ μκ°μ κ²½ννκ³ μμμ λ°κ²¬ν μ μμ΅λλ€.
κ²°λ‘
JavaScript μ±λ₯ μ΅μ νλ μ½μ΄ μΉ λ°μ΄νμ κ°μ νκ³ λ λμ μ¬μ©μ κ²½νμ μ 곡νλ λ° νμμ μ λλ€. μ΄ κ°μ΄λμ μ€λͺ λ μ λ΅μ ꡬνν¨μΌλ‘μ¨ LCP, FID, CLSμ λν JavaScriptμ μν₯μ ν¬κ² μ€μ¬ λ λΉ λ₯΄κ³ , λ°μμ±μ΄ λ°μ΄λλ©°, μμ μ μΈ μΉμ¬μ΄νΈλ₯Ό λ§λ€ μ μμ΅λλ€. μκ°μ΄ μ§λλ μ΅μ μ μ±λ₯μ μ μ§νλ €λ©΄ μ§μμ μΈ λͺ¨λν°λ§κ³Ό μ΅μ νκ° μ€μνλ€λ μ μ κΈ°μ΅νμΈμ.
μ¬μ©μ μ€μ¬μ μ±λ₯ μ§νμ μ§μ€νκ³ κΈλ‘λ² κ΄μ μ μ±νν¨μΌλ‘μ¨ μμΉ, κΈ°κΈ° λλ λ€νΈμν¬ μ‘°κ±΄μ κ΄κ³μμ΄ μ μΈκ³ μ¬μ©μκ° λΉ λ₯΄κ³ , μ κ·ΌνκΈ° μ½κ³ , μ¦κ²κ² μ¬μ©ν μ μλ μΉμ¬μ΄νΈλ₯Ό λ§λ€ μ μμ΅λλ€.