λͺ¨λ“ˆν˜• ν”„λ‘œκ·Έλž˜λ°

λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄ μƒκΈ°λŠ” 이점

λͺ¨λ“ˆν˜• ν”„λ‘œκ·Έλž˜λ°μ„ μ‚¬μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같은 λ‹€μ–‘ν•œ 이점을 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

1. ν•œ 번만 μ‹€ν–‰λœλ‹€.

κΈ°μ‘΄ μŠ€ν¬λ¦½νŠΈλŠ” DOM에 좔가될 λ•Œλ§ˆλ‹€ μ‹€ν–‰λ˜λŠ” λ°˜λ©΄μ— λͺ¨λ“ˆ μŠ€ν¬λ¦½νŠΈλŠ” ν•œ 번만 μ‹€ν–‰ λ©λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λ©΄ μ˜μ‘΄μ„± 트리의 κ°€μž₯ 내뢀에 μœ„μΉ˜ν•œ λͺ¨λ“ˆμ΄ λ¨Όμ € μ‹€ν–‰λ©λ‹ˆλ‹€. κ°€μž₯ 내뢀에 μœ„μΉ˜ν•œ λͺ¨λ“ˆμ΄ λ¨Όμ € ν‰κ°€λ˜κ³  여기에 μ˜μ‘΄ν•˜λŠ” λͺ¨λ“ˆμ— μ ‘κ·Ό ν•  수 μžˆλ‹€λŠ” 것이 μ΄μ μž…λ‹ˆλ‹€.

2. μžλ™μœΌλ‘œ μ§€μ—° λ‘œλ“œλœλ‹€.

μ¦‰μ‹œ λ‘œλ“œλ˜μ§€ μ•ŠκΈ° μœ„ν•΄ λ‹€λ₯Έ 슀크립트 νŒŒμΌμ€ defer속성을 λΆ™μ—¬μ•Ό ν•˜μ§€λ§Œ, λͺ¨λ“ˆμ€ μžλ™μœΌλ‘œ μ§€μ—°λ˜μ–΄ λ‘œλ“œλ©λ‹ˆλ‹€.

3. μœ μ§€λ³΄μˆ˜μ™€ μž¬μ‚¬μš©μ΄ 쉽닀.

λͺ¨λ“ˆμ€ λ‹€λ₯Έ λͺ¨λ“ˆμ— 영ν–₯을 μ£Όμ§€ μ•Šκ³  λ…λ¦½μ μœΌλ‘œ 싀행될 수 μžˆλŠ” μ½”λ“œ 쑰각으둜 κ΄€λ¦¬λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 μ—¬λŸ¬ λ‹€λ₯Έ ν•¨μˆ˜μ—μ„œ λ™μΌν•œ μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4. λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•œλ‹€.

λͺ¨λ“ˆμ€ κ΄€λ ¨ λ³€μˆ˜μ™€ μƒμˆ˜λ₯Ό μœ„ν•œ κ°œλ³„ 곡간을 μƒμ„±ν•˜μ—¬ κΈ€λ‘œλ²Œ λ„€μž„μŠ€νŽ˜μ΄μŠ€λ₯Ό μ˜€μ—Όμ‹œν‚€μ§€ μ•Šκ³  λͺ¨λ“ˆ μ°Έμ‘°λ₯Ό 톡해 μ‚¬μš©ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.

5. μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ½”λ“œλ₯Ό μ œκ±°ν•œλ‹€.

λͺ¨λ“ˆμ΄ λ„μž…λ˜κΈ° μ „μ—λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ½”λ“œλ₯Ό μˆ˜λ™μœΌλ‘œ μ œκ±°ν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

λ™μ μœΌλ‘œ λͺ¨λ“ˆ κ°€μ Έμ˜€κΈ°

