index
index0. μ λλ©μ΄μ
ꡬλ νλ‘μΈμ€1. setTimeoutκ³Ό setIntervalμ νκ³2. requestAnimationFrame3. requestAnimationFrameλ₯Ό μ¬μ©ν μ μλ€λ©΄?
0. μ λλ©μ΄μ ꡬλ νλ‘μΈμ€
λ°©λ¬Έν μΉνμ΄μ§μ μ λλ©μ΄μ
μ΄ μ΄μ μμ§μ΄λ κ²μ²λΌ μμ°μ€λ¬μ΄κ°μ? μλ§ κ·Έ μ΄μ λ ν΄λΉ μ λλ©μ΄μ
μ 1μ΄λΉ νλ μ κ°μ(fps)κ° λ§κΈ° λλ¬ΈμΌ κ²μ
λλ€. μ΅κ·Όμ κΈ°κΈ°λ€μ μμ°μ€λ¬μ΄ μκ° ν¨κ³Όλ₯Ό μν΄ μ΄λΉ 60νμ νλ©΄μ κ·Έλ €λ΄κ³€ νλλ°μ. μ΄ κ²½μ° κ° νλ μμλ 16ms κ°λμ μκ°λ§ ν λΉλ©λλ€(1μ΄/60 = 16.66ms).
κ·Έλ°λ° λΈλΌμ°μ κ° μ΄ λͺ¨λ νλ μμ ꡬλνκΈ° μν΄μλ μ€ν μ€λΉ μκ°μ΄ νμν©λλ€. λ°λΌμ 10ms λμ λͺ¨λ ꡬλ μ€λΉ(λ λλ§)λ₯Ό λ§μ³μΌ ν©λλ€. λ§μ½ μ΄λ₯Ό μ ν μκ°(10ms) λ΄μ ν΄λ΄μ§ λͺ»νλ©΄, μ°λ¦¬κ° μ’
μ’
μΉνμ΄μ§μμ λ°κ²¬νκ³€ νλ μ λλ©μ΄μ
λ²λ²
κ±°λ¦Όμ΄ μΌμ΄λ©λλ€.
Β

