
모든 DOM 혹은 CSS 등에서 애니메이션을 넣어야 하는 상황이 온다면 해당 애니메이션 엘리먼트 요소를 절대값으로 위치하는 것이 좋다. 이유는 간단하다. 리플로우를 방지하기 위함이다. 절대값이 아닌 상대값(relative)로 애니메이션을 구현하게 된다면 다른 엘리먼트들도 변경이 되어 리플로우 되어 DOM 속도가 느려지게 된다. 절대값으로 지정하게 되면 애네메이션으로 지정된 엘리먼트만 동작하기 때문에 다른 엘리먼트 요소에 대해서 리플로우를 최소화 시킬 수 있다. 무슨말인지 모르겠는가? 리플로우를 공부하면 알 것이다.

자바스크립트에서 preventDefault, stopPropagation 은 비슷해 보이면서도 다른 목적을 가지고 있는 이벤트 핸들러 함수이다. 이 함수의 큰 목적은 preventDefault : 현재 객체에 있는 모든 실행요소를 멈춘다. stopPropagation : 상위 노드로 가는 이벤트를 멈춘다. 1. stopPropagation 두개의 이벤트 함수를 이해하기 위해서는 이벤트 버블링을 알아야 한다. 위와 같은 간단한 예제를 보면 클릭을 클릭하면 어떻게 실행이 될까? 1) parent -> child 2) child -> parent 답은 2번이다. 이벤트 버블링은 현재 있는 노드부터 상위(부모)노드로 올라가면서 진행이 된다. 그런데 나는 여기서 클릭을 누르면 child만 띄우고 parent 띄우..

브라우저가 페이지의 구성요소 전체(Html, Javascript, CSS)를 내려받으면 기본족으로 내부적인 데이터 구조 두가지를 만든다 DOM 트리 : 페이지 구조를 나타내는 것 렌더트리 : DOM 노드를 어떻게 표시할 지 나타내는 것 렌더트리는 DOM트리 노드 중 표시할 모든 노드에 대해 적어도 하나의 노드르 만든다. 렌더트리에 있는 노드는 페이지 요소를 마진, 패딩, 테두리, 포지션등 박스로 취급하는 CSS모델과 연관해서 프레임 또는 박스로 불린다. DOM 트리와 렌더트리를 다 만들면 브라우저는 페이지 요소를 표시(페인트) 할 수 있다. DOM이 완료가 되고 그 후에 DOM이 변경 되면 브라우저는 변경된 요소에 대해 구조, 위치, 디자인 등 다시 계산하여 DOM에 적용을 한다. 이러한 과정을 Refl..

생각없이 개발을 하다보면 지역변수를 선언하지 않고 객체에 직접접근하여 사용하는 경우가 있다. 특히 반복문을 작성할 때 많이들 실수하는 부분인데 이런 부분은 작은 사이트일 때는 큰 변화가 없지만 큰 사이트일 수록 속도에 비약적으로 차이가 난다. 간단한 예제를 보자 div의 개수를 가져와서 반복문을 돌리는 간단한 예제이다. 위의 반복문은 직접접근, 아래의 반복문은 지역번수에 캐시해서 돌아간다. 개수가 작을 때는 크게 상관이 없겠지만 개수가 늘어나면 늘어날 수록 시간차이는 분명 존재한다. 대략 0.6초 가 차이나는데 브라우저가 느린환경이라면 더 느릴수도 있다는 이야기이다.