λͺ¨λ“ˆμ„ μ΄ˆκΈ°μ— λͺ¨λ‘ 미리 λ‘œλ“œν•˜κΈ° λ³΄λ‹€λŠ” ν•„μš”ν•œ μ‹œμ μ—λ§Œ λ‘œλ“œν•˜λŠ” 것이 더 이둜울 λ•Œκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ§€μ—°λ‘œλ”©(Lazy-loading)을 μ‚¬μš©ν•˜λ©΄ ν•„μš”ν•œ μ‹œμ μ— λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ μ‚¬μš©μžκ°€ λ§ν¬λ‚˜ λ²„νŠΌμ„ 클릭할 λ•Œ λ‘œλ“œν•˜κ²Œ λ§Œλ“€ 수 μžˆμ–΄ 초기 λ‘œλ”© μ‹œκ°„μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€. 이게 λ°”λ‘œ 동적 κ°€μ Έμ˜€κΈ°(dynamic import)κ°€ μƒκ²¨λ‚œ 이유 μž…λ‹ˆλ‹€...
동적 κ°€μ €μ˜€κΈ°λŠ” ν•¨μˆ˜μ™€ λΉ„μŠ·ν•œ μƒˆλ‘œμš΄ ν˜•νƒœμ˜ κ°€μ Έμ˜€κΈ° μž…λ‹ˆλ‹€. import(url)λŠ” μš”μ²­λœ λͺ¨λ“ˆμ˜ λ„€μž„μŠ€νŽ˜μ΄μŠ€ 객체에 λŒ€ν•œ ν”„λ‘œλ―ΈμŠ€ ν”„λ‘œλ―ΈμŠ€ 객체λ₯Ό λ°˜ν™˜ ν•©λ‹ˆλ‹€. 이 ν”„λ‘œλ―ΈμŠ€ κ°μ²΄λŠ” λͺ¨λ“ˆ μžμ²΄μ™€ λͺ¨λ“  λͺ¨λ“ˆ μ˜μ‘΄μ„±μ„ κ°€μ Έμ˜¨ ν›„, μΈμŠ€ν„΄μŠ€ν™” ν•˜κ³  ν‰κ°€ν•œ 뒀에 λ§Œλ“€μ–΄ μ§‘λ‹ˆλ‹€. λ‹€μŒμ€ 동적 κ°€μ Έμ˜€κΈ°λ₯Ό μ‚¬μš©ν•˜λŠ” cakeFatory에 λŒ€ν•œ μ˜ˆμ œμž…λ‹ˆλ‹€.
form.addEventListener("sumit", e => {
  e.preventDefault();
   import("/modules/cakeFatory.js)
   .then((module) => {
     //κ°€μ Έμ˜¨ λͺ¨λ“ˆ μ‚¬μš©ν•˜κΈ°
     module.oven.makeCupcake("sprinkles");
     module.oven.makeMuffin("large");
   })
})
동적 κ°€μ Έμ˜€κΈ°λŠ” awit와 ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
let module = awit import("/modules/cakeFactory.js");
동적 κ°€μ Έμ˜€κΈ°λ₯Ό μ‚¬μš©ν•˜λ©΄ λͺ¨λ“ˆμ΄ μ‚¬μš©λ  λ•Œλ§Œ λ‹€μš΄λ‘œλ“œλ˜κ³  μ‹€ν–‰λ©λ‹ˆλ‹€. μ‚¬μš©μž μƒν˜Έμž‘μš©μ— λ°˜μ‘ν•˜κ±°λ‚˜ 화면에 보이면 μ‹€ν–‰ν•˜κΈ° λ“± 자주 μ‚¬μš©λ˜λŠ” νŒ¨ν„΄μ€ 동적 κ°€μ Έμ˜€κΈ°λ₯Ό 톡해 바닐라 μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλ„ μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μž μƒν˜Έμž‘μš©μ— 따라 κ°€μ Έμ˜€κΈ°

일뢀 κΈ°λŠ₯의 경우 μ‚¬μš©μžκ°€ μƒν˜Έμž‘μš©ν•  λ•Œλ§Œ ν•„μš”ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μ±„νŒ… μ°½μ΄λ‚˜ λ‹€μ΄μ–Όλ‘œκ·Έ, λΉ„λ””μ˜€ 등이 λŒ€ν‘œμ μΈ μ˜ˆμ‹œμž…λ‹ˆλ‹€. 이런 κΈ°λŠ₯은 νŽ˜μ΄μ§€ λ‘œλ“œ μ‹œμ μ— ν•„μš”ν•œ 것이 μ•„λ‹ˆλΌ μ‚¬μš©μžκ°€ μ»΄ν¬λ„ŒνŠΈλ₯Ό ν΄λ¦­ν•˜λŠ” λ“± μƒν˜Έμž‘μš©μ— 따라 λ‘œλ“œλ˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 동적 κ°€μ Έμ˜€κΈ°λ₯Ό ν™œμš©ν•˜λ©΄ μ‹€ν–‰ν•œ λ‹€μŒμ— 따라 μ˜€λŠ” ν•¨μˆ˜λ₯Ό 톡해 μ›ν•˜λŠ” κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
λ‹€μŒ μ˜ˆμ‹œλŠ” lodash.sortby λͺ¨λ“ˆμ„ λ™μ μœΌλ‘œ λ‘œλ“œν•˜μ—¬ μ •λ ¬ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” μ½”λ“œμž…λ‹ˆλ‹€.
const btn = document.querySelector('button');
  e.preventDefault();
	import('lodash.sortBy')
	.then(module => module.default)
	.then(sortInput()) //use the imported dependency
	.catch(err => { console.log(err )});
REFERENCES : μžλ°”μŠ€ν¬λ¦½νŠΈ + λ¦¬μ•‘νŠΈ λ””μžμΈ νŒ¨ν„΄