Replies: 11 comments 8 replies
-
공유하고싶은 자료 & 개인적으로 정리한 블로그 등이 있다면 여기👇👇👇에 댓글로 공유해주세요 😆 |
Beta Was this translation helpful? Give feedback.
-
To.썬 @SunYoungKwon
|
Beta Was this translation helpful? Give feedback.
-
To.피터 @iborymagic 저는 리액트에서 가상 돔이 실제 돔에 변경사항을 '한번에' 반영한다는 말이 가상 돔이 구축한 HTML 문자열을 innerHTML로 root div 에 한번에 집어넣는다는 말인 줄 알았습니다. 그러나 곧 그게 아니라는 것을 알게 되었는데요. 새로운 문자열로 전체 DOM 을 재구축해버리면 단순히 변경사항이 한번에 반영되는 것이 아니라 어플리케이션 상의 모든 애니메이션이 전부 다시 트리거 되는 것을 보았기 때문입니다. 즉, innerHTML 에 문자열 넘기는 식으로는 DOM 요소들이 모두 재구축 되어버리는 것입니다. 여기서 문제입니다.
스타일(Style) → [레이아웃 → 페인트 → 합성] 다른 일반적인 경우와 마찬가지로 위의 과정을 거치게 됩니다. 다만 이때의 차이점은 innerHTML 안의 요소들을 나타내는 엘리먼트 객체들이 아예 삭제되어버리고, 문자열을 parsing 해서 완전히 새로운 노드를 recreate 하는 과정을 거치게 됩니다. 이 때문에 초기에만 실행되어야 하는 해당 요소의 애니메이션 또한 다시 수행되는 것입니다.
innerHTML 로 리렌더링을 수행하는 방식은 reparsing 과 recreate 과정을 수반합니다. 그러나 documentFragment 를 통해 반영사항을 여러번 수행하는 것은 메모리 상에 저장된 노드에 변경을 수행하는 것이기 때문에 여러번의 렌더링을 수반하지 않으며 파싱과정도 없습니다. 결과적으로 documentFragment 를 활용하는 방식이 더 성능적으로 효과적이라고 말할 수 있겠습니다.
documentFragment를 활용하면 DOM 객체에 한 번만 접근할 수 있고, 문자열 parsing도 하지 않습니다. 그래서 createDocumentFragment로 경량화된 객체를 만들면 해당 객체는 메모리 상에 존재하기 때문에 자식노드를 붙이는 행위도 메모리 상에서 일어나게 되죠. 그래서 자식을 붙여주는 와중에도 page reflow가 일어나지 않습니다. 그러면 최종적으로 real DOM에 한 번만 접근해서 documentFragment를 붙여주면 가장 효율적인 방법으로 DOM을 변경할 수 있게 됩니다. |
Beta Was this translation helpful? Give feedback.
-
@zigsong 🙋🏻♀️ Q1브라우저 렌더링 중 레이아웃(layout, reflow) 과정이 일어나는 경우는 어떤 경우가 있을까요? 이 과정은 왜 주의해야 할까요? 👉 layout 과정이 일어나는 경우는 repaint만 일어나는 경우 보다 더 오래걸리기 때문에 렌더링 엔진에 부하가 커지고 앱 성능에 영향을 줄 수 있어 주의해야한다. 가능하다면 repaint만 일으키는 방향으로 코드를 작성하는 것이 좋다! 👉 레이아웃을 다시 계산하는 과정이 필요한 경우 리플로우가 발생한다. 이에 해당하는 경우는 다음과 같다.
Q2우리가 만든 앱에서 초기 렌더링 속도를 줄이기 위해서는 어떤 점을 고려해볼 수 있을까요? 디테일한 방법도, 거시적인 방법도 모두 좋습니당~! 👉 주요 렌더링 경로의 웹페이지 로딩을 최적화하면 초기 렌더링 속도를 줄일 수 있다!
Q3렌더링에 대해 공부하며 다음 용어를 처음 접했는데요. 이런 지표를 관리하는 것도 프론트엔드 엔지니어로서의 역할일까요? 그리고 관리가 정말 필요하다면 어떻게 관리하면 좋을까요?
👉 해당 성능지표는 고객확보 여부에 큰 영향을 미치기 때문에 관리해야한다. 👉 이미 만들어진 성능테스트 도구를 적극적으로 활용해볼 수 있다.
|
Beta Was this translation helpful? Give feedback.
-
1. lighthouse 의 Performance 평가 지표 6가지 입니다.각 평가 지표가 의미하는 것과 높은 평가를 받기위한 조건에 대해 알아볼까요? Light house 6 Performance 측정평가 지표와 반영 비율변동성
측정
|
Beta Was this translation helpful? Give feedback.
-
@seojihwan 🙋♂️ 1. 리플로우와 리페인트의 차이에 대해 얘기를 나눠보아요!
2. 브라우저가 렌더링 되는 순서에 대해 얘기를 나눠보아요!
|
Beta Was this translation helpful? Give feedback.
-
To. @dudtjr913 Q1. CSS 애니메이션이 일어나면 브라우저가 어떤 과정으로 화면에 렌더링하는지에 대해 이야기해봅시다.
Q2. 각 렌더링 엔진(게코, 웹킷, 블링크)의 차이점에 대해 이야기해봅시다
웹킷
블링크
게코
|
Beta Was this translation helpful? Give feedback.
-
@365kim 소요시간 1시간 30분 Q1. 브라우저의 Repaint 과정을 줄일 수 있는 방법은 무엇이 있을까요?1. 사용하지 않는 노드에는 2. Reflow, Repaint 가 발생하는 속성 사용 피하기 3. 영향을 주는 노드 줄이기 4. 프레임 줄이기 5. repaint를 줄이는 것보다 reflow를 줄이는 방법! https://boxfoxs.tistory.com/408 Q2. 브라우저 렌더 트리의 구성 요소 중 화면에 표현되지 않는 요소는 무엇이 있을까요?
Q3. 최신 브라우저의 합성(compositing)이란 무엇일까요?
|
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
@swon3210
2. TTFB는 구글의 SEO에 큰 영향을 미치는 수치라고 알고있는데, 이 TTFB를 줄일 수 있는 방법에는 무엇이 있을까요?
3. Audits 패널(lighthouse)의 First Contentful Paint, First Meaningful Paint, Time To Interactive 지표에 대해 설명해주세요.
src: local('Spoqa Han Sans Regular'), local('Spoqa-Han-Sans-Regular'),
url('./assets/fonts/korean/SpoqaHanSans_subset/SpoqaHanSansRegular.woff2') format('woff2'),
/* Super Modern Browsers */
url('./assets/fonts/korean/SpoqaHanSans_subset/SpoqaHanSansRegular.woff') format('woff'),
/* Modern Browsers */
url('./assets/fonts/korean/SpoqaHanSans_subset/SpoqaHanSansRegular.ttf') format('truetype');
/* Safari, Android, iOS */
4. 브라우저의 reflow, repaint를 일으키는 행위와 각각을 최소화할 수 있는 방법이 있다면 공유해주세요.
|
Beta Was this translation helpful? Give feedback.
-
To. @sunhpark42 Q1.렌더링 파이프라인에서 javascript, style, layout, paint, compositing은 각각 어떤 역할을 할까요?
Q2.왜 브라우저는 레이어를 만드는 것 일까요? 웹 페이지는 하나의 거대한 레이어다. 레이어로 구성될 때의 장점
GPU의 side effect
Q3.점진적 렌더링이란 무엇이고 우리가 점진적 렌더링을 도입하기 위해 할 수 있는 일은 무엇이 있을까요? A. 프로그레시브 렌더링이란 콘텐츠를 가능한한 빠르게 표시하기 위해 웹 페이지의 성능을 향상시키는 데 사용되는 기술이다. (특히, 인식되는 로딩 시간을 향상시킨다)
|
Beta Was this translation helpful? Give feedback.
-
하브루타 3기 2주차 메인토픽이자 우테코 Lv2의 마지막 주제!
프론트엔드가 이런 것까지 알아야 해 😬
네! 그렇다고 합니다!
👉 브라우저 렌더링 👈
☘️ 하위키워드 예시
Beta Was this translation helpful? Give feedback.
All reactions