Render Only Visible
renderOnlyVisible 옵션으로 보이는 패널만 DOM에 유지하여 성능을 향상시킵니다.
- JavaScript
- React
- Vue@3
요약
주요 옵션
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
renderOnlyVisible | boolean | false | 보이는 패널만 DOM에 유지 |
모드별 비교
| 설정 | DOM 패널 수 | 스크롤 시 | 메모리 |
|---|---|---|---|
false (기본값) | 전체 패널 | 변화 없음 | 높음 |
true | 보이는 패널만 | DOM 추가/제거 발생 | 낮음 |
상세 설명
동작 원리
renderOnlyVisible: true를 설정하면 보이지 않는 패널의 DOM 엘리먼트를 카메라 컨테이너에서 제거합니다.
스크롤하여 새 패널이 화면에 들어오면 DOM에 추가되고, 화면에서 벗어난 패널은 DOM에서 제거됩니다.
// Vanilla JS
const flicking = new Flicking("#flick", {
renderOnlyVisible: true
});
// React
<Flicking renderOnlyVisible={true}>
{panels.map(p => <Panel key={p.id} />)}
</Flicking>
Vanilla JS와 프레임워크의 차이
이 옵션은 Vanilla JS와 프레임워크 모두에서 동작합니다.
| 환경 | 동작 | 효과 |
|---|---|---|
| Vanilla JS | removeChild/appendChild로 DOM 제거/추가 | DOM 노드 수 절감 |
| React / Vue | 프레임워크 렌더 사이클로 DOM 제거/추가 + 컴포넌트 미렌더링 | DOM 노드 수 절감 + 렌더링 비용 절감 |
프레임워크에서는 컴포넌트 자체의 렌더링 비용도 줄어들기 때문에 더 큰 효과를 볼 수 있습니다.
virtual 옵션과의 차이
| 특성 | renderOnlyVisible | virtual |
|---|---|---|
| DOM 요소 수 | 보이는 패널만 (점진적 추가/제거) | panelsPerView + 버퍼 (고정) |
| 적용 환경 | 모든 환경 | 모든 환경 |
| 패널 콘텐츠 | 제한 없음 | renderPanel 콜백의 innerHTML 문자열만 |
| 설정 복잡도 | 단순 (boolean) | 복잡 (renderPanel 콜백 필요) |
사용 시나리오
언제 renderOnlyVisible을 사용하나요?
사용 권장:
- 패널 수가 많아 DOM 노드를 줄이고 싶은 경우
- 프레임워크에서 패널 컴포넌트가 복잡한 경우
- virtual의 복잡성을 피하고 싶은 경우
virtual이 더 적합한 경우:
- 패널 수가 매우 많은 경우 (100개 이상)
- 메모리 사용량을 최소화해야 하는 경우
- 단순한 패널 내용인 경우
관련 링크
관련 옵션
virtual: DOM 요소 자체를 제한하는 가상화
관련 데모
- Virtual Scroll: virtual 옵션을 사용한 가상화
- Lazy Load: renderOnlyVisible과 결합한 지연 로딩