JavaScript μ€νμ΄ λΈλΌμ°μ λ λλ§ νμ΄νλΌμΈμ κ° λ¨κ³μ μ΄λ€ μν₯μ λ―ΈμΉλμ§ μμλ³΄κ³ , μΉ μ±λ₯κ³Ό μ¬μ©μ κ²½νμ κ°μ νκΈ° μν΄ μ½λλ₯Ό μ΅μ ννλ μ λ΅μ λ°°μ보μΈμ.
λΈλΌμ°μ λ λλ§ νμ΄νλΌμΈ: JavaScriptκ° μΉ μ±λ₯μ λ―ΈμΉλ μν₯
λΈλΌμ°μ λ λλ§ νμ΄νλΌμΈμ μΉ λΈλΌμ°μ κ° HTML, CSS, JavaScript μ½λλ₯Ό μ¬μ©μ νλ©΄μ μκ°μ ννμΌλ‘ λ³ννκΈ° μν΄ κ±°μΉλ μΌλ ¨μ λ¨κ³μ λλ€. μ΄ νμ΄νλΌμΈμ μ΄ν΄νλ κ²μ κ³ μ±λ₯ μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ €λ λͺ¨λ μΉ κ°λ°μμκ² λ§€μ° μ€μν©λλ€. κ°λ ₯νκ³ λμ μΈ μΈμ΄μΈ JavaScriptλ μ΄ νμ΄νλΌμΈμ κ° λ¨κ³μ μλΉν μν₯μ λ―ΈμΉ©λλ€. μ΄ κΈμμλ λΈλΌμ°μ λ λλ§ νμ΄νλΌμΈμ μ¬μΈ΅μ μΌλ‘ μ΄ν΄λ³΄κ³ JavaScript μ€νμ΄ μ±λ₯μ λ―ΈμΉλ μν₯μ νꡬνλ©°, μ΅μ νλ₯Ό μν μ€ν κ°λ₯ν μ λ΅μ μ 곡ν©λλ€.
λΈλΌμ°μ λ λλ§ νμ΄νλΌμΈμ μ΄ν΄
λ λλ§ νμ΄νλΌμΈμ ν¬κ² λ€μκ³Ό κ°μ λ¨κ³λ‘ λλ μ μμ΅λλ€:
- HTML νμ±: λΈλΌμ°μ λ HTML λ§ν¬μ μ νμ±νμ¬ HTML μμμ κ·Έ κ΄κ³λ₯Ό λνλ΄λ νΈλ¦¬ κ΅¬μ‘°μΈ λ¬Έμ κ°μ²΄ λͺ¨λΈ(DOM, Document Object Model)μ ꡬμ±ν©λλ€.
- CSS νμ±: λΈλΌμ°μ λ μΈλΆ λ° μΈλΌμΈ CSS μ€νμΌμνΈλ₯Ό λͺ¨λ νμ±νμ¬ CSS κ·μΉκ³Ό μμ±μ λνλ΄λ λ λ€λ₯Έ νΈλ¦¬ κ΅¬μ‘°μΈ CSS κ°μ²΄ λͺ¨λΈ(CSSOM, CSS Object Model)μ μμ±ν©λλ€.
- κ²°ν©(Attachment): λΈλΌμ°μ λ DOMκ³Ό CSSOMμ κ²°ν©νμ¬ λ λ νΈλ¦¬λ₯Ό μμ±ν©λλ€. λ λ νΈλ¦¬λ μ½ν μΈ λ₯Ό νμνλ λ° νμν λ Έλλ§ ν¬ν¨νλ©°, <head>μ κ°μ μμλ `display: none` μμ±μ κ°μ§ μμλ μλ΅λ©λλ€. κ° λ³΄μ΄λ DOM λ Έλμλ ν΄λΉνλ CSSOM κ·μΉμ΄ 첨λΆλ©λλ€.
- λ μ΄μμ (리νλ‘μ°): λΈλΌμ°μ λ λ λ νΈλ¦¬μ μλ κ° μμμ μμΉμ ν¬κΈ°λ₯Ό κ³μ°ν©λλ€. μ΄ κ³Όμ μ '리νλ‘μ°(reflow)'λΌκ³ λ ν©λλ€.
- νμΈν (리νμΈνΈ): λΈλΌμ°μ λ κ³μ°λ λ μ΄μμ μ 보μ μ μ©λ μ€νμΌμ μ¬μ©νμ¬ λ λ νΈλ¦¬μ κ° μμλ₯Ό νλ©΄μ 그립λλ€. μ΄ κ³Όμ μ '리νμΈνΈ(repaint)'λΌκ³ λ ν©λλ€.
- ν©μ±(Compositing): λΈλΌμ°μ λ μ¬λ¬ λ μ΄μ΄λ₯Ό κ²°ν©νμ¬ νλ©΄μ νμλ μ΅μ’ μ΄λ―Έμ§λ₯Ό λ§λλλ€. μ΅μ λΈλΌμ°μ λ μ’ μ’ ν©μ±μ μν΄ νλμ¨μ΄ κ°μμ μ¬μ©νμ¬ μ±λ₯μ ν₯μμν΅λλ€.
JavaScriptκ° λ λλ§ νμ΄νλΌμΈμ λ―ΈμΉλ μν₯
JavaScriptλ λ€μν λ¨κ³μμ λ λλ§ νμ΄νλΌμΈμ μλΉν μν₯μ λ―ΈμΉ μ μμ΅λλ€. μλͺ» μμ±λμκ±°λ λΉν¨μ¨μ μΈ JavaScript μ½λλ μ±λ₯ λ³λͺ© νμμ μ λ°νμ¬ νμ΄μ§ λ‘λ μκ° μ§μ°, λ²λ² 거리λ μ λλ©μ΄μ , κ·Έλ¦¬κ³ μ’μ§ μμ μ¬μ©μ κ²½νμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
1. νμ μ°¨λ¨
λΈλΌμ°μ κ° HTMLμμ <script> νκ·Έλ₯Ό λ§λλ©΄, μΌλ°μ μΌλ‘ HTML λ¬Έμ νμ±μ μΌμ μ€μ§νκ³ JavaScript μ½λλ₯Ό λ€μ΄λ‘λνμ¬ μ€νν©λλ€. μ΄λ JavaScriptκ° DOMμ μμ ν μ μκΈ° λλ¬Έμ λΈλΌμ°μ κ° κ³μ μ§ννκΈ° μ μ DOMμ΄ μ΅μ μνμΈμ§ νμΈν΄μΌ νκΈ° λλ¬Έμ λλ€. μ΄λ¬ν μ°¨λ¨ λμμ νμ΄μ§μ μ΄κΈ° λ λλ§μ μλΉν μ§μ°μν¬ μ μμ΅λλ€.
μμ:
HTML λ¬Έμμ <head>μ ν° JavaScript νμΌμ΄ μλ μλ리μ€λ₯Ό μκ°ν΄ 보μΈμ:
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
<script src="large-script.js"></script>
</head>
<body>
<h1>Welcome to My Website</h1>
<p>Some content here.</p>
</body>
</html>
μ΄ κ²½μ°, λΈλΌμ°μ λ HTML νμ±μ μ€λ¨νκ³ `large-script.js`κ° λ€μ΄λ‘λλκ³ μ€νλ λκΉμ§ κΈ°λ€λ¦° νμμΌ <h1> λ° <p> μμλ₯Ό λ λλ§ν©λλ€. μ΄λ μ΄κΈ° νμ΄μ§ λ‘λμμ λμ λλ μ§μ°μ μ΄λν μ μμ΅λλ€.
νμ μ°¨λ¨μ μ΅μννλ ν΄κ²°μ± :
- `async` λλ `defer` μμ± μ¬μ©: `async` μμ±μ νμλ₯Ό μ°¨λ¨νμ§ μκ³ μ€ν¬λ¦½νΈλ₯Ό λ€μ΄λ‘λν μ μκ² νλ©°, μ€ν¬λ¦½νΈλ λ€μ΄λ‘λλλ μ¦μ μ€νλ©λλ€. `defer` μμ± λν νμλ₯Ό μ°¨λ¨νμ§ μκ³ μ€ν¬λ¦½νΈλ₯Ό λ€μ΄λ‘λνκ² νμ§λ§, μ€ν¬λ¦½νΈλ HTML νμ±μ΄ μλ£λ ν HTMLμ λνλ μμλλ‘ μ€νλ©λλ€.
- <body> νκ·Έ λμ μ€ν¬λ¦½νΈ λ°°μΉ: μ€ν¬λ¦½νΈλ₯Ό <body> νκ·Έ λμ λ°°μΉνλ©΄ λΈλΌμ°μ λ μ€ν¬λ¦½νΈλ₯Ό λ§λκΈ° μ μ HTMLμ νμ±νκ³ DOMμ ꡬμΆν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λΈλΌμ°μ λ νμ΄μ§μ μ΄κΈ° μ½ν μΈ λ₯Ό λ 빨리 λ λλ§ν μ μμ΅λλ€.
`async` μ¬μ© μμ:
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
<script src="large-script.js" async></script>
</head>
<body>
<h1>Welcome to My Website</h1>
<p>Some content here.</p>
</body>
</html>
μ΄ κ²½μ°, λΈλΌμ°μ λ HTML νμ±μ μ°¨λ¨νμ§ μκ³ `large-script.js`λ₯Ό λΉλκΈ°μ μΌλ‘ λ€μ΄λ‘λν©λλ€. μ€ν¬λ¦½νΈλ λ€μ΄λ‘λλλ μ¦μ μ€νλλ©°, μ 체 HTML λ¬Έμκ° νμ±λκΈ° μ μ μ€νλ μ μμ΅λλ€.
`defer` μ¬μ© μμ:
<!DOCTYPE html>
<html>
<head>
<title>My Website</title>
<script src="large-script.js" defer></script>
</head>
<body>
<h1>Welcome to My Website</h1>
<p>Some content here.</p>
</body>
</html>
μ΄ κ²½μ°, λΈλΌμ°μ λ HTML νμ±μ μ°¨λ¨νμ§ μκ³ `large-script.js`λ₯Ό λΉλκΈ°μ μΌλ‘ λ€μ΄λ‘λν©λλ€. μ€ν¬λ¦½νΈλ μ 체 HTML λ¬Έμκ° νμ±λ ν HTMLμ λνλ μμλλ‘ μ€νλ©λλ€.
2. DOM μ‘°μ
JavaScriptλ μ’ μ’ DOMμ μ‘°μνμ¬ μμμ μμ±μ μΆκ°, μ κ±° λλ μμ νλ λ° μ¬μ©λ©λλ€. λΉλ²νκ±°λ 볡μ‘ν DOM μ‘°μμ 리νλ‘μ°μ 리νμΈνΈλ₯Ό μ λ°ν μ μμΌλ©°, μ΄λ μ±λ₯μ ν° μν₯μ λ―ΈμΉ μ μλ λΉμ©μ΄ λ§μ΄ λλ μμ μ λλ€.
μμ:
<!DOCTYPE html>
<html>
<head>
<title>DOM Manipulation Example</title>
</head>
<body>
<ul id="myList">
<li>Item 1</li>
<li>Item 2</li>
</ul>
<script>
const myList = document.getElementById('myList');
for (let i = 3; i <= 10; i++) {
const listItem = document.createElement('li');
listItem.textContent = `Item ${i}`;
myList.appendChild(listItem);
}
</script>
</body>
</html>
μ΄ μμμμ μ€ν¬λ¦½νΈλ μμ μλ λͺ©λ‘μ 8κ°μ μλ‘μ΄ λ¦¬μ€νΈ μμ΄ν μ μΆκ°ν©λλ€. κ° `appendChild` μμ μ λΈλΌμ°μ κ° λ μ΄μμμ λ€μ κ³μ°νκ³ λͺ©λ‘μ λ€μ κ·Έλ €μΌ νλ―λ‘ λ¦¬νλ‘μ°μ 리νμΈνΈλ₯Ό μ λ°ν©λλ€.
DOM μ‘°μ μ΅μ ν ν΄κ²°μ± :
- DOM μ‘°μ μ΅μν: DOM μ‘°μ νμλ₯Ό μ΅λν μ€μ΄μΈμ. DOMμ μ¬λ¬ λ² μμ νλ λμ λ³κ²½ μ¬νμ μΌκ΄μ μΌλ‘ μ²λ¦¬νμΈμ.
- DocumentFragment μ¬μ©: DocumentFragmentλ₯Ό μμ±νκ³ , νλκ·Έλ¨ΌνΈμ λͺ¨λ DOM μ‘°μμ μνν λ€μ, ν λ²μ μ€μ DOMμ νλκ·Έλ¨ΌνΈλ₯Ό μΆκ°νμΈμ. μ΄λ 리νλ‘μ°μ 리νμΈνΈ νμλ₯Ό μ€μ¬μ€λλ€.
- DOM μμ μΊμ±: λμΌν μμμ λν΄ DOMμ λ°λ³΅μ μΌλ‘ 쿼리νλ κ²μ νΌνμΈμ. μμλ₯Ό λ³μμ μ μ₯νκ³ μ¬μ¬μ©νμΈμ.
- ν¨μ¨μ μΈ μ νμ μ¬μ©: μμλ₯Ό νκ²ν ν λ νΉμ νκ³ ν¨μ¨μ μΈ μ νμ(μ: ID)λ₯Ό μ¬μ©νμΈμ. 볡μ‘νκ±°λ λΉν¨μ¨μ μΈ μ νμ(μ: λΆνμν DOM νΈλ¦¬ μν) μ¬μ©μ νΌνμΈμ.
- λΆνμν 리νλ‘μ° λ° λ¦¬νμΈνΈ νΌνκΈ°: `width`, `height`, `margin`, `padding`κ³Ό κ°μ νΉμ CSS μμ±μ λ³κ²½λ λ 리νλ‘μ°μ 리νμΈνΈλ₯Ό μ λ°ν μ μμ΅λλ€. μ΄λ¬ν μμ±μ μμ£Ό λ³κ²½νλ κ²μ νΌνμΈμ.
DocumentFragment μ¬μ© μμ:
<!DOCTYPE html>
<html>
<head>
<title>DOM Manipulation Example</title>
</head>
<body>
<ul id="myList">
<li>Item 1</li>
<li>Item 2</li>
</ul>
<script>
const myList = document.getElementById('myList');
const fragment = document.createDocumentFragment();
for (let i = 3; i <= 10; i++) {
const listItem = document.createElement('li');
listItem.textContent = `Item ${i}`;
fragment.appendChild(listItem);
}
myList.appendChild(fragment);
</script>
</body>
</html>
μ΄ μμμμλ λͺ¨λ μλ‘μ΄ λ¦¬μ€νΈ μμ΄ν μ΄ λ¨Όμ DocumentFragmentμ μΆκ°λ λ€μ, νλκ·Έλ¨ΌνΈκ° μμ μλ λͺ©λ‘μ μΆκ°λ©λλ€. μ΄λ 리νλ‘μ°μ 리νμΈνΈ νμλ₯Ό λ¨ ν λ²μΌλ‘ μ€μ¬μ€λλ€.
3. λΉμ©μ΄ λ§μ΄ λλ μμ
νΉμ JavaScript μμ μ λ³Έμ§μ μΌλ‘ λΉμ©μ΄ λ§μ΄ λ€κ³ μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€. μ¬κΈ°μλ λ€μμ΄ ν¬ν¨λ©λλ€:
- 볡μ‘ν κ³μ°: JavaScriptμμ 볡μ‘ν μν κ³μ°μ΄λ λ°μ΄ν° μ²λ¦¬λ₯Ό μννλ©΄ μλΉν CPU 리μμ€λ₯Ό μλΉν μ μμ΅λλ€.
- ν° λ°μ΄ν° ꡬ쑰: ν° λ°°μ΄μ΄λ κ°μ²΄λ‘ μμ νλ©΄ λ©λͺ¨λ¦¬ μ¬μ©λμ΄ μ¦κ°νκ³ μ²λ¦¬ μλκ° λλ €μ§ μ μμ΅λλ€.
- μ κ· ννμ: 볡μ‘ν μ κ· ννμμ νΉν ν° λ¬Έμμ΄μμ μ€ν μλκ° λ릴 μ μμ΅λλ€.
μμ:
<!DOCTYPE html>
<html>
<head>
<title>Expensive Operation Example</title>
</head>
<body>
<div id="result"></div>
<script>
const resultDiv = document.getElementById('result');
let largeArray = [];
for (let i = 0; i < 1000000; i++) {
largeArray.push(Math.random());
}
const startTime = performance.now();
largeArray.sort(); // Expensive operation
const endTime = performance.now();
const executionTime = endTime - startTime;
resultDiv.textContent = `Execution time: ${executionTime} ms`;
</script>
</body>
</html>
μ΄ μμμμ μ€ν¬λ¦½νΈλ λμλ‘ κ΅¬μ±λ ν° λ°°μ΄μ μμ±ν λ€μ μ λ ¬ν©λλ€. ν° λ°°μ΄μ μ λ ¬νλ κ²μ μλΉν μκ°μ΄ 걸릴 μ μλ λΉμ©μ΄ λ§μ΄ λλ μμ μ λλ€.
λΉμ©μ΄ λ§μ΄ λλ μμ μ΅μ ν ν΄κ²°μ± :
- μκ³ λ¦¬μ¦ μ΅μ ν: ν¨μ¨μ μΈ μκ³ λ¦¬μ¦κ³Ό λ°μ΄ν° ꡬ쑰λ₯Ό μ¬μ©νμ¬ νμν μ²λ¦¬λμ μ΅μννμΈμ.
- μΉ μ컀(Web Worker) μ¬μ©: λΉμ©μ΄ λ§μ΄ λλ μμ μ μΉ μ컀μ μ€νλ‘λνμΈμ. μΉ μ컀λ λ°±κ·ΈλΌμ΄λμμ μ€νλλ©° λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ§ μμ΅λλ€.
- κ²°κ³Ό μΊμ±: λΉμ©μ΄ λ§μ΄ λλ μμ μ κ²°κ³Όλ₯Ό μΊμνμ¬ λ§€λ² λ€μ κ³μ°ν νμκ° μλλ‘ νμΈμ.
- λλ°μ΄μ±(Debouncing) λ° μ€λ‘νλ§(Throttling): ν¨μ νΈμΆ λΉλλ₯Ό μ ννκΈ° μν΄ λλ°μ΄μ± λλ μ€λ‘νλ§ κΈ°λ²μ ꡬννμΈμ. μ΄λ μ€ν¬λ‘€μ΄λ 리μ¬μ΄μ¦ μ΄λ²€νΈμ κ°μ΄ μμ£Ό νΈλ¦¬κ±°λλ μ΄λ²€νΈ νΈλ€λ¬μ μ μ©ν©λλ€.
μΉ μ컀(Web Worker) μ¬μ© μμ:
<!DOCTYPE html>
<html>
<head>
<title>Expensive Operation Example</title>
</head>
<body>
<div id="result"></div>
<script>
const resultDiv = document.getElementById('result');
if (window.Worker) {
const myWorker = new Worker('worker.js');
myWorker.onmessage = function(event) {
const executionTime = event.data;
resultDiv.textContent = `Execution time: ${executionTime} ms`;
};
myWorker.postMessage(''); // Start the worker
} else {
resultDiv.textContent = 'Web Workers are not supported in this browser.';
}
</script>
</body>
</html>
worker.js:
self.onmessage = function(event) {
let largeArray = [];
for (let i = 0; i < 1000000; i++) {
largeArray.push(Math.random());
}
const startTime = performance.now();
largeArray.sort(); // Expensive operation
const endTime = performance.now();
const executionTime = endTime - startTime;
self.postMessage(executionTime);
}
μ΄ μμμμλ μ λ ¬ μμ μ΄ μΉ μ컀μμ μνλ©λλ€. μΉ μ컀λ λ°±κ·ΈλΌμ΄λμμ μ€νλλ©° λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ§ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ λ ¬μ΄ μ§νλλ λμ UIκ° λ°μμ±μ μ μ§ν μ μμ΅λλ€.
4. μλνν° μ€ν¬λ¦½νΈ(Third-Party Scripts)
λ§μ μΉ μ ν리μΌμ΄μ μ λΆμ, κ΄κ³ , μμ λ―Έλμ΄ ν΅ν© λ° κΈ°ν κΈ°λ₯μ μν΄ μλνν° μ€ν¬λ¦½νΈμ μμ‘΄ν©λλ€. μ΄λ¬ν μ€ν¬λ¦½νΈλ μ΅μ νκ° μ λμ΄ μμ§ μκ±°λ, λμ©λ λ°μ΄ν°λ₯Ό λ€μ΄λ‘λνκ±°λ, λΉμ©μ΄ λ§μ΄ λλ μμ μ μνν μ μμΌλ―λ‘ μ’ μ’ μλΉν μ±λ₯ μ€λ²ν€λμ μμΈμ΄ λ μ μμ΅λλ€.
μμ:
<!DOCTYPE html>
<html>
<head>
<title>Third-Party Script Example</title>
<script src="https://example.com/analytics.js"></script>
</head>
<body>
<h1>Welcome to My Website</h1>
<p>Some content here.</p>
</body>
</html>
μ΄ μμμμ μ€ν¬λ¦½νΈλ μλνν° λλ©μΈμμ λΆμ μ€ν¬λ¦½νΈλ₯Ό λ‘λν©λλ€. μ΄ μ€ν¬λ¦½νΈμ λ‘λ λλ μ€ν μλκ° λ리면 νμ΄μ§ μ±λ₯μ λΆμ μ μΈ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
μλνν° μ€ν¬λ¦½νΈ μ΅μ ν ν΄κ²°μ± :
- μ€ν¬λ¦½νΈ λΉλκΈ° λ‘λ: `async` λλ `defer` μμ±μ μ¬μ©νμ¬ νμλ₯Ό μ°¨λ¨νμ§ μκ³ μλνν° μ€ν¬λ¦½νΈλ₯Ό λΉλκΈ°μ μΌλ‘ λ‘λνμΈμ.
- νμν λλ§ μ€ν¬λ¦½νΈ λ‘λ: μ€μ λ‘ νμν λλ§ μλνν° μ€ν¬λ¦½νΈλ₯Ό λ‘λνμΈμ. μλ₯Ό λ€μ΄, μ¬μ©μκ° μνΈμμ©ν λλ§ μμ λ―Έλμ΄ μμ ―μ λ‘λν©λλ€.
- μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN) μ¬μ©: CDNμ μ¬μ©νμ¬ μ¬μ©μμκ² μ§λ¦¬μ μΌλ‘ κ°κΉμ΄ μμΉμμ μλνν° μ€ν¬λ¦½νΈλ₯Ό μ 곡νμΈμ.
- μλνν° μ€ν¬λ¦½νΈ μ±λ₯ λͺ¨λν°λ§: μ±λ₯ λͺ¨λν°λ§ λꡬλ₯Ό μ¬μ©νμ¬ μλνν° μ€ν¬λ¦½νΈμ μ±λ₯μ μΆμ νκ³ λ³λͺ© νμμ μλ³νμΈμ.
- λμ κ³ λ €: μ±λ₯μ΄ λ μ’κ±°λ ννλ¦°νΈκ° λ μμ λμ μ루μ μ νμνμΈμ.
5. μ΄λ²€νΈ 리μ€λ
μ΄λ²€νΈ 리μ€λλ₯Ό μ¬μ©νλ©΄ JavaScript μ½λκ° μ¬μ©μ μνΈμμ© λ° κΈ°ν μ΄λ²€νΈμ μλ΅ν μ μμ΅λλ€. κ·Έλ¬λ λ무 λ§μ μ΄λ²€νΈ 리μ€λλ₯Ό 첨λΆνκ±°λ λΉν¨μ¨μ μΈ μ΄λ²€νΈ νΈλ€λ¬λ₯Ό μ¬μ©νλ©΄ μ±λ₯μ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
μμ:
<!DOCTYPE html>
<html>
<head>
<title>Event Listener Example</title>
</head>
<body>
<ul id="myList">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<script>
const listItems = document.querySelectorAll('#myList li');
for (let i = 0; i < listItems.length; i++) {
listItems[i].addEventListener('click', function() {
alert(`You clicked on item ${i + 1}`);
});
}
</script>
</body>
</html>
μ΄ μμμμ μ€ν¬λ¦½νΈλ κ° λ¦¬μ€νΈ μμ΄ν μ ν΄λ¦ μ΄λ²€νΈ 리μ€λλ₯Ό 첨λΆν©λλ€. μ΄ λ°©λ²μ μλνμ§λ§, νΉν λͺ©λ‘μ λ§μ μμ μμ΄ν μ΄ ν¬ν¨λ κ²½μ° κ°μ₯ ν¨μ¨μ μΈ μ κ·Ό λ°©μμ μλλλ€.
μ΄λ²€νΈ 리μ€λ μ΅μ ν ν΄κ²°μ± :
- μ΄λ²€νΈ μμ μ¬μ©: κ°λ³ μμμ μ΄λ²€νΈ 리μ€λλ₯Ό 첨λΆνλ λμ , λΆλͺ¨ μμμ λ¨μΌ μ΄λ²€νΈ 리μ€λλ₯Ό 첨λΆνκ³ μ΄λ²€νΈ μμμ μ¬μ©νμ¬ μμ μμμ μ΄λ²€νΈλ₯Ό μ²λ¦¬νμΈμ.
- λΆνμν μ΄λ²€νΈ 리μ€λ μ κ±°: λ μ΄μ νμνμ§ μμ μ΄λ²€νΈ 리μ€λλ μ κ±°νμΈμ.
- ν¨μ¨μ μΈ μ΄λ²€νΈ νΈλ€λ¬ μ¬μ©: μ΄λ²€νΈ νΈλ€λ¬ λ΄λΆμ μ½λλ₯Ό μ΅μ ννμ¬ νμν μ²λ¦¬λμ μ΅μννμΈμ.
- μ΄λ²€νΈ νΈλ€λ¬ μ€λ‘νλ§ λλ λλ°μ΄μ±: μ€ν¬λ‘€μ΄λ 리μ¬μ΄μ¦ μ΄λ²€νΈμ κ°μ΄ μμ£Ό λ°μνλ μ΄λ²€νΈμ κ²½μ°, μ€λ‘νλ§ λλ λλ°μ΄μ± κΈ°λ²μ μ¬μ©νμ¬ μ΄λ²€νΈ νΈλ€λ¬ νΈμΆ λΉλλ₯Ό μ ννμΈμ.
μ΄λ²€νΈ μμ μ¬μ© μμ:
<!DOCTYPE html>
<html>
<head>
<title>Event Listener Example</title>
</head>
<body>
<ul id="myList">
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<script>
const myList = document.getElementById('myList');
myList.addEventListener('click', function(event) {
if (event.target.tagName === 'LI') {
const index = Array.prototype.indexOf.call(myList.children, event.target);
alert(`You clicked on item ${index + 1}`);
}
});
</script>
</body>
</html>
μ΄ μμμμλ λ¨μΌ ν΄λ¦ μ΄λ²€νΈ 리μ€λκ° μμ μλ λͺ©λ‘μ 첨λΆλ©λλ€. 리μ€νΈ μμ΄ν μ ν΄λ¦νλ©΄ μ΄λ²€νΈ 리μ€λλ μ΄λ²€νΈμ λμμ΄ λ¦¬μ€νΈ μμ΄ν μΈμ§ νμΈν©λλ€. λ§μ½ κ·Έλ λ€λ©΄, μ΄λ²€νΈ 리μ€λκ° μ΄λ²€νΈλ₯Ό μ²λ¦¬ν©λλ€. μ΄ μ κ·Ό λ°©μμ κ° λ¦¬μ€νΈ μμ΄ν μ κ°λ³μ μΌλ‘ ν΄λ¦ μ΄λ²€νΈ 리μ€λλ₯Ό 첨λΆνλ κ²λ³΄λ€ λ ν¨μ¨μ μ λλ€.
JavaScript μ±λ₯ μΈ‘μ λ° κ°μ λꡬ
JavaScript μ±λ₯μ μΈ‘μ νκ³ κ°μ νλ λ° λμμ΄ λλ μ¬λ¬ λκ΅¬κ° μμ΅λλ€:
- λΈλΌμ°μ κ°λ°μ λꡬ: μ΅μ λΈλΌμ°μ μλ JavaScript μ½λλ₯Ό νλ‘νμΌλ§νκ³ , μ±λ₯ λ³λͺ© νμμ μλ³νλ©°, λ λλ§ νμ΄νλΌμΈμ λΆμν μ μλ λ΄μ₯ κ°λ°μ λκ΅¬κ° ν¨κ» μ 곡λ©λλ€.
- Lighthouse: Lighthouseλ μΉ νμ΄μ§μ νμ§μ κ°μ νκΈ° μν μ€ν μμ€ μλν λꡬμ λλ€. μ±λ₯, μ κ·Όμ±, νλ‘κ·Έλ μλΈ μΉ μ±, SEO λ±μ λν κ°μ¬λ₯Ό μ 곡ν©λλ€.
- WebPageTest: WebPageTestλ λ€μν μμΉμ λΈλΌμ°μ μμ μΉμ¬μ΄νΈμ μ±λ₯μ ν μ€νΈν μ μλ λ¬΄λ£ λꡬμ λλ€.
- PageSpeed Insights: PageSpeed Insightsλ μΉ νμ΄μ§μ μ½ν μΈ λ₯Ό λΆμν λ€μ ν΄λΉ νμ΄μ§λ₯Ό λ λΉ λ₯΄κ² λ§λ€κΈ° μν μ μμ μμ±ν©λλ€.
- μ±λ₯ λͺ¨λν°λ§ λꡬ: μΉ μ ν리μΌμ΄μ μ μ±λ₯μ μ€μκ°μΌλ‘ μΆμ νλ λ° λμμ΄ λλ μ¬λ¬ μμ© μ±λ₯ λͺ¨λν°λ§ λκ΅¬κ° μμ΅λλ€.
κ²°λ‘
JavaScriptλ λΈλΌμ°μ λ λλ§ νμ΄νλΌμΈμμ μ€μν μν μ ν©λλ€. JavaScript μ€νμ΄ μ±λ₯μ λ―ΈμΉλ μν₯μ μ΄ν΄νλ κ²μ κ³ μ±λ₯ μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° νμμ μ λλ€. μ΄ κΈμμ μ€λͺ ν μ΅μ ν μ λ΅μ λ°λ₯΄λ©΄ λ λλ§ νμ΄νλΌμΈμ λν JavaScriptμ μν₯μ μ΅μννκ³ λΆλλ½κ³ λ°μμ±μ΄ μ’μ μ¬μ©μ κ²½νμ μ 곡ν μ μμ΅λλ€. νμ μΉμ¬μ΄νΈμ μ±λ₯μ μΈ‘μ νκ³ λͺ¨λν°λ§νμ¬ λ³λͺ© νμμ μλ³νκ³ ν΄κ²°νλ κ²μ μμ§ λ§μΈμ.
μ΄ κ°μ΄λλ JavaScriptκ° λΈλΌμ°μ λ λλ§ νμ΄νλΌμΈμ λ―ΈμΉλ μν₯μ μ΄ν΄νκΈ° μν κ²¬κ³ ν κΈ°μ΄λ₯Ό μ 곡ν©λλ€. μ΄λ¬ν κΈ°μ μ κ³μ νμνκ³ μ€ννμ¬ μΉ κ°λ° κΈ°μ μ μ°λ§νκ³ μ μΈκ³ μ¬μ©μλ₯Ό μν νμν μ¬μ©μ κ²½νμ ꡬμΆνμΈμ.