πŸ‘©πŸ»‍πŸ’»STUDY/JavaScript

[JavaScript] λ¬Έμ„œμ˜ λ‘œλ“œμ‹œμ  - onload / DOMContentLoaded

jmjm 2020. 9. 24. 20:16

λ¬Έμ„œμ˜ λ‘œλ“œμ‹œμ  - onload / DOMContentLoaded

πŸ’‘μΌλ°˜μ μœΌλ‘œ, 슀크립트 λ¬Έμ„œμ˜ λ§ˆμ§€λ§‰ </body> 이전에 μ‚½μž…ν•˜λ©΄ ꡳ이 이벀트λ₯Ό μ΄μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž˜λ°μ„ μ²˜λ¦¬ν•  ν•„μš”κ°€ μ—†λ‹€.

λ‹€λ§Œ,

  1. λ¬Έμ„œμ˜ <head>μ˜μ—­μ— μŠ€ν¬λ¦½νŠΈκ°€ μ‚½μž…λ˜κ±°λ‚˜,
  2. μ™ΈλΆ€μ˜ νŒŒμΌμ— μ •μ˜λ˜μ–΄ μžˆλ‹€λ©΄ 이벀트λ₯Ό λ¬Έμ„œμ˜ λ‘œλ“œ μ‹œμ μ— 맞게 μ²˜λ¦¬ν•΄μ•Ό ν•œλ‹€.

 

1. onload

  1. λ¬Έμ„œμ˜ λͺ¨λ“  μ½˜ν…μΈ (images, script, css, etc)κ°€ λ‘œλ“œλœ ν›„ λ°œμƒν•˜λŠ” 이벀트. (load 이벀트라 ν•œλ‹€.)
window.onload = function() {
  // 싀행될 μ½”λ“œ
}
  • λ¬Έμ„œμ— ν¬ν•¨ν•œ λͺ¨λ“  μ½˜ν…μΈ κ°€ λ‘œλ“œλœ ν›„ μ‹€ν–‰λ˜λ―€λ‘œ λΆˆν•„μš”ν•œ λ‘œλ”© μ‹œκ°„μ΄ 좔가될 수 μžˆλ‹€.

  • λ™μΌν•œ λ¬Έμ„œμ— 였직 onloadλŠ” ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€.

    • 쀑볡될 경우, λ§ˆμ§€λ§‰ 선언이 μ‹€ν–‰
    • μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ 이미 μ„ μ–Έλœ 경우, 이λ₯Ό μ°Ύμ•„ ν•˜λ‚˜λ‘œ ν•©μΉ˜λŠ” 과정이 ν•„μš”ν•˜λ‹€.
  • μ™ΈλΆ€μ˜ 지원(iframe, image, script)을 μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λ„ ν•΄λ‹Ήλœλ‹€.

 

  1. <body>μš”μ†Œμ— 속성(attribute)으둜 지정될 수 μžˆλ‹€.
<body onload="싀행될 μ½”λ“œ"></body>
  • μœ„μ™€ 같이 μ‚¬μš©λ  경우, window.onload 둜 μ§€μ •λœ 것은 λ¬΄μ‹œλœλ‹€.

 

  1. window 객체뿐만 μ•„λ‹ˆλΌ μ›ν•˜λŠ” 객체(object)κ°€ λ‘œλ“œλ˜μ—ˆμ„ λ•Œ 싀행될 μ½”λ“œλ‘œ μ„€μ •ν•  수 μžˆλ‹€.
document.getElementById('myFrame').onload = function() {
  // 싀행될 μ½”λ“œ
}

 

  1. 이벀트λ₯Ό 직접 μ—°κ²°ν•  μˆ˜λ„ μžˆλ‹€.
window.addEventListener('load', function() {
  // 싀행될 μ½”λ“œ
});

 

jQuery load

jQueryμ—μ„œλŠ” onload와 같은 λ™μž‘μ„ ν•˜λŠ” load λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

// jQuery
$(window).load(function() {
  // 싀행될 μ½”λ“œ
});

 

2. DOMContentLoaded

HTMLκ³Ό scriptκ°€ λ‘œλ“œλœ μ‹œμ μ— λ°œμƒν•˜λŠ” 이벀트.

window.addEventListener('DOMContentLoaded', function() {
  // 싀행될 μ½”λ“œ
});
  • onload μ΄λ²€νŠΈλ³΄λ‹€ λ¨Όμ € λ°œμƒ. λΉ λ₯Έ 싀행속도가 ν•„μš”ν•  λ•Œ μ ν•©ν•˜λ‹€.
  • IE8 μ΄ν•˜μ—μ„œλŠ” μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

jQuery ready

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ DOM νŠΈλ¦¬κ°€ μ€€λΉ„λ˜μ—ˆμ„ λ•Œμ˜ μ‹œμ μ„ μ»¨νŠΈλ‘€ν•˜λŠ” λ©”μ†Œλ“œλ‘œ DOMContentLoaded의 jQuery버전이라 μƒκ°ν•˜μž.

// jQuery
$(documenet).ready(function() {
  // 싀행될 μ½”λ“œ
});
  • onload μ΄λ²€νŠΈλ³΄λ‹€ λ¨Όμ € λ°œμƒν•œλ‹€. 즉, λ¬Έμ„œμ˜ λͺ¨λ“  μžμ›μ΄ λ‹€μš΄λ‘œλ“œλ˜μ—ˆμ„ λ–„ λ°œμƒν•˜λŠ” onload와 달리, DOM 트리만 μ™„μ„±λ˜λ©΄ λ°”λ‘œ λ°œμƒν•˜λ―€λ‘œ λΉ λ₯Έ μ‹€ν–‰ 속도가 ν•„μš”ν•  λ–„ μ ν•©ν•˜λ‹€.
  • μ—¬λŸ¬λ²ˆ μ‚¬μš©λ˜λ©΄ μ„ μ–Έ μˆœμ„œμ— 따라 순차적으둜 μ‹€ν–‰λœλ‹€.

2020/02/05 - [πŸ‘©πŸ»‍πŸ’»DEVELOPE/jQuery] - [jQuery] ready() load() 차이


 

Reference

https://webdir.tistory.com/515