돔...돔... 자꾸 듣고 친숙해지자구 (❁´◡`❁)
추상화 | 모델링: 현실의 개체를 특정 관점으로 바라보아 객체로 만드는 것
👇🏻
모델: 추상화 | 모델링을 통해 만들어진 대상
👇🏻
DOM: (브라우저가 이해하기 쉽게) 추상화된 HTML 태그들을 객체로 만든 것
문서노드: document. 모든 노드에 접근하기 위해선 문서노드를 거쳐야 함.요소노드: HTML 태그 그 자체. ex) <html>, <head>...속성노드: html 속성텍스트노드: 텍스트. 자식 노드를 가질 수 없어서 leaf node가 됨.
Attachment: stylesheet를 parsing(CSSOM)해 스타일 룰을 만들어 DOM 요소에 스타일을 입힘Layout | Reflow: DOM 노드의 위치와 그래픽 계산.Layout(Reflow): 렌더 트리의 각 노드들의 위치와 크기를 계산Repaint: 각 노드들을 실제 픽셀로 그리는 단계DOM이나 스타일이 수정되면 이 과정을 다시 반복.
getElementById: DOM Tree에서 id로 요소노드를 찾음. 맨 처음 찾은 요소 한 개 반환.getElementByClassName: DOM Tree에서 class로 요소노드를 찾음. 일치하는 모든 요소 반환.getElementByTagName: DOM Tree에서 태그 이름로 요소노드를 찾음. 일치하는 모든 요소 반환.querySelector: DOM Tree에서 CSS Selector로 요소노드를 찾음. 맨 처음 찾은 요소 한 개 반환.querySelectorAll: DOM Tree에서 CSS Selector로 요소노드를 찾음. 일치하는 모든 요소 반환.window.[id]: window 객체를 통해서도 id가 있는 요소 찾기 가능. 여러 개는 list로 반환.parentNode: 선택한 요소 노드의 부모 노드.document의 부모 노드: nullfirstElementNode: 선택한 요소 노드의 첫번째 자식. 없으면 nullchildren: 선택한 요소 노드의 모든 자식 요소. 없으면 []nextElementSibling: 선택한 요소 노드의 다음 형제 요소. 없으면 nullpreviousElementSibling: 선택한 요소 노드의 이전 형제 요소. 없으면 null헷갈리는 것만 요약
textContent: 선택한 요소 노드의 text 노드에 접근, 변경.innerHTML: 선택한 요소 노드 내부의 HTML을 직접 수정.createElement(tag name): 요소 노드 생성.만약 여러번 DOM을 수정해야 한다면?
🙀 조작한 만큼 DOM Tree 구성 > CSSOM 구성 > RenderTree 구성 과정을 반복해야 함.
가상 DOM: 실제 DOM Tree를 JS 객체로 만든 것.
가상 DOM을 바뀌는 부분만 수정해 렌더링 하면 브라우저 렌더링 과정이 줄어듬.가상 DOM에 리렌더링.가상 DOM과 현재 내용을 비교.Layout | Reflow 계산 로직을 최소화 해 성능 업데이트.crateDocumentFragment에 DOM 조작 코드들을 모아서 덩어리로 만든다음 한번에 DOM에 올림.