1. setTimeoutκ³Ό setIntervalμ νκ³
μνκΉκ²λ,
setTimeout
κ³Ό setInterval
μ΄ λ ν¨μλ₯Ό μ΄μ©νλ€λ©΄ μ λλ©μ΄μ
μ΄ μκ°λ³΄λ€ λΆλλ½κ² ꡬλλμ§ μμ μ μμ΅λλ€. κ·Έ μ΄μ λ μ΄ λ ν¨μκ° μ£Όμ΄μ§ μκ° λ΄μ μ½λ°±λ§ νκΈ° λλ¬Έμ
λλ€. μ¦ νλ μ μμ μμ μ΄λ μ λλ©μ΄μ
μ λ λλ§ νλ‘μΈμ€λ₯Ό κ³ λ €νμ§λ μμ΅λλ€. μ΄ λλ¬Έμ μ λλ©μ΄μ
μ΄ λ²λ²
λλ λ¬Έμ κ° λ°μν©λλ€.λν,
setTimeout
κ³Ό setInterval
μ μ¬μ©μκ° νμ΄μ§λ₯Ό λ³΄μ§ μλ μμ μμλ κ³μν΄μ μ€νλΌ, λ°°ν°λ¦¬ μλͺ
μ΄λ μ±λ₯μ νλ½μν¬ μ μμ΅λλ€.
setTimeout
μ΄ λΈλΌμ°μ μ μ λλ©μ΄μ
ꡬλ νλ‘μΈμ€λ₯Ό μ΄ν΄νμ§ μκ³ κ΅¬νλλ μ₯λ©΄ μμ (μΆμ² )Β
λ°λΌμ λ§μΌ λΆλλ½κ³ λκΉ μλ ꡬλμ μνλ€λ©΄, λ ν¨μλ μ μ ν κΈ°λ₯μ μννμ§ μμ μ μμ΅λλ€. λλΆμ΄ μ€ν μκ°μ΄ κΈΈκ±°λ νμ΄λ°μ΄ μ’μ§ μμ μλ°μ€ν¬λ¦½νΈλ μ±λ₯ λ¬Έμ λ₯Ό μ½κ² μΌμΌν€κ³€ ν©λλ€. μμ μ μΈ μΉ μ λλ©μ΄μ
μ λ§λ€κ³ μΆλ€λ©΄, μ΄ λ¬Έμ λ₯Ό μ΅μνν λ°©λ²μ μ°ΎμμΌ ν©λλ€.
2. requestAnimationFrame
μ΄μ λμμ΄ λ ν¨μκ° λ°λ‘
requestAnimationFrame
μ
λλ€. μ΄ ν¨μλ λ λλ§ νμ΄νλΌμΈ λ΄μ 리νμΈνΈκ° μ§νλκΈ° μ μ μ€νν μ½λ°±μ μΈμλ‘ λ°μ λΈλΌμ°μ λ‘ νμ¬κΈ μνλ ν¨μκ° μ μ ν νμ΄λ°μ μ€νλκ²λ ν©λλ€. μ¦ νλ μ κ°μκ° λ§μ μ λλ©μ΄μ
μ΄ μμ°μ€λ½κ² ꡬλλκΈ° μν΄, κ° νλ μ μμ μμ κ³Ό ν¨μ ꡬλ μμ μ λ§μΆλλ‘ requestAnimationFrame
μ΄ λΈλΌμ°μ μκ² λͺ
λ Ήμ λ΄λ¦¬λ κ²μ΄μ£ . (λ λλ§ νμ΄νλΌμΈμ μμ μμ κ³Ό νλ μ μμ μμ μ λ§μΆλ κΈ°λ₯μ νλ κ²λλ€!)κ·ΈλΌ, λκ·Έλ μμ΄ μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ λΉ λ₯΄κ² μ΄λνλ κ°λ¨ν μ λλ©μ΄μ
μ ꡬνν΄λ³΄κ² μ΅λλ€.
λ¨Όμ λκ·Έλ μμ λ§λ€μ΄μ£Όμ΄μΌ ν©λλ€.
<!DOCTYPE html> <html> <head> <title>moving circle</title> <style type="text/css"> .circle{ position: relative; border: 1px solid yellow; border-radius:50px; background: yellow; width:100px; height:100px; } </style> </head> <body> <div class="circle"></div>
μ΄λ κ² λ
Έλμ λκ·ΈλΌλ―Έλ₯Ό λ§λ€μ΄ μ£Όμ
¨λ€λ©΄ μ΄μ λ, go()λΌλ ν¨μλ₯Ό λ§λ€μ΄λ³΄κ² μ΅λλ€.
var touch = 0; var a = document.querySelector(".circle"); var fast = 0; function go() { a.style.left = ((count += 5) % 700) + "px"; // μ§μμ μΌλ‘ styleνκ·Έμ μλλ₯Ό λΌ μ μκ² countλ₯Ό μΆκ°ν΄μ€λ€. touch = requestAnimationFrame(go); } requestAnimationFrame(go);
λ
Έλμ λκ·ΈλΌλ―Έκ° μΌ μμ΄ μΌμͺ½μμ μ€λ₯Έμͺ½μΌλ‘ μμ§μ΄λ μ λλ©μ΄μ
μ΄ λ§λ€μ΄μ‘μ΅λλ€.
λ§μ½ κ²μμ λ§λ€ λ― μμ ν΄λ¦νλ©΄ λ©μΆλ μ΄λ²€νΈλ₯Ό λ§λ€κ³ μΆμΌμ κ°μ? κ·Έλ λ€λ©΄
requestAnimationFrame
μ μ·¨μν΄μ£Όμλ©΄ λ©λλ€! κ·Έ λ°©λ²μ cancleAnimationFrame
λͺ
λ Ήμ λΈλΌμ°μ μ λ΄λ €μ£Όμλ κ²λλ€. μλμ κ°μ΄, 쑰건μ μΆκ°ν΄μ£ΌμΈμ.document.querySelector(".circle").addEventListener("click", function () { if(touch) { window.cancelAnimationFrame(touch); touch = null; } else { go(); } });
μ΄λ κ² κ°λ¨ν, μμ§μ΄λ μ λλ©μ΄μ
μ λκΉ μμ΄ λ§λ€κ³ λ μνλ€λ©΄ λ©μΆκ²λ νλ μμ
μ μλ£νμ΅λλ€. λ²μΈλ‘ λ§λ€κ³ νμΈν΄λ³΄μλ©΄ μμκ² μ§λ§, μ λλ©μ΄μ
μ΄ μμ§μ΄λ μνμμ λ€λ₯Έ μ°½μΌλ‘ μ΄λνλ€κ° λ€μ λμμμ λ, μ μ λ©μ·λ μ λλ©μ΄μ
μ΄ λ€μ μμ§μ΄λ κ²μ νμΈνμ€ μ μμ κ²λλ€. μ΄λ κ²
requestAnimationFrame
μ λκΉλ μκ³ , λ°°ν°λ¦¬λ μκ»΄μ£Όλ μ’μ ν¨μμ
λλ€ :)3. requestAnimationFrameλ₯Ό μ¬μ©ν μ μλ€λ©΄?
νΉμ
requestAnimationFrame
ν¨μλ₯Ό μ΄μ©νκΈ° μ΄λ €μ΄κ°μ?requestAnimationFrame
ν¨μλ μμ λ°°μ΄ setTimeout
ν¨μμ setInterval
ν¨μμ λΉν΄ μ΅κ·Όμ λ§λ€μ΄μ§ ν¨μμ
λλ€. λ°λΌμ μ΄ ν¨μλ₯Ό μ§μνμ§ μλ λΈλΌμ°μ μμλ λΈλΌμ°μ μ΄μ©νν© λ³΄λ¬κ°κΈ° μ΄μ©μ΄ μ΄λ €μΈ μ μμ΅λλ€. λν λͺλͺ λΈλΌμ°μ λ requestAnimationFrame
μ΄ μλ λ€λ₯Έ μ΄λ¦μΌλ‘ ν¨μλ₯Ό μ μν΄ λμ μ¬μ©μμκ² νΌλμ μΌμΌν€κΈ°λ ν©λλ€.window.requestAnimationFrame = (function(callback) { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60); }; })();
λ€νν, μ΄λ₯Ό 극볡ν λ°©λ²μ΄ μμ΅λλ€. μλ¨μ μ½λλ₯Ό μμ±ν΄ λ£μΌμλ©΄ μΌκ΄μ μΌλ‘
requestAnimationFrame
μ΄λΌλ μ΄λ¦μΌλ‘ ν΄λΉ κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.